云計算
Docker中制作鏡像一共有兩個方法:
1. 基于容器制作鏡像:
2. 基于Dockerfile制作鏡像;
docker build …
Dockerfile的制作步驟:
1.創(chuàng)建一個目錄;
2.在目錄中創(chuàng)建一個首字母大寫的文件,供docker build識別;
3.因為Dockerfile的執(zhí)行環(huán)境在創(chuàng)建的目錄中,所以可以創(chuàng)建相對應的文件,供dockerfile使用;
ex:
[root@master~]#lsdocimage Dockerfileindex.html [root@master~]#catdocimage/Dockerfile FROMbusybox:latest LABELmaintainer="hevttc" ENVDOC_ROOT="/tmp/"\\ VOLUME_ROOT="/data/mydata"\\ ARGU="/usr/sbin/" COPYindex.html/tmp/ VOLUME${VOLUME_ROOT} RUNifconfig-a&&\\ cat${DOC_ROOT}index.html
Dockerfile書寫格式:
Dockerfile Format
“#”開頭的行是注釋行(可以多行,任意位置);
INSTRUCTION arguments
Docker是順序執(zhí)行Dockerfile中的內(nèi)容,注意書寫順序;
Dockerfile中幾個重要的指令:
1.FROM (指定基準鏡像)
2.LABEL(寫入當前Dockerfile的制作者信息);
3.COPY(將宿主機的文件拷貝至鏡像中);
4.ADD(類似于COPY指令,支持TAR文件和URL路徑);
5.WORKDIR(用于為Dockerfile中所有的RUN, CMD, ENTRYPOINT, COPY和ADD指定設定工作目錄;);
6.VOLUME(用于在image中創(chuàng)建一個掛載點目錄,可以用于在Docker Host上掛載卷);
個人并不建議使用:這是Docker daemon創(chuàng)建托管卷,并不是綁定掛載;
7.EXPOSE(為容器打開要監(jiān)聽的端口,實現(xiàn)與外部的通信);
EXPOSE
8.ENV(為鏡像定義環(huán)境變量,可以被其他指令調(diào)用,build_time和run_time都可被使用);
調(diào)用格式:
$variable_name或${variable_name}
9.ARG (在創(chuàng)建鏡像是build_time使用的變量,一般用ARG寫版本號和作者);
10.RUN(用于指定Docker build過程中運行的程序);
11.CMD(類似于RUN命令,在run_time執(zhí)行);
12.ENTRYPOINT(類似于CMD指令)
[root@master~]#catdocimage1/entrypoint.sh #!/bin/sh exec$@ [root@master~]#catdocimage1/Dockerfile FROMnginx:1.14-alpine COPYentrypoint.sh/bin/ CMD["/usr/local/nginx","-g","daemonoff;"] ENTRYPOINT["/bin/entrypoint.sh"] [root@master~]#lldocimage1/ 總用量8 -rw-r--r--1rootroot12911月120:42Dockerfile -rwxr-xr-x1rootroot1911月120:16entrypoint.sh
命令執(zhí)行圖
創(chuàng)建一個Dockerfile;
[root@www~]#mkdirdocimage [root@www~]#vimdocimage/Dockerfile [root@www~]# [root@www~]#vimdocimage/test.txt [root@www~]#catdocimage/Dockerfile FROMnginx:1.14-alpine LABELmaintainer="liujingyu" ENVDOC_ROOT="/tmp"\\ VOLUME_ROOT=/data/mydata COPYtest.txt${DOC_ROOT} VOLUME${VOLUME_ROOT} RUNecho123>${DOC_ROOT}/test.txt CMDcat${DOC_ROOT}/test.txt [root@www~]# [root@www~]#catdocimage/test.txt THISisDockerTEST;
用Dockerfile創(chuàng)建鏡像:
[root@www~]#dockerbuilddocimage/-tljymyy/nginx:v0.2 SendingbuildcontexttoDockerdaemon3.072kB Step1/7:FROMnginx:1.14-alpine --->77bae8d00654 Step2/7:LABELmaintainer="liujingyu" --->Usingcache --->a012ac4c6f51 Step3/7:ENVDOC_ROOT="/tmp"VOLUME_ROOT=/data/mydata --->Usingcache --->ee6ed363bfde Step4/7:COPYtest.txt${DOC_ROOT} --->Usingcache --->a416671fde2a Step5/7:VOLUME${VOLUME_ROOT} --->Usingcache --->84bf38b22301 Step6/7:RUNecho123>${DOC_ROOT}/test.txt --->Usingcache --->756cd9857096 Step7/7:CMDcat${DOC_ROOT}/test.txt --->Runningina2f99fcc5fba Removingintermediatecontainera2f99fcc5fba --->dac468a636e0 Successfullybuiltdac468a636e0 Successfullytaggedljymyy/nginx:v0.2 [root@www~]#dockerimagels REPOSITORYTAGIMAGEIDCREATEDSIZE ljymyy/nginxv0.2dac468a636e02minutesago17.7MB
運行此鏡像:
[root@www~]#dockercontainerrun--rm--namengx1ljymyy/nginx:v0.2 123