Docker 学习8 Dockerfile详解2
一、继续上章节Docker学习7 CMD命令后。
11、ENTRYPOINT
a、容器启动后相当于会启动ENTRYPOINT + CMD 命令,CMD相当于参数传给entrypoint的
[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/sh","-c","/bin/httpd -f -h ${WEB_DOC_ROOT}"]
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}
[root@localhost images2]# docker build -t wohaoshuaihttpd:v0.2-5 ./
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 : ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}
---> Running in 322af685179f
Removing intermediate container 322af685179f
---> 26837ef4211b
Successfully built 26837ef4211b
Successfully tagged wohaoshuaihttpd:v0.2-5
[root@localhost images2]# docker run -it --rm -P --name wohaoshuai1 wohaoshuaihttpd:v0.2-5 ls /data/web/html
[root@localhost images2]# docker inspect -f {{.Args}} wohaoshuai1 #此时可以看到我们覆盖的CMD命令自动追加到了ENTRYPOINT提供的命令后面,相当于容器一启动的时候就会启动 ENTRYPOINT + CMD命令
[-c /bin/httpd -f -h ${WEB_DOC_ROOT} ls /data/web/html]
b、ENTRYPOINT + CMD组合
[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}"] ENTRYPOINT ["/bin/sh","-c"] [root@localhost images2]# docker build -t wohaoshuaihttpd:v0.2-7 ./ Sending build context to Docker daemon 2.048kB Step 1/6 : FROM busybox ---> af2f74c517aa Step 2/6 : LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" app="httpd" ---> Using cache ---> b94158ebd25b Step 3/6 : ENV WEB_DOC_ROOT="/data/web/html" ---> Using cache ---> 128dc125c148 Step 4/6 : RUN mkdir -p ${WEB_DOC_ROOT} && echo "<h1>Busybox httpd server.</h1>" > ${WEB_DOC_ROOT}/index.html ---> Using cache ---> 79e6d697305f Step 5/6 : CMD ["/bin/httpd -f -h ${WEB_DOC_ROOT}"] ---> Running in 633c17c96e88 Removing intermediate container 633c17c96e88 ---> 997c922b10f0 Step 6/6 : ENTRYPOINT ["/bin/sh","-c"] ---> Running in 3838dded3dfe Removing intermediate container 3838dded3dfe ---> 9df599309f9a Successfully built 9df599309f9a Successfully tagged wohaoshuaihttpd:v0.2-7 [root@localhost images2]# docker run -it --rm -P --name wohaoshuai1 wohaoshuaihttpd:v0.2-7 [root@localhost ~]# docker inspect -f {{.Config.Cmd}} wohaoshuai1 [/bin/httpd -f -h ${WEB_DOC_ROOT}] [root@localhost ~]# docker inspect -f {{.Config.Entrypoint}} wohaoshuai1 [/bin/sh -c]
[root@localhost images2]# docker run -it --rm -P --name wohaoshuai1 wohaoshuaihttpd:v0.2-7 ls /data
bin data dev etc home proc root sys tmp usr var
[root@localhost images2]#
c、启动nginx案例
[root@localhost images3]# cat Dockerfile
FROM nginx:1.14-alpine
LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>"
ENV NGX_DOC_ROOT="/data/web/html/"
ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/
CMD ["/usr/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]
[root@localhost images3]#
[root@localhost images3]#
[root@localhost images3]# cat entrypoint.sh
#!/bin/sh
#
cat > /etc/nginx/conf.d/www.conf <<EOF
server {
server_name $HOSTNAME;
listen ${IP:-0.0.0.0}:${PORT:-80};
root ${NGX_DOC_ROOT:-/usr/share/nginx/html};
}
EOF
#执行所有参数
exec "$@"
[root@localhost images3]# docker build -t wohaoshuaihttpd:v0.3-6 ./
Sending build context to Docker daemon 4.096kB
Step 1/7 : FROM nginx:1.14-alpine
---> 8a2fb25a19f5
Step 2/7 : LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>"
---> Using cache
---> d073a723c02f
Step 3/7 : ENV NGX_DOC_ROOT="/data/web/html/"
---> Using cache
---> e1f5eb1ad38b
Step 4/7 : ADD index.html ${NGX_DOC_ROOT}
---> e070ca432d81
Step 5/7 : ADD entrypoint.sh /bin/
---> f45f6cba97b6
Step 6/7 : CMD ["/usr/sbin/nginx","-g","daemon off;"]
---> Running in c4e622170dc8
Removing intermediate container c4e622170dc8
---> 0bfde2a829f4
Step 7/7 : ENTRYPOINT ["/bin/entrypoint.sh"]
---> Running in bb3787180bc6
Removing intermediate container bb3787180bc6
---> 0ae588a1c9ff
Successfully built 0ae588a1c9ff
Successfully tagged wohaoshuaihttpd:v0.3-6
[root@localhost images3]# docker run --name wohaoshuai1 --rm -P wohaoshuaihttpd:v0.3-6
172.17.0.1 - - [22/Apr/2019:08:53:10 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
172.17.0.2 - - [22/Apr/2019:09:03:48 +0000] "GET / HTTP/1.1" 200 32 "-" "Wget" "-"
[root@localhost ~]# docker exec -it wohaoshuai1 /bin/sh
/ # cat /etc/nginx/conf.d/
default.conf www.conf
/ # cat /etc/nginx/conf.d/www.conf
server {
server_name 9243f356a5b7;
listen 0.0.0.0:80;
root /data/web/html/;
}
/ # wget -O - -q 9243f356a5b7
<h1>NEW DOC ROOT for NGINX</h1>
/ # ps
PID USER TIME COMMAND
1 root 0:00 nginx: master process /usr/sbin/nginx -g daemon off; #因为脚本中使用了exec 因此确保了主进程ID号为 1
9 nginx 0:00 nginx: worker process
18 root 0:00 /bin/sh
24 root 0:00 ps
12、USER
13、HEALTHCHECK
a、如图,每隔5分钟检测一次,超时时间为3秒,使用命令 curl ,如果失败则状态1退出。
[root@localhost images3]# cat Dockerfile
FROM nginx:1.14-alpine
LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>"
ENV NGX_DOC_ROOT="/data/web/html/"
ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/
EXPOSE 80/tcp
#3s后再做检测
HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/
CMD ["/usr/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]
[root@localhost images3]# docker build -t wohaoshuaihttpd:v0.3-7 ./
Sending build context to Docker daemon 4.096kB
Step 1/9 : FROM nginx:1.14-alpine
---> 8a2fb25a19f5
Step 2/9 : LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>"
---> Using cache
---> d073a723c02f
Step 3/9 : ENV NGX_DOC_ROOT="/data/web/html/"
---> Using cache
---> e1f5eb1ad38b
Step 4/9 : ADD index.html ${NGX_DOC_ROOT}
---> Using cache
---> e070ca432d81
Step 5/9 : ADD entrypoint.sh /bin/
---> Using cache
---> f45f6cba97b6
Step 6/9 : EXPOSE 80/tcp
---> Running in b9bf91ef24fa
Removing intermediate container b9bf91ef24fa
---> fdea2cc4ac14
Step 7/9 : HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/
---> Running in 68abb31eacf2
Removing intermediate container 68abb31eacf2
---> a5d76a9959fa
Step 8/9 : CMD ["/usr/sbin/nginx","-g","daemon off;"]
---> Running in 7085a3cb2ebf
Removing intermediate container 7085a3cb2ebf
---> 3932fc91e4bf
Step 9/9 : ENTRYPOINT ["/bin/entrypoint.sh"]
---> Running in 55a5f50907fc
Removing intermediate container 55a5f50907fc
---> dfe7de99a64d
Successfully built dfe7de99a64d
Successfully tagged wohaoshuaihttpd:v0.3-7
[root@localhost images3]# docker run --name wohaoshuai1 --rm -P -e "PORT=8080" wohaoshuaihttpd:v0.3-7
127.0.0.1 - - [24/Apr/2019:02:07:28 +0000] "GET / HTTP/1.1" 200 32 "-" "Wget" "-"
127.0.0.1 - - [24/Apr/2019:02:07:59 +0000] "GET / HTTP/1.1" 200 32 "-" "Wget" "-"
127.0.0.1 - - [24/Apr/2019:02:08:29 +0000] "GET / HTTP/1.1" 200 32 "-" "Wget" "-"
127.0.0.1 - - [24/Apr/2019:02:08:59 +0000] "GET / HTTP/1.1" 200 32 "-" "Wget" "-"
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b6d0ddff14 wohaoshuaihttpd:v0.3-7 "/bin/entrypoint.sh …" About a minute ago Up About a minute (healthy) 0.0.0.0:32790->80/tcp wohaoshuai1
14、SHELL
15、STOPSIGNAL 修改指令信号
16、ARG
[root@localhost images3]# cat Dockerfile
FROM nginx:1.14-alpine
ARG author="wohaoshuai <wohaoshuai@qq.com>"
LABEL maintainer="${author}"
ENV NGX_DOC_ROOT="/data/web/html/"
ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/
EXPOSE 80/tcp
#3s后再做检测
HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:10080/
CMD ["/usr/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]
[root@localhost images3]# docker build -t wohaoshuaihttpd:v0.3-9 ./
Sending build context to Docker daemon 4.096kB
Step 1/10 : FROM nginx:1.14-alpine
---> 8a2fb25a19f5
Step 2/10 : ARG author="wohaoshuai <wohaoshuai@qq.com>"
---> Running in d51a611199ab
Removing intermediate container d51a611199ab
---> f682ee70b312
Step 3/10 : LABEL maintainer="${author}"
---> Running in 461d279b754d
Removing intermediate container 461d279b754d
---> ca0c78ef37ae
Step 4/10 : ENV NGX_DOC_ROOT="/data/web/html/"
---> Running in ceb69b94032a
Removing intermediate container ceb69b94032a
---> f7e500f33f56
Step 5/10 : ADD index.html ${NGX_DOC_ROOT}
---> 52e9500d83ba
Step 6/10 : ADD entrypoint.sh /bin/
---> cd773aca3f27
Step 7/10 : EXPOSE 80/tcp
---> Running in 396a1631a659
Removing intermediate container 396a1631a659
---> 064b4c952023
Step 8/10 : HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:10080/
---> Running in c2f2b809f64b
Removing intermediate container c2f2b809f64b
---> e9b24a5f543d
Step 9/10 : CMD ["/usr/sbin/nginx","-g","daemon off;"]
---> Running in 7f848401bdd3
Removing intermediate container 7f848401bdd3
---> 1b2caf95eddc
Step 10/10 : ENTRYPOINT ["/bin/entrypoint.sh"]
---> Running in 14b2ef23a35f
Removing intermediate container 14b2ef23a35f
---> 65fe43f7d081
Successfully built 65fe43f7d081
Successfully tagged wohaoshuaihttpd:v0.3-9
[root@localhost ~]# docker inspect -f {{.Config.Labels}} wohaoshuaihttpd:v0.3-9
map[maintainer:wohaoshuai <wohaoshuai@qq.com>]
构建时修改参数
[root@localhost images3]# docker build --build-arg author="Presley <Presley@qq.com>" -t wohaoshuaihttpd:v0.3-10 ./
Sending build context to Docker daemon 4.096kB
Step 1/10 : FROM nginx:1.14-alpine
---> 8a2fb25a19f5
Step 2/10 : ARG author="wohaoshuai <wohaoshuai@qq.com>"
---> Using cache
---> f682ee70b312
Step 3/10 : LABEL maintainer="${author}"
---> Running in c6ae8d2e646b
Removing intermediate container c6ae8d2e646b
---> 5c3eb8688fff
Step 4/10 : ENV NGX_DOC_ROOT="/data/web/html/"
---> Running in 700d76775398
Removing intermediate container 700d76775398
---> 1427d0079175
Step 5/10 : ADD index.html ${NGX_DOC_ROOT}
---> 987d3187f31f
Step 6/10 : ADD entrypoint.sh /bin/
---> 7bc12ca11c64
Step 7/10 : EXPOSE 80/tcp
---> Running in be86f52a488f
Removing intermediate container be86f52a488f
---> 16c8520ae136
Step 8/10 : HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:10080/
---> Running in 133ee12ebd7c
Removing intermediate container 133ee12ebd7c
---> 0eac1d50b199
Step 9/10 : CMD ["/usr/sbin/nginx","-g","daemon off;"]
---> Running in 798fee85709b
Removing intermediate container 798fee85709b
---> 07ca978c450f
Step 10/10 : ENTRYPOINT ["/bin/entrypoint.sh"]
---> Running in b3d13eb6e049
Removing intermediate container b3d13eb6e049
---> 06e6e8b0b448
Successfully built 06e6e8b0b448
Successfully tagged wohaoshuaihttpd:v0.3-10
[root@localhost ~]# docker inspect -f {{.Config.Labels}} wohaoshuaihttpd:v0.3-10
map[maintainer:Presley <Presley@qq.com>]
17、ONBUILD
[root@localhost images3]# cat Dockerfile
FROM nginx:1.14-alpine
ARG author="wohaoshuai <wohaoshuai@qq.com>"
LABEL maintainer="${author}"
ENV NGX_DOC_ROOT="/data/web/html/"
ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/
EXPOSE 80/tcp
#3s后再做检测
HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:10080/
#如果谁要基于我的镜像做那么需要先下载
ONBUILD ADD http://nginx.org/download/nginx-1.15.12.tar.gz /usr/local/src/
CMD ["/usr/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]
[root@localhost images3]# docker build --build-arg author="Presley <Presley@qq.com>" -t wohaoshuaihttpd:v0.3-11 ./
Sending build context to Docker daemon 4.096kB
Step 1/11 : FROM nginx:1.14-alpine
---> 8a2fb25a19f5
Step 2/11 : ARG author="wohaoshuai <wohaoshuai@qq.com>"
---> Using cache
---> f682ee70b312
Step 3/11 : LABEL maintainer="${author}"
---> Using cache
---> 5c3eb8688fff
Step 4/11 : ENV NGX_DOC_ROOT="/data/web/html/"
---> Using cache
---> 1427d0079175
Step 5/11 : ADD index.html ${NGX_DOC_ROOT}
---> Using cache
---> 987d3187f31f
Step 6/11 : ADD entrypoint.sh /bin/
---> Using cache
---> 7bc12ca11c64
Step 7/11 : EXPOSE 80/tcp
---> Using cache
---> 16c8520ae136
Step 8/11 : HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:10080/
---> Using cache
---> 0eac1d50b199
Step 9/11 : ONBUILD ADD http://nginx.org/download/nginx-1.15.12.tar.gz /usr/local/src/
---> Running in e694a816039c
Removing intermediate container e694a816039c
---> 8ad18558dc97
Step 10/11 : CMD ["/usr/sbin/nginx","-g","daemon off;"]
---> Running in aabdddec1860
Removing intermediate container aabdddec1860
---> a9d1f912f8c9
Step 11/11 : ENTRYPOINT ["/bin/entrypoint.sh"]
---> Running in f7af8d4d2ef7
Removing intermediate container f7af8d4d2ef7
---> 41521f27c609
Successfully built 41521f27c609
Successfully tagged wohaoshuaihttpd:v0.3-11
[root@localhost images4]# cat Dockerfile
FROM wohaoshuaihttpd:v0.3-11
RUN mkdir /tmp/test
[root@localhost images4]# docker build -t test:v0.1-1 ./
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM wohaoshuaihttpd:v0.3-11
# Executing 1 build trigger
Downloading [==================================================>] 1.032MB/1.032MB
---> 5401af3f58d1
Step 2/2 : RUN mkdir /tmp/test
---> Running in 9fec094f32d3
Removing intermediate container 9fec094f32d3
---> 107f495f566e
Successfully built 107f495f566e
Successfully tagged test:v0.1-1
[root@localhost images4]# docker run --name test1 --rm test:v0.1-1 ls /usr/local/src
nginx-1.15.12.tar.gz