1,Dockers的最小鏡像
創(chuàng)新互聯(lián)建站自2013年創(chuàng)立以來(lái),先為三山等服務(wù)建站,三山等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為三山企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
[root@localhost ~]# docker pull hello-world
//下載一個(gè)最小的鏡像
[root@localhost ~]# docker images
//查看鏡像
[root@localhost ~]# docker run hello-world
//運(yùn)行一下hello-world (里面是一個(gè)文本對(duì)docker運(yùn)行的簡(jiǎn)單介紹)
dockerfile的組成
1)FROM:scratch(抓、撓)
2)COPY:hello /
3)CMD:[“/hello”]
FROM
語(yǔ)法:FROM [:]
解釋:設(shè)置要制作的鏡像基于哪個(gè)鏡像,F(xiàn)ROM指令必須是整個(gè)Dockerfile的第一個(gè)指令,如果指定的鏡像不存在默認(rèn)會(huì)自動(dòng)從Docker Hub上下載。
COPY
語(yǔ)法:COPY
解釋:用法與ADD相同,不過(guò)不支持使用url,所以在使用docker build – < somefile時(shí)該指令不能使用。
CMD
語(yǔ)法:①CMD ["executable", "param1", "param2"] #將會(huì)調(diào)用exec執(zhí)行,首選方式
②CMD ["param1", "param2"] #當(dāng)使用ENTRYPOINT指令時(shí),為該指令傳遞默認(rèn)參數(shù)
③CMD [ | ] #將會(huì)調(diào)用/bin/sh -c執(zhí)行
解釋:CMD指令中指定的命令會(huì)在鏡像運(yùn)行時(shí)執(zhí)行,在Dockerfile中只能存在一個(gè),如果使用了多個(gè)CMD指令,則只有最后一個(gè)CMD指令有效。當(dāng)出現(xiàn)ENTRYPOINT指令時(shí),CMD中定義的內(nèi)容會(huì)作為ENTRYPOINT指令的默認(rèn)參數(shù),也就是說(shuō)可以使用CMD指令給ENTRYPOINT傳遞參數(shù)。
注意:RUN和CMD都是執(zhí)行命令,他們的差異在于RUN中定義的命令會(huì)在執(zhí)行docker build命令創(chuàng)建鏡像時(shí)執(zhí)行,而CMD中定義的命令會(huì)在執(zhí)行docker run命令運(yùn)行鏡像時(shí)執(zhí)行,另外使用第一種語(yǔ)法也就是調(diào)用exec執(zhí)行時(shí),命令必須為絕對(duì)路徑。
2、Base鏡像(基礎(chǔ)鏡像)
Centos:7鏡像的dockerfile
FROM scratch
ADD centos-7-x86_ _64-docker.tar.xz /
LABEL org. label-schema. schema-version="1.0" \|
org. label-schema. name="Centos Base Image" \
org. labe1-schema. vendor="centos" \
org. labe1-schema. 1icense="GPLV2" \
org. labe1-schema build-date="20190305 '
CMD ["/bin/bash"]
3、鏡像的分層
1)dockerfile的書寫格式為:Dockerfile(首字母大寫,包括文件名稱)
2)From:構(gòu)建鏡像有兩種方式,一種scratch(從零構(gòu)建),另一種可以基于某個(gè)鏡像開(kāi)始構(gòu)建
3)鏡像所運(yùn)行的操作(用戶所期望的)
[root@localhost ~]# mkdir test
//創(chuàng)建測(cè)試目錄
[root@localhost ~]# cd test
//進(jìn)入測(cè)試目錄
[root@localhost ~]#vim Dockerfile
//編寫Dockerfile
FROM centos:7
RUN yum -y install vim #或["yum","install","vim"]
RUN yum -y install net-tools
CMD ["/bin/bash"]
執(zhí)行一下
[root@localhost test]# docker build -t centos7-vim-net-tools:12-11 .
//使用當(dāng)前目錄的 Dockerfile 創(chuàng)建鏡像,標(biāo)簽為 centos7-vim-net-tools:12-11
build: 使用 Dockerfile 創(chuàng)建鏡像
-t:標(biāo)簽
. :當(dāng)前目錄
執(zhí)行的層次
4.Dockerfile鏡像分層總結(jié)
鏡像時(shí)容器的基石,容器是鏡像運(yùn)行后的實(shí)例。當(dāng)鏡像運(yùn)行為容器之后,對(duì)鏡像的所有數(shù)據(jù)僅有只讀權(quán)限,如果需要對(duì)鏡像源文件進(jìn)行修改或刪除操作,此時(shí)是在容器層(可寫層)進(jìn)行的,用到了COW(copy on write)寫時(shí)復(fù)制機(jī)制。
1.創(chuàng)建一個(gè)新的Dockerfile文件
[root@localhost ~]# vim Dockerfile
FROM centos:7
RUN yum -y install vim
RUN yum -y install net-tools
RUN yum -y install wget
CMD ["/bin/bash"]
[root@localhost ~]# docker build -t new-centos .
//使用當(dāng)前目錄的 Dockerfile 創(chuàng)建鏡像,名稱為new-centos
如果在相同的層,有用到相同的鏡像,可以不必再去下載,直接使用緩存。(如果第一層的不相同了,那么下面的相同也沒(méi)用了,需要重新下載)
3.再次創(chuàng)建一個(gè)新的Dockerfile
[root@localhost ~]# mkdir test1
[root@localhost ~]# cd test
[root@localhost test]# cd ../test1
[root@localhost test1]# vim Dockerfile
FROM centos:7
RUN yum -y install vim
RUN yum -y install wget
RUN yum -y install net-tools
CMD ["/bin/bash"]
[root@localhost test1]# docker build -t centos-new .
//使用當(dāng)前目錄的 Dockerfile 創(chuàng)建鏡像,名稱為centos-new
即使鏡像層里的操作一樣,也必須是在同一層才可以使用dockerfile的緩存特性
如果制作鏡像過(guò)程中,不想使用緩存,可以--no-cache選項(xiàng)