?Dockerfile 中的每個(gè)指令都會(huì)創(chuàng)建一個(gè)新的鏡像層;
鏡像層將會(huì)被緩存和復(fù)用;
當(dāng) Dockerfile 的指令修改了,復(fù)制的文件變化了,或者構(gòu)建鏡像時(shí)指定的變量不同了,對(duì)應(yīng)的鏡像層緩存就會(huì)失效;
某一層的鏡像緩存失效之后,它之后的鏡像層緩存都會(huì)失效;
鏡像層是不變的,如果在某一層中添加一個(gè)文件,然后在下一層中刪除它,則鏡像中依然包含該文件成都創(chuàng)新互聯(lián)是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁(yè)美工、網(wǎng)站程序員、網(wǎng)頁(yè)設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營(yíng)銷人員及形象策劃。承接:網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)站改版、網(wǎng)頁(yè)設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫(kù)開(kāi)發(fā),以高性價(jià)比制作企業(yè)網(wǎng)站、行業(yè)門(mén)戶平臺(tái)等全方位的服務(wù)。
是應(yīng)用發(fā)布的標(biāo)準(zhǔn)格式
可支撐一個(gè)docker容器的運(yùn)行
基于已有鏡像創(chuàng)建
基于本地模板創(chuàng)建
基于dockerfile創(chuàng)建
docker commit [選項(xiàng)] 容器ID/名稱 倉(cāng)庫(kù)名稱:[標(biāo)簽]
-m:說(shuō)明信息
-a:作者信息
-p:生成過(guò)程中停止容器的運(yùn)行
通過(guò)導(dǎo)入操作系統(tǒng)模板文件生成新的鏡像
使用wget命令導(dǎo)入為本地鏡像
導(dǎo)入成功后可查看本地鏡像信息
基礎(chǔ)鏡像信息;
維護(hù)者信息;
鏡像操作指令;
容器啟動(dòng)時(shí)執(zhí)行指令;
指令 | 含義 |
---|---|
FROM 鏡像 | 指定新鏡像所基于的鏡像,第一條指令必須為FROM指令,每創(chuàng)建一個(gè)鏡像就需要一條FROM指令 |
MAINTAINER 名字 | 說(shuō)明新鏡像的維護(hù)人信息 |
RUN 命令 | 在所基于的鏡像上執(zhí)行命令,并提交到新的鏡像中 |
CMD [“要運(yùn)行的程序”,”參數(shù)1”,”參數(shù)2”] | 指令啟動(dòng)容器時(shí)要運(yùn)行的命令或者腳本,Dockerfile只能有一條CMD命令,如果指定多條則只能最后一條被執(zhí)行 |
EXPOSE 端口號(hào) | 指定新鏡像加載到Docker時(shí)要開(kāi)啟的端口 |
ENV 環(huán)境變量 變量值 | 設(shè)置一個(gè)環(huán)境變量的值,會(huì)被后面的RUN使用 |
ADD 源文件/目錄 目標(biāo)文件/目錄 | 將源文件復(fù)制到目標(biāo)文件,源文件要與Dockerfile位于相同目錄中, 或者是一個(gè)URL |
COPY 源文件/目錄 目標(biāo)文件/目錄 | 將本地主機(jī)上的文件/目錄復(fù)制到目標(biāo)地點(diǎn),源文件/目錄要與Dockerfile在相同的目錄中 |
VOLUME [“目錄”] | 在容器中創(chuàng)建一個(gè)掛載點(diǎn) |
USER 用戶名/UID | 指定運(yùn)行容器時(shí)的用戶 |
WORKDIR 路徑 | 為后續(xù)的RUN、CMD、ENTRYPOINT指定 工作目錄 |
ONBUILD 命令 | 指定所生成的鏡像作為一個(gè)基礎(chǔ)鏡像時(shí)所要運(yùn)行的命令 |
HEALTHCHECK | 健康檢查 |
[root@localhost ~]# docker pull centos ##下載鏡像
[root@localhost ~]# docker create -it centos /bin/bash ##基于centos鏡像創(chuàng)建容器
30d395e63fc32b9dcf96029869f40a8002990f689410cca2660af4056ed2614f
[root@localhost ~]# docker ps -a ##查看容器信息
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
30d395e63fc3 centos "/bin/bash" 7 seconds ago Created inspiring_germain
[root@localhost ~]# docker commit -m "new" -a "daoke" 30d395e63fc3 daoke:centos
##將容器里面運(yùn)行的程序及運(yùn)行環(huán)境打包生成新的鏡像
sha256:66d76f9225b94ce6156db953bd16c384f74067f981d45bee99340f3a965506d3
[root@localhost ~]# docker images ##查看鏡像
REPOSITORY TAG IMAGE ID CREATED SIZE
daoke centos 66d76f9225b9 10 seconds ago 220MB
centos latest 0f3e07c0138f 3 months ago 220MB
[root@localhost ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/ ##將本地模板掛載到Linux上
Password for root@//192.168.100.3/LNMP-C7:
[root@localhost ~]# cd /mnt ##切換目錄到/mnt
[root@localhost docker]# ls
debian-7.0-x86-minimal.tar.gz
[root@localhost mnt]# cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new
##基于本地模板創(chuàng)建一個(gè)鏡像
sha256:487145d2411f0440c50fd93d0e8a9e27610d2de745a25d06955f21c80e65753a
[root@localhost mnt]# docker images ##查看鏡像
REPOSITORY TAG IMAGE ID CREATED SIZE
daoke new 487145d2411f 8 seconds ago 215MB
centos latest 0f3e07c0138f 3 months ago 220MB
[root@localhost ~]# mkdir apache ##創(chuàng)建一個(gè)目錄
[root@localhost ~]# cd apache/
[root@localhost apache]# vim Dockerfile ##編寫(xiě)一個(gè)dockerfile文件
FROM centos ##基于的基礎(chǔ)鏡像
MAINTAINER The porject ##維護(hù)鏡像的用戶信息
RUN yum -y update ##鏡像操作指令安裝Apache軟件
RUN yum -y install httpd ##安裝Apache服務(wù)
EXPOSE 80 ##開(kāi)啟80端口
ADD index.html /var/www/html/index.html ##復(fù)制網(wǎng)址首頁(yè)文件
ADD run.sh /run.sh ##將執(zhí)行腳本復(fù)制到鏡像中
RUN chmod 755 /run.sh
CMD ["/run.sh"] ##啟動(dòng)容器時(shí)執(zhí)行腳本
[root@localhost apache]# vim run.sh ##編輯run.sh腳本
#!/bin/bash
rm -rf /run/httpd/* ##清除緩存
exec /usr/sbin/apachectl -D FOREGROUND ##執(zhí)行apache
[root@localhost apache]# echo "this is test web" > index.html ##創(chuàng)建頁(yè)面信息
[root@localhost apache]# ls
Dockerfile index.html run.sh
[root@localhost apache]# docker build -t httpd:centos . ##執(zhí)行創(chuàng)建鏡像
[root@localhost apache]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd centos b267aaf2c395 22 seconds ago 401MB
[root@localhost apache]# docker ps -a ##此時(shí)沒(méi)有容器生成
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost apache]# docker run -d -p 1234:80 httpd:centos ##創(chuàng)建映射,創(chuàng)建容器
34c424efdab9e381116de697c4971200b1564b1e38644407cc58d5ba8923a0ea
[root@localhost apache]# docker ps -a ##容器開(kāi)啟,1234是外部端口,80是內(nèi)部端口
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
34c424efdab9 httpd:centos "/run.sh" 9 seconds ago Up 7 seconds 0.0.0.0:1234->80/tcp great_williamson
隨著創(chuàng)建的鏡像日志增多,就需要有一個(gè)保存鏡像的地方,這就是倉(cāng)庫(kù)。目前主要有兩種倉(cāng)庫(kù):公共倉(cāng)庫(kù)、私有倉(cāng)庫(kù)。最方便的就是使用公共倉(cāng)庫(kù)上傳和下載鏡像,下載公共倉(cāng)庫(kù)中的鏡像不需要注冊(cè),但是上傳是需要注冊(cè)的:公共倉(cāng)庫(kù)網(wǎng)址
##需要注冊(cè)docker賬號(hào)
##將創(chuàng)建好的 httpd:centos 鏡像。上傳到剛申請(qǐng)的公共倉(cāng)庫(kù)中:
docker tag httpd:centos xu/httpd:centos
docker push xu/httpd:centos
[root@localhost ~]# docker pull registry ##下載 registry鏡像
[root@localhost ~]# vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.13.128:5000"], ##指定倉(cāng)庫(kù)地址和端口號(hào)
"registry-mirrors": ["https://3a8s9zx5.mirror.aliyuncs.com"] ##鏡像加速
}
[root@localhost ~]# systemctl stop docker ##停止docker,開(kāi)啟docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker create -it registry /bin/bash ##創(chuàng)建registry鏡像容器
209dadd90f5c555ba328fae5763a61ae5fe4489acc4bfb945a99bb2307a9f139
[root@localhost ~]# docker ps -a ##查看容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
209dadd90f5c registry "/entrypoint.sh /bin…" 4 seconds ago Created admiring_dewdney
34c424efdab9 httpd:centos "/run.sh" 13 minutes ago Exited (137) 35 seconds ago great_williamson
[root@localhost ~]# docker start 209dadd90f5c ##開(kāi)啟容器
209dadd90f5c
[root@localhost ~]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
##創(chuàng)建映射端口和數(shù)據(jù)卷,宿主局的/data自動(dòng)掛載容器重點(diǎn)的/tmp
fd4185499dfa29f1a1133f59b706a5524572ae3f22140137214ab4c8212ea8a4
[root@localhost ~]# docker images ##查看一下當(dāng)前的鏡像
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd centos b267aaf2c395 17 minutes ago 401MB
centos latest 0f3e07c0138f 3 months ago 220MB
registry latest f32a97de94e1 10 months ago 25.8MB
[root@localhost ~]# docker tag httpd:centos 192.168.13.128:5000/httpd ##修改標(biāo)簽
[root@localhost ~]# docker push 192.168.13.128:5000/httpd ##上傳鏡像
[root@localhost ~]# curl -XGET http://192.168.13.128:5000/v2/_catalog ##獲取私有倉(cāng)庫(kù)列表
{"repositories":["httpd"]}
[root@localhost ~]# docker pull 192.168.13.128:5000/httpd ##通過(guò)私有倉(cāng)庫(kù)下載
docker 提供了映射容器端口到宿主機(jī)和容器互聯(lián)機(jī)制來(lái)為容器提供網(wǎng)絡(luò)服務(wù)。
Docker 提供端口映射機(jī)制來(lái)將容器內(nèi)的服務(wù)提供給外部網(wǎng)絡(luò)訪問(wèn),實(shí)質(zhì)上就是將宿主機(jī)的端口映射到容器中,使得外部網(wǎng)絡(luò)訪問(wèn)宿主機(jī)的端口便可訪問(wèn)容器內(nèi)的服務(wù)。
[root@localhost ~]# docker run -d -P nginx ##隨機(jī)指定端口
[root@localhost ~]# docker ps -a ##查看容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bcd11c99804e nginx "nginx -g 'daemon of…" 13 seconds ago Up 13 seconds 0.0.0.0:32768->80/tcp
[root@localhost ~]# docker run -d -p 32000:80 nginx ##指定端口
[root@localhost ~]# docker run -itd -P --name web1 centos /bin/bash ##創(chuàng)建web1容器
87c58af3100fbc112bf344a421942dd53451c0c663b697a55a8d410868f314bf
[root@localhost ~]# docker run -itd -P --name web2 --link web1:web1 centos /bin/bash
##創(chuàng)建web2連接web1容器
7a84075802b5689912c323196b5af398fb5912316efda014921c0e23d3e9cdd2
[root@localhost ~]# docker ps -a ##查看容器信息
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a84075802b5 centos "/bin/bash" 6 seconds ago Up 5 seconds web2
87c58af3100f centos "/bin/bash" 42 seconds ago Up 41 seconds web1
[root@localhost ~]# docker exec -it 7a84075802b5 /bin/bash ##進(jìn)入web2容器
[root@7a84075802b5 /]# ping web1 ##pingweb1看是否互聯(lián)互通
PING web1 (172.17.0.5) 56(84) bytes of data.
64 bytes from web1 (172.17.0.5): icmp_seq=1 ttl=64 time=0.090 ms
64 bytes from web1 (172.17.0.5): icmp_seq=2 ttl=64 time=0.089 ms