Docker中的鏡像分層
Docker 支持通過擴展現(xiàn)有鏡像,創(chuàng)建新的鏡像。實際上,Docker Hub 中 99% 的鏡像都是通過在 base 鏡像中安裝和配置需要的軟件構(gòu)建出來的。
1、Docker 鏡像為什么分層
鏡像分層最大的一個好處就是共享資源。 比如說有多個鏡像都從相同的 base 鏡像構(gòu)建而來,那么 Docker Host 只需在磁盤上保存一份 base 鏡 像;同時內(nèi)存中也只需加載一份 base 鏡像,就可以為所有容器服務了。而且鏡像的每一層都可以被共 享。
如果多個容器共享一份基礎(chǔ)鏡像,當某個容器修改了基礎(chǔ)鏡像的內(nèi)容,比如 /etc 下的文件,這時其他容 器的 /etc 是不會被修改的,修改只會被限制在單個容器內(nèi)。這就是容器 Copy-on-Write 特性。
2、可寫的容器層
當容器啟動時,一個新的可寫層被加載到鏡像的頂部。這一層通常被稱作“容器層”,“容器層”之下的都叫 “鏡像層”。?
所有對容器的改動 - 無論添加、刪除、還是修改文件都只會發(fā)生在容器層中。只有容器層是可寫的,容 器層下面的所有鏡像層都是只讀的。
3、容器層的細節(jié)說明
鏡像層數(shù)量可能會很多,所有鏡像層會聯(lián)合在一起組成一個統(tǒng)一的文件系統(tǒng)。如果不同層中有一個相同 路徑的文件,比如 /a,上層的 /a 會覆蓋下層的 /a,也就是說用戶只能訪問到上層中的文件 /a。在容器 層中,用戶看到的是一個疊加之后的文件系統(tǒng)。
Dockerfile 介紹
Docker中有個非常重要的概念叫做——鏡像(Image)。Docker 鏡像是一個特殊的文件系統(tǒng),除 了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(shù) (如匿名卷、環(huán)境變量、用戶等)。鏡像不包含任何動態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會被改變。
????????鏡像的定制實際上就是定制每一層所添加的配置、文件。如果我們可以把每一層修改、安裝、構(gòu) 建、操作的命令都寫入一個腳本,用這個腳本來構(gòu)建、定制鏡像,那么之前提及的無法重復的問題、鏡 像構(gòu)建透明性的問題、體積的問題就都會解決。這個腳本就是 Dockerfile。
????????Dockerfile 是一個文本文件,其內(nèi)包含了一條條的指令(Instruction),每一條指令構(gòu)建一層,因此每 一條指令的內(nèi)容,就是描述該層應當如何構(gòu)建。
[root@localhost ~]# mkdir /db
[root@localhost ~]# cd /db
[root@localhost db]# systemctl start docker
[root@localhost db]#
[root@localhost db]# vim Dockerfile
ARG VER=latest
FROM busybox:$VER
MAINTAINER wyx<wyx@111.com>
ENV WEB_DOC_ROOT="/data/web/html"
RUN mkdir -p ${WEB_DOC_ROOT}
COPY index.html ${WEB_DOC_ROOT}/index.html
EXPOSE 80
CMD /bin/httpd -f -h ${WEB_DOC_ROOT}
Dcokerfile指令介紹?
?FROM?
?介紹
- FROM 指令必須是 Dockerfile 中非注釋行的第一個指令,即一個 Dockerfile 從FROM語句; FROM 指令用于為鏡像文件構(gòu)建過程指定基礎(chǔ)鏡像,后續(xù)的指令運行于此基礎(chǔ)鏡像所提供的運行環(huán) 境;
- 實踐中,基準鏡像可以是任何可用鏡像文件,默認情況下,docker build會在docker主機上查找指 定的鏡像文件,在其不存在時,則會自動從 Docker 的公共庫 pull 鏡像下來。如果找不到指定的 鏡像文件,docker build 會返回一個錯誤信息;
- FROM可以在一個 Dockerfile 中出現(xiàn)多次,如果有需求在一個 Dockerfile 中創(chuàng)建多個鏡像。 如果FROM語句沒有指定鏡像標簽,則默認使用latest標簽。
ARG
介紹
- ARG指令類似ENV,定義了一個變量;區(qū)別于ENV:用戶可以在構(gòu)建時docker build --build-arg = 進行對變量的修改;ENV不可以;
- 如果用戶指定了未在Dockerfile中定義的構(gòu)建參數(shù),那么構(gòu)建輸出警告。?
?MAINTAINER?
介紹
????????用于讓dockerfile制作者提供本人的詳細信息 dockerfile 并不限制MAINTAINER 指令可在出現(xiàn)的位置,但推薦將其放置于FROM指令之后
COPY
介紹
用于從docker 主機復制新文件或者目錄至創(chuàng)建的新鏡像指定路徑中
?EXPOSE
介紹
用于為容器打開指定要監(jiān)聽的端口以實現(xiàn)與外部通信
RUN
介紹
用于指定docker build過程中運行的程序,其可以是任何命令?文章來源:http://www.zghlxwxcb.cn/news/detail-841419.html
ENV
介紹
- 用于為鏡像定義所需的環(huán)境變量,并可被Dockerfile文件中位于其后的其它指令(如ENV、ADD、 COPY等)所調(diào)用
- 調(diào)用格式為$variable_ name 或 ${variable_ name}
示例?
[root@localhost db]# docker build -t web:v2 ./ --load
[+] Building 1.5s (7/7) FINISHED docker-container:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 344B 0.0s
=> [internal] load metadata for docker.io/library/busybox:latest 1.3s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/2] FROM docker.io/library/busybox:latest@sha256:650fd573e056b679a5110a70aabeb01e26b76e545ec4b9c70a9523f2dfaf18c6 0.0s
=> => resolve docker.io/library/busybox:latest@sha256:650fd573e056b679a5110a70aabeb01e26b76e545ec4b9c70a9523f2dfaf18c6 0.0s
=> CACHED [2/2] RUN mkdir -p /data/web/html && echo "<h1>Busybox httpd server</h1>" > /data/web/html/index.html 0.0s
=> exporting to docker image format 0.1s
=> => exporting layers 0.0s
=> => exporting manifest sha256:ac9ab7ea17a22df4d6b811825b8d72617057773c55d4ac1333202c077d02edc9 0.0s
=> => exporting config sha256:d295a55faa063775dc81658b0f9a2b022e8c3ebee479fe7b94386155c695c810 0.0s
=> => sending tarball 0.1s
=> importing to docker 0.0s
=> => loading layer 29daefb0147a 223B / 223B 0.0s
[root@localhost db]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
web v2 d295a55faa06 6 minutes ago 4.26MB
moby/buildkit buildx-stable-1 480495983c47 5 weeks ago 172MB
wordpress latest 2fc2a7b04129 5 weeks ago 739MB
tencentci/discuz latest caba9d3ea6d8 8 weeks ago 574MB
mysql 5.7 5107333e08a8 3 months ago 501MB
goharbor/harbor-exporter v2.8.4 b8d33e28ec68 6 months ago 97.7MB
goharbor/redis-photon v2.8.4 7b7324d651ca 6 months ago 120MB
goharbor/trivy-adapter-photon v2.8.4 91d8e9f0b21a 6 months ago 464MB
goharbor/notary-server-photon v2.8.4 a46f91560454 6 months ago 113MB
goharbor/notary-signer-photon v2.8.4 da66bd8d944b 6 months ago 110MB
goharbor/harbor-registryctl v2.8.4 805b38ca6bee 6 months ago 141MB
goharbor/registry-photon v2.8.4 756769e94123 6 months ago 79MB
goharbor/nginx-photon v2.8.4 375018db778b 6 months ago 116MB
goharbor/harbor-log v2.8.4 8a2045fb24d2 6 months ago 124MB
goharbor/harbor-jobservice v2.8.4 97808fc10f64 6 months ago 141MB
goharbor/harbor-core v2.8.4 c26fcd0714d8 6 months ago 164MB
goharbor/harbor-portal v2.8.4 4a8b0205c0f9 6 months ago 124MB
goharbor/harbor-db v2.8.4 5b8af16d7420 6 months ago 174MB
goharbor/prepare v2.8.4 bdbf974d86ce 6 months ago 166MB
busybox latest ba5dc23f65d4 9 months ago 4.26MB
mysql 5.6 dd3b2a5dcb48 2 years ago 303MB
y109/discuz latest 607a1b6e9cc4 8 years ago 542MB
training/webapp latest 6fae60ef3446 8 years ago 349MB
training/postgres latest 6fa973bb3c26 9 years ago 365MB
[root@localhost db]# docker run -d --name test1 -P web:v2
ed9d72069d829036d826e87875f1b15242c358d67d95130862ef8ee440caa0f3
[root@localhost db]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ed9d72069d82 web:v2 "/bin/sh -c '/bin/ht…" 5 seconds ago Up 4 seconds 0.0.0.0:32768->80/tcp test1
faed7103e3ff moby/buildkit:buildx-stable-1 "buildkitd" 11 minutes ago Up 11 minutes buildx_buildkit_default
?文章來源地址http://www.zghlxwxcb.cn/news/detail-841419.html
到了這里,關(guān)于Docker容器化技術(shù)(使用Dockerfile制作鏡像)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!