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

 

posted @ 2019-04-22 15:21  Presley  阅读(446)  评论(0编辑  收藏  举报