1、鏡像的生成途徑html
一、使用當前進程替換上一個進程 execmysql
二、生成方式nginx
三、dockerfile製做鏡像要求web
a、要有專有的工做目錄。sql
b、要有專門的製做文件,文件名首字母大寫docker
c、若是要打包不少不少文件到鏡像中,那麼這些文件只能放在當前工做目錄下,不能放在工做目錄上層,只能是子目錄,不能是父目錄。shell
d、.(這個有個小點)dockeringore 文件,若是一個目錄中有一百個文件,而後在dockerfile 聲明此目錄須要包含這個目錄,因而打包成鏡像時就將這個目錄包含進來了,而後在這個目錄下有三個文件不想包含進來,因而將這三個文件路徑寫在dockeringore文件中,那麼包括dockeringore自己和其中指定的文件都不會被打包進去。app
e、shell 中 echo ${NAME:-tom} 意思是echo 變量NAME,若變量存在則打印變量值,若變量不存在則打印tom值,可是這個值不會賦值給NAME,若想要賦值給NAME,則命令爲 echo ${NAME:=tom}curl
2、Dockerfile關鍵字tcp
一、FROM
二、maintanier(可選項,已經廢棄了,如今由label代替了)
三、copy
四、docker build
a、COPY文件
[root@localhost images1]# docker rmi b9faa659b2f0 Untagged: wohaoshuaihttpd:v0.1-1 Deleted: sha256:b9faa659b2f075f7972c0d240f337cd3e352230c71ec0a8fe3f71f4dd56f10e6 Deleted: sha256:b115441d58b0cfd85748a7c6e65774b38d611c2ba89e8566d12feb7fcd9be1d3 Deleted: sha256:fa8322f8adbf2c0608f682fd68d78dab800e86dcf6a7d7f872f636e190ce35a6 [root@localhost images1]# cat Dockerfile #Description: test image FROM busybox:latest MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" #LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" COPY index.html /data/web/html/ [root@localhost images1]# docker build -t wohaoshuaihttpd:v0.1-1 ./ Sending build context to Docker daemon 3.072kB Step 1/3 : FROM busybox:latest ---> af2f74c517aa Step 2/3 : MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" ---> Running in d30be42cbf5b Removing intermediate container d30be42cbf5b ---> f2af27ce81e5 Step 3/3 : COPY index.html /data/web/html/ ---> 087c55a4372d Successfully built 087c55a4372d Successfully tagged wohaoshuaihttpd:v0.1-1 [root@localhost images1]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE wohaoshuaihttpd v0.1-1 087c55a4372d About a minute ago 1.2MB busybox latest af2f74c517aa 2 weeks ago 1.2MB
[root@localhost images1]# docker run -it --name wohaoshuai1 --rm wohaoshuaihttpd:v0.1-1 /bin/cat /data/web/html/index.html <h1>busybox httpd server</h1>
b、COPY目錄
[root@localhost images1]# cat Dockerfile #Description: test image FROM busybox:latest MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" #LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" COPY index.html /data/web/html/ COPY yum.repos.d /etc/yum.repos.d/ [root@localhost images1]# ls yum.repos.d/ CentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo docker-ce.repo [root@localhost images1]# docker build -t wohaoshuaihttpd:v0.1-2 ./ Sending build context to Docker daemon 22.53kB Step 1/4 : FROM busybox:latest ---> af2f74c517aa Step 2/4 : MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" ---> Using cache ---> f2af27ce81e5 Step 3/4 : COPY index.html /data/web/html/ ---> Using cache ---> 087c55a4372d Step 4/4 : COPY yum.repos.d /etc/yum.repos.d/ ---> 8e63e3a6d63c Successfully built 8e63e3a6d63c Successfully tagged wohaoshuaihttpd:v0.1-2 [root@localhost images1]# docker run -it --name wohaoshuai1 --rm wohaoshuaihttpd:v0.1-2 /bin/ls /etc/yum.repos.d CentOS-Base.repo CentOS-Media.repo CentOS-fasttrack.repo CentOS-CR.repo CentOS-Sources.repo docker-ce.repo CentOS-Debuginfo.repo CentOS-Vault.repo
五、ADD
a、經過鏈接下載壓縮包至鏡像中的目錄時只會將壓縮包放在目標路徑下
[root@localhost images1]# cat Dockerfile #Description: test image FROM busybox:latest MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" #LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" COPY index.html /data/web/html/ COPY yum.repos.d /etc/yum.repos.d/ ADD http://nginx.org/download/nginx-1.15.12.tar.gz /usr/local/src/ [root@localhost images1]# docker build -t wohaoshuaihttpd:v0.1-3 ./ Sending build context to Docker daemon 24.06kB Step 1/5 : FROM busybox:latest ---> af2f74c517aa Step 2/5 : MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" ---> Using cache ---> f2af27ce81e5 Step 3/5 : COPY index.html /data/web/html/ ---> Using cache ---> 087c55a4372d Step 4/5 : COPY yum.repos.d /etc/yum.repos.d/ ---> Using cache ---> 5ed5523bedf5 Step 5/5 : ADD http://nginx.org/download/nginx-1.15.12.tar.gz /usr/local/src/ Downloading [==================================================>] 1.032MB/1.032MB ---> 9321e473e9fd Successfully built 9321e473e9fd Successfully tagged wohaoshuaihttpd:v0.1-3 [root@localhost images1]# docker run -it --name wohaoshuai1 --rm wohaoshuaihttpd:v0.1-3 /bin/ls /usr/local/src/ nginx-1.15.12.tar.gz
b、將本地壓縮包添加至鏡像中的路徑時壓縮包會自動解壓
[root@localhost images1]# cat Dockerfile #Description: test image FROM busybox:latest MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" #LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" COPY index.html /data/web/html/ COPY yum.repos.d /etc/yum.repos.d/ #ADD http://nginx.org/download/nginx-1.15.12.tar.gz /usr/local/src/ ADD nginx-1.15.12.tar.gz /usr/local/src/ [root@localhost images1]# docker build -t wohaoshuaihttpd:v0.1-4 ./ Sending build context to Docker daemon 1.057MB Step 1/5 : FROM busybox:latest ---> af2f74c517aa Step 2/5 : MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" ---> Using cache ---> f2af27ce81e5 Step 3/5 : COPY index.html /data/web/html/ ---> Using cache ---> 087c55a4372d Step 4/5 : COPY yum.repos.d /etc/yum.repos.d/ ---> Using cache ---> 5ed5523bedf5 Step 5/5 : ADD nginx-1.15.12.tar.gz /usr/local/src/ ---> d2c9f10561d8 Successfully built d2c9f10561d8 Successfully tagged wohaoshuaihttpd:v0.1-4 [root@localhost images1]# docker run -it --name wohaoshuai1 --rm wohaoshuaihttpd:v0.1-4 /bin/ls /usr/local/src/ nginx-1.15.12 [root@localhost images1]# docker run -it --name wohaoshuai1 --rm wohaoshuaihttpd:v0.1-4 /bin/ls /usr/local/src/nginx-1.15.12 CHANGES LICENSE auto configure html src CHANGES.ru README conf contrib man
六、WORKDIR
[root@localhost images1]# cat Dockerfile #Description: test image FROM busybox:latest MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" #LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" COPY index.html /data/web/html/ COPY yum.repos.d /etc/yum.repos.d/ #ADD http://nginx.org/download/nginx-1.15.12.tar.gz /usr/local/src/ WORKDIR /usr/local/ ADD nginx-1.15.12.tar.gz ./src
七、VOLUME(以此鏡像啓動的容器會自動掛載卷至聲明的路徑中)
[root@localhost images1]# cat Dockerfile #Description: test image FROM busybox:latest MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" #LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" COPY index.html /data/web/html/ COPY yum.repos.d /etc/yum.repos.d/ #ADD http://nginx.org/download/nginx-1.15.12.tar.gz /usr/local/src/ WORKDIR /usr/local/ ADD nginx-1.15.12.tar.gz ./src VOLUME /data/mysql/ [root@localhost images1]# docker build -t wohaoshuaihttpd:v0.1-5 ./ Sending build context to Docker daemon 1.057MB Step 1/7 : FROM busybox:latest ---> af2f74c517aa Step 2/7 : MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" ---> Using cache ---> f2af27ce81e5 Step 3/7 : COPY index.html /data/web/html/ ---> Using cache ---> 087c55a4372d Step 4/7 : COPY yum.repos.d /etc/yum.repos.d/ ---> Using cache ---> 5ed5523bedf5 Step 5/7 : WORKDIR /usr/local/ ---> Running in 5a4e26a6f3d2 Removing intermediate container 5a4e26a6f3d2 ---> d947722654f3 Step 6/7 : ADD nginx-1.15.12.tar.gz ./src ---> 4c2b8cd7c923 Step 7/7 : VOLUME /data/mysql/ ---> Running in aa6bd3d6c6ef Removing intermediate container aa6bd3d6c6ef ---> 10f65aedcb7f Successfully built 10f65aedcb7f Successfully tagged wohaoshuaihttpd:v0.1-5 [root@localhost images1]# docker run -it --name wohaoshuai1 --rm wohaoshuaihttpd:v0.1-5 /bin/ls /usr/local/src nginx-1.15.12 [root@localhost images1]# docker run -it --name wohaoshuai1 --rm wohaoshuaihttpd:v0.1-5 sleep 60 [root@localhost application]# docker inspect -f {{.Mounts}} wohaoshuai1 [{volume 41bb5a4cb251996e85259490f34c13039a4a60c31a019e1da6b5a059ada6477c /var/lib/docker/volumes/41bb5a4cb251996e85259490f34c13039a4a60c31a019e1da6b5a059ada6477c/_data /data/mysql local t rue }]
八、EXPOSE
[root@localhost images1]# cat Dockerfile #Description: test image FROM busybox:latest MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" #LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" COPY index.html /data/web/html/ COPY yum.repos.d /etc/yum.repos.d/ #ADD http://nginx.org/download/nginx-1.15.12.tar.gz /usr/local/src/ WORKDIR /usr/local/ ADD nginx-1.15.12.tar.gz ./src VOLUME /data/mysql/ EXPOSE 80 [root@localhost images1]# docker build -t wohaoshuaihttpd:v0.1-6 ./ Sending build context to Docker daemon 1.057MB Step 1/8 : FROM busybox:latest ---> af2f74c517aa Step 2/8 : MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" ---> Using cache ---> f2af27ce81e5 Step 3/8 : COPY index.html /data/web/html/ ---> Using cache ---> 087c55a4372d Step 4/8 : COPY yum.repos.d /etc/yum.repos.d/ ---> Using cache ---> 5ed5523bedf5 Step 5/8 : WORKDIR /usr/local/ ---> Using cache ---> d947722654f3 Step 6/8 : ADD nginx-1.15.12.tar.gz ./src ---> Using cache ---> 4c2b8cd7c923 Step 7/8 : VOLUME /data/mysql/ ---> Using cache ---> 10f65aedcb7f Step 8/8 : EXPOSE 80 ---> Running in a644ef9ea077 Removing intermediate container a644ef9ea077 ---> 069cdf4d8de8 Successfully built 069cdf4d8de8 Successfully tagged wohaoshuaihttpd:v0.1-6 [root@localhost images1]# docker run -it --name wohaoshuai1 --rm wohaoshuaihttpd:v0.1-6 /bin/httpd -f(前臺運行) -h /data/web/html [root@localhost application]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eaab4307ee93 wohaoshuaihttpd:v0.1-6 "/bin/httpd -f -h /d…" 3 minutes ago Up 3 minutes 80/tcp wohaoshuai1 [root@localhost application]# curl 172.17.0.2 <h1>busybox httpd server</h1> [root@localhost application]# docker port wohaoshuai1 [root@localhost application]# (發現未將端口映射至宿主機)
在啓動時加上-P選項,將鏡像中全部申明的端口都映射至宿主機
[root@localhost images1]# docker run -it --name wohaoshuai1 -P --rm wohaoshuaihttpd:v0.1-6 /bin/httpd -f -h /data/web/html [root@localhost application]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6531f428273d wohaoshuaihttpd:v0.1-6 "/bin/httpd -f -h /d…" 4 seconds ago Up 3 seconds 0.0.0.0:32768->80/tcp wohaoshuai1 [root@localhost application]# docker port wohaoshuai1 80/tcp -> 0.0.0.0:32768
鏡像中聲明的暴露端口是指默認暴露端口,也能夠啓動鏡像的時候手動加上-p選項指定暴露的端口
九、ENV
a、在Dockerfile中定義環境變量
[root@localhost images1]# cat Dockerfile #Description: test image FROM busybox:latest MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" #LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" ENV DOC_ROOT=/data/web/html/ \ WEB_SERVER_PACKAGE="nginx-1.15.12" #若變量爲空則將返回/data/web/html/,但不會講該值賦值給此變量 COPY index.html ${DOC_ROOT:-/data/web/html/} COPY yum.repos.d /etc/yum.repos.d/ #ADD http://nginx.org/download/nginx-1.15.12.tar.gz /usr/local/src/ WORKDIR /usr/local/ ADD ${WEB_SERVER_PACKAGE}.tar.gz ./src VOLUME /data/mysql/ EXPOSE 80 [root@localhost images1]# docker build -t wohaoshuaihttpd:v0.1-7 ./ Sending build context to Docker daemon 1.058MB Step 1/9 : FROM busybox:latest ---> af2f74c517aa Step 2/9 : MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" ---> Using cache ---> f2af27ce81e5 Step 3/9 : ENV DOC_ROOT=/data/web/html/ WEB_SERVER_PACKAGE="nginx-1.15.12" ---> Running in 2f63c2a97feb Removing intermediate container 2f63c2a97feb ---> 5e878ad397d3 Step 4/9 : COPY index.html ${DOC_ROOT:-/data/web/html/} ---> c8ccb0db2c85 Step 5/9 : COPY yum.repos.d /etc/yum.repos.d/ ---> b4e3ba7698c0 Step 6/9 : WORKDIR /usr/local/ ---> Running in f37c3a5f7b6b Removing intermediate container f37c3a5f7b6b ---> 4185f0e9b005 Step 7/9 : ADD ${WEB_SERVER_PACKAGE}.tar.gz ./src ---> b9e5dc8aefd4 Step 8/9 : VOLUME /data/mysql/ ---> Running in 7e74c121a4ae Removing intermediate container 7e74c121a4ae ---> 91f4d73fe90f Step 9/9 : EXPOSE 80 ---> Running in 322864c64e00 Removing intermediate container 322864c64e00 ---> 3729cc7464e2 Successfully built 3729cc7464e2 Successfully tagged wohaoshuaihttpd:v0.1-7 [root@localhost images1]# docker run -it --name wohaoshuai1 -P --rm wohaoshuaihttpd:v0.1-7 /bin/ls /usr/local/src nginx-1.15.12 [root@localhost images1]# docker exec -it wohaoshuai1 /bin/sh /usr/local # echo ${WEB_SERVER_PACKAGE} && echo ${DOC_ROOT} nginx-1.15.12 /data/web/html/
[root@localhost images1]# docker run -it --name wohaoshuai1 -P --rm wohaoshuaihttpd:v0.1-7 printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=474614eded73
TERM=xterm
DOC_ROOT=/data/web/html/
WEB_SERVER_PACKAGE=nginx-1.15.12
HOME=/root
b、啓動容器的時候賦予環境變量
[root@localhost images1]# docker run -it --name wohaoshuai1 -P -e WEB_SERVER_PACKAGE="nginx-1.15.13" -e NAME="wohaoshuai" --rm wohaoshuaihttpd:v0.1-7 printenv PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=2be6a82f0adb TERM=xterm WEB_SERVER_PACKAGE=nginx-1.15.13 NAME=wohaoshuai DOC_ROOT=/data/web/html/ HOME=/root
十、RUN :至關於在鏡像中執行相應命令
[root@localhost images1]# cat Dockerfile #Description: test image FROM busybox:latest MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" #LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" ENV DOC_ROOT=/data/web/html/ \ WEB_SERVER_PACKAGE="nginx-1.15.12.tar.gz" #若變量爲空則將返回/data/web/html/,但不會講該值賦值給此變量 COPY index.html ${DOC_ROOT:-/data/web/html/} COPY yum.repos.d /etc/yum.repos.d/ ADD http://nginx.org/download/${WEB_SERVER_PACKAGE} /usr/local/src/ WORKDIR /usr/local/ #ADD ${WEB_SERVER_PACKAGE}.tar.gz ./src VOLUME /data/mysql/ EXPOSE 80 RUN cd /usr/local/src && \ tar -xf ${WEB_SERVER_PACKAGE} [root@localhost images1]# docker build -t wohaoshuaihttpd:v0.1-9 ./ Sending build context to Docker daemon 1.058MB Step 1/10 : FROM busybox:latest ---> af2f74c517aa Step 2/10 : MAINTAINER "wohaoshuai <wohaoshuai@qq.com>" ---> Using cache ---> f2af27ce81e5 Step 3/10 : ENV DOC_ROOT=/data/web/html/ WEB_SERVER_PACKAGE="nginx-1.15.12.tar.gz" ---> Running in 130868ae462c Removing intermediate container 130868ae462c ---> 7ee3bd028dcb Step 4/10 : COPY index.html ${DOC_ROOT:-/data/web/html/} ---> 1b50d9f7b618 Step 5/10 : COPY yum.repos.d /etc/yum.repos.d/ ---> 812d86e6606a Step 6/10 : ADD http://nginx.org/download/${WEB_SERVER_PACKAGE} /usr/local/src/ Downloading [==================================================>] 1.032MB/1.032MB ---> 89c9d4323fbe Step 7/10 : WORKDIR /usr/local/ ---> Running in a92d220baaac Removing intermediate container a92d220baaac ---> dc11e4e9003c Step 8/10 : VOLUME /data/mysql/ ---> Running in d998a6698c6f Removing intermediate container d998a6698c6f ---> 4d41ad3eae50 Step 9/10 : EXPOSE 80 ---> Running in bfe9d0fe42b0 Removing intermediate container bfe9d0fe42b0 ---> 8177bf9c1201 Step 10/10 : RUN cd /usr/local/src && tar -xf ${WEB_SERVER_PACKAGE} ---> Running in 6635339f9b2c Removing intermediate container 6635339f9b2c ---> c7f2dc787705 Successfully built c7f2dc787705 Successfully tagged wohaoshuaihttpd:v0.1-9 [root@localhost images1]# docker run -it --name wohaoshuai1 -P --rm wohaoshuaihttpd:v0.1-9 ls /usr/local/src nginx-1.15.12 nginx-1.15.12.tar.gz
十一、CMD 定義一個鏡像文件要啓動爲容器時默認要運行的程序或命令,能夠給多個,可是隻有最後一個會生效
a、第一種方式啓動後容器中的PID不爲1,沒法接收unix信號,是由內核直接建立,所以沒法使用docker stop 命令中止
[root@localhost images2]# cat Dockerfile FROM busybox LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" app="httpd" ENV WEB_DOC_ROOT="/data/web/html" RUN mkdir -p ${WEB_DOC_ROOT} && \ echo "<h1>Busybox httpd server.</h1>" > ${WEB_DOC_ROOT}/index.html CMD /bin/httpd -f -h ${WEB_DOC_ROOT} [root@localhost images2]# docker build -t wohaoshuaihttpd:v0.2-1 ./ Sending build context to Docker daemon 2.048kB Step 1/5 : FROM busybox ---> af2f74c517aa Step 2/5 : LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" app="httpd" ---> Using cache ---> 7ea5abaaf52f Step 3/5 : ENV WEB_DOC_ROOT="/data/web/html" ---> Using cache ---> 2ab8b976c922 Step 4/5 : RUN mkdir -p ${WEB_DOC_ROOT} && echo "<h1>Busybox httpd server.</h1>" > ${WEB_DOC_ROOT}/index.html ---> Running in 3abfe017a227 Removing intermediate container 3abfe017a227 ---> ad6a65debbf4 Step 5/5 : CMD /bin/httpd -f -h ${WEB_DOC_ROOT} ---> Running in 9813c1737aa2 Removing intermediate container 9813c1737aa2 ---> bf9029cac03e Successfully built bf9029cac03e Successfully tagged wohaoshuaihttpd:v0.2-1 [root@localhost images2]# docker inspect -f {{.Config.Cmd}} wohaoshuaihttpd:v0.2-1 [/bin/sh -c /bin/httpd -f -h ${WEB_DOC_ROOT}]
[root@localhost images2]# docker run --name wohaoshuai2 -it --rm -P wohaoshuaihttpd:v0.2-1 #此時會卡在這兒,由於httpd並無交互式接口,可是此時能夠經過docker exec 命令登錄
[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e4846ba4e7c7 wohaoshuaihttpd:v0.2-1 "/bin/sh -c '/bin/ht…" 12 seconds ago Up 11 seconds wohaoshuai2 [root@localhost ~]# docker exec -it wohaoshuai2 /bin/sh / # ps #此時能夠看到httpd默認的pid爲1,默認用/bin/httpd -f -h /data/web/html啓動時爲了不它不是1作替換操做,默認就執行了exec的替換,因此看上去咱們啓動的httpd 進程依然是爲1是爲了確保容器能自動接收unix信號以便於執行docker stop命令時能停掉,但在上面的
截圖中確實是驗證了是啓動爲/bin/sh 的子進程的,而且也驗證了鏡像啓動之後默認的運行命令被咱們改掉了,並且shell解析環境變量也成功了。
PID USER TIME COMMAND 1 root 0:00 /bin/httpd -f -h /data/web/html 6 root 0:00 /bin/sh 11 root 0:00 ps / #
b、若是命令中有空格則使用第二種語法格式
[root@localhost images2]# cat Dockerfile FROM busybox LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" app="httpd" ENV WEB_DOC_ROOT="/data/web/html" RUN mkdir -p ${WEB_DOC_ROOT} && \ echo "<h1>Busybox httpd server.</h1>" > ${WEB_DOC_ROOT}/index.html #CMD /bin/httpd -f -h ${WEB_DOC_ROOT} CMD ["/bin/httpd","-f","-h ${WEB_DOC_ROOT}"] [root@localhost images2]# docker build -t wohaoshuaihttpd:v0.2-2 ./ Sending build context to Docker daemon 2.048kB Step 1/5 : FROM busybox ---> af2f74c517aa Step 2/5 : LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" app="httpd" ---> Using cache ---> 7ea5abaaf52f Step 3/5 : ENV WEB_DOC_ROOT="/data/web/html" ---> Using cache ---> 2ab8b976c922 Step 4/5 : RUN mkdir -p ${WEB_DOC_ROOT} && echo "<h1>Busybox httpd server.</h1>" > ${WEB_DOC_ROOT}/index.html ---> Using cache ---> ad6a65debbf4 Step 5/5 : CMD ["/bin/httpd","-f","-h ${WEB_DOC_ROOT}"] ---> Running in 02b4bdd57f3d Removing intermediate container 02b4bdd57f3d ---> d7bec572fdee Successfully built d7bec572fdee Successfully tagged wohaoshuaihttpd:v0.2-2
[root@localhost images2]# docker inspect -f {{.Config.Cmd}} wohaoshuaihttpd:v0.2-2 [/bin/httpd -f -h ${WEB_DOC_ROOT}]
基於製做的鏡像啓動容器
[root@localhost images2]# docker run --name wohaoshuai2 -it --rm -P wohaoshuaihttpd:v0.2-2 #會報錯,由於默認不是經過shell子進程啓動,所以沒法識別相應的變量,因此會找不到相應的文件或文件夾 httpd: can't change directory to ' ${WEB_DOC_ROOT}': No such file or directory
將CMD 中內容改成 CMD ["/bin/sh","-c","/bin/httpd -f -h ${WEB_DOC_ROOT}"] #注意不能將 -c 後的其它參數也寫成字符串,不然會沒法啓動
[root@localhost images2]# more Dockerfile FROM busybox LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" app="httpd" ENV WEB_DOC_ROOT="/data/web/html" RUN mkdir -p ${WEB_DOC_ROOT} && \ echo "<h1>Busybox httpd server.</h1>" > ${WEB_DOC_ROOT}/index.html #CMD /bin/httpd -f -h ${WEB_DOC_ROOT} CMD ["/bin/sh","-c","/bin/httpd -f -h ${WEB_DOC_ROOT}"] [root@localhost images2]# docker build -t wohaoshuaihttpd:v0.2-3 ./ Sending build context to Docker daemon 2.048kB Step 1/5 : FROM busybox ---> af2f74c517aa Step 2/5 : LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" app="httpd" ---> Using cache ---> b94158ebd25b Step 3/5 : ENV WEB_DOC_ROOT="/data/web/html" ---> Using cache ---> 128dc125c148 Step 4/5 : RUN mkdir -p ${WEB_DOC_ROOT} && echo "<h1>Busybox httpd server.</h1>" > ${WEB_DOC_ROOT}/index.html ---> Using cache ---> 79e6d697305f Step 5/5 : CMD ["/bin/sh","-c","/bin/httpd -f -h ${WEB_DOC_ROOT}"] ---> Running in ad80d6ab8dd9 Removing intermediate container ad80d6ab8dd9 ---> 745d9aa5c776 Successfully built 745d9aa5c776 Successfully tagged wohaoshuaihttpd:v0.2-3 [root@localhost images2]# docker run -it --rm -P --name wohaoshuai1 wohaoshuaihttpd:v0.2-3 [root@localhost ~]# docker exec -it wohaoshuai1 /bin/sh / # ls bin data dev etc home proc root sys tmp usr var / # ps PID USER TIME COMMAND 1 root 0:00 /bin/httpd -f -h /data/web/html 13 root 0:00 /bin/sh 20 root 0:00 ps / # netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 :::80 :::* LISTEN