zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    window.location.href无法跳转的解决办法
    HTTP 错误 405.0
    C# 浅拷贝与深拷贝
    C# .ToString() 格式化
    深入理解AsyncTask
    【转】Android子线程真的不能更新UI么
    深入理解Activity的启动模式
    Android7.0,剪裁后提示“无法保存经过裁剪的图片”
    Android工程改包名
    javah命令,提示“找不到类文件”
  • 原文地址:https://www.cnblogs.com/Presley-lpc/p/10750342.html
Copyright © 2011-2022 走看看