一、继续上章节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.- ./
Sending build context to Docker daemon .048kB
Step / : FROM busybox
---> af2f74c517aa
Step / : LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" app="httpd"
---> Using cache
---> b94158ebd25b
Step / : ENV WEB_DOC_ROOT="/data/web/html"
---> Using cache
---> 128dc125c148
Step / : RUN mkdir -p ${WEB_DOC_ROOT} && echo "<h1>Busybox httpd server.</h1>" > ${WEB_DOC_ROOT}/index.html
---> Using cache
---> 79e6d697305f
Step / : ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}
---> Running in 322af685179f
Removing intermediate container 322af685179f
---> 26837ef4211b
Successfully built 26837ef4211b
Successfully tagged wohaoshuaihttpd:v0.- [root@localhost images2]# docker run -it --rm -P --name wohaoshuai1 wohaoshuaihttpd:v0.- 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.- ./
Sending build context to Docker daemon .048kB
Step / : FROM busybox
---> af2f74c517aa
Step / : LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>" app="httpd"
---> Using cache
---> b94158ebd25b
Step / : ENV WEB_DOC_ROOT="/data/web/html"
---> Using cache
---> 128dc125c148
Step / : RUN mkdir -p ${WEB_DOC_ROOT} && echo "<h1>Busybox httpd server.</h1>" > ${WEB_DOC_ROOT}/index.html
---> Using cache
---> 79e6d697305f
Step / : CMD ["/bin/httpd -f -h ${WEB_DOC_ROOT}"]
---> Running in 633c17c96e88
Removing intermediate container 633c17c96e88
---> 997c922b10f0
Step / : ENTRYPOINT ["/bin/sh","-c"]
---> Running in 3838dded3dfe
Removing intermediate container 3838dded3dfe
---> 9df599309f9a
Successfully built 9df599309f9a
Successfully tagged wohaoshuaihttpd:v0.-
[root@localhost images2]# docker run -it --rm -P --name wohaoshuai1 wohaoshuaihttpd:v0.- [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:-};
root ${NGX_DOC_ROOT:-/usr/share/nginx/html};
}
EOF #执行所有参数
exec "$@" [root@localhost images3]# docker build -t wohaoshuaihttpd:v0.- ./
Sending build context to Docker daemon .096kB
Step / : FROM nginx:1.14-alpine
---> 8a2fb25a19f5
Step / : LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>"
---> Using cache
---> d073a723c02f
Step / : ENV NGX_DOC_ROOT="/data/web/html/"
---> Using cache
---> e1f5eb1ad38b
Step / : ADD index.html ${NGX_DOC_ROOT}
---> e070ca432d81
Step / : ADD entrypoint.sh /bin/
---> f45f6cba97b6
Step / : CMD ["/usr/sbin/nginx","-g","daemon off;"]
---> Running in c4e622170dc8
Removing intermediate container c4e622170dc8
---> 0bfde2a829f4
Step / : ENTRYPOINT ["/bin/entrypoint.sh"]
---> Running in bb3787180bc6
Removing intermediate container bb3787180bc6
---> 0ae588a1c9ff
Successfully built 0ae588a1c9ff
Successfully tagged wohaoshuaihttpd:v0.-
[root@localhost images3]# docker run --name wohaoshuai1 --rm -P wohaoshuaihttpd:v0.-
172.17.0.1 - - [/Apr/::: +] "GET / HTTP/1.1" "-" "curl/7.29.0" "-"
172.17.0.2 - - [/Apr/::: +] "GET / HTTP/1.1" "-" "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:;
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 /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.- ./
Sending build context to Docker daemon .096kB
Step / : FROM nginx:1.14-alpine
---> 8a2fb25a19f5
Step / : LABEL maintainer="wohaoshuai <wohaoshuai@qq.com>"
---> Using cache
---> d073a723c02f
Step / : ENV NGX_DOC_ROOT="/data/web/html/"
---> Using cache
---> e1f5eb1ad38b
Step / : ADD index.html ${NGX_DOC_ROOT}
---> Using cache
---> e070ca432d81
Step / : ADD entrypoint.sh /bin/
---> Using cache
---> f45f6cba97b6
Step / : EXPOSE /tcp
---> Running in b9bf91ef24fa
Removing intermediate container b9bf91ef24fa
---> fdea2cc4ac14
Step / : 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 / : CMD ["/usr/sbin/nginx","-g","daemon off;"]
---> Running in 7085a3cb2ebf
Removing intermediate container 7085a3cb2ebf
---> 3932fc91e4bf
Step / : ENTRYPOINT ["/bin/entrypoint.sh"]
---> Running in 55a5f50907fc
Removing intermediate container 55a5f50907fc
---> dfe7de99a64d
Successfully built dfe7de99a64d
Successfully tagged wohaoshuaihttpd:v0.-
[root@localhost images3]# docker run --name wohaoshuai1 --rm -P -e "PORT=8080" wohaoshuaihttpd:v0.-
127.0.0.1 - - [/Apr/::: +] "GET / HTTP/1.1" "-" "Wget" "-"
127.0.0.1 - - [/Apr/::: +] "GET / HTTP/1.1" "-" "Wget" "-"
127.0.0.1 - - [/Apr/::: +] "GET / HTTP/1.1" "-" "Wget" "-"
127.0.0.1 - - [/Apr/::: +] "GET / HTTP/1.1" "-" "Wget" "-" [root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b6d0ddff14 wohaoshuaihttpd:v0.- "/bin/entrypoint.sh …" About a minute ago Up About a minute (healthy) 0.0.0.0:->/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 /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.- ./
Sending build context to Docker daemon .096kB
Step / : FROM nginx:1.14-alpine
---> 8a2fb25a19f5
Step / : ARG author="wohaoshuai <wohaoshuai@qq.com>"
---> Running in d51a611199ab
Removing intermediate container d51a611199ab
---> f682ee70b312
Step / : LABEL maintainer="${author}"
---> Running in 461d279b754d
Removing intermediate container 461d279b754d
---> ca0c78ef37ae
Step / : ENV NGX_DOC_ROOT="/data/web/html/"
---> Running in ceb69b94032a
Removing intermediate container ceb69b94032a
---> f7e500f33f56
Step / : ADD index.html ${NGX_DOC_ROOT}
---> 52e9500d83ba
Step / : ADD entrypoint.sh /bin/
---> cd773aca3f27
Step / : EXPOSE /tcp
---> Running in 396a1631a659
Removing intermediate container 396a1631a659
---> 064b4c952023
Step / : HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:10080/
---> Running in c2f2b809f64b
Removing intermediate container c2f2b809f64b
---> e9b24a5f543d
Step / : CMD ["/usr/sbin/nginx","-g","daemon off;"]
---> Running in 7f848401bdd3
Removing intermediate container 7f848401bdd3
---> 1b2caf95eddc
Step / : ENTRYPOINT ["/bin/entrypoint.sh"]
---> Running in 14b2ef23a35f
Removing intermediate container 14b2ef23a35f
---> 65fe43f7d081
Successfully built 65fe43f7d081
Successfully tagged wohaoshuaihttpd:v0.- [root@localhost ~]# docker inspect -f {{.Config.Labels}} wohaoshuaihttpd:v0.-
map[maintainer:wohaoshuai <wohaoshuai@qq.com>]

    构建时修改参数

[root@localhost images3]# docker build --build-arg author="Presley <Presley@qq.com>" -t wohaoshuaihttpd:v0.- ./
Sending build context to Docker daemon .096kB
Step / : FROM nginx:1.14-alpine
---> 8a2fb25a19f5
Step / : ARG author="wohaoshuai <wohaoshuai@qq.com>"
---> Using cache
---> f682ee70b312
Step / : LABEL maintainer="${author}"
---> Running in c6ae8d2e646b
Removing intermediate container c6ae8d2e646b
---> 5c3eb8688fff
Step / : ENV NGX_DOC_ROOT="/data/web/html/"
---> Running in 700d76775398
Removing intermediate container 700d76775398
---> 1427d0079175
Step / : ADD index.html ${NGX_DOC_ROOT}
---> 987d3187f31f
Step / : ADD entrypoint.sh /bin/
---> 7bc12ca11c64
Step / : EXPOSE /tcp
---> Running in be86f52a488f
Removing intermediate container be86f52a488f
---> 16c8520ae136
Step / : HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:10080/
---> Running in 133ee12ebd7c
Removing intermediate container 133ee12ebd7c
---> 0eac1d50b199
Step / : CMD ["/usr/sbin/nginx","-g","daemon off;"]
---> Running in 798fee85709b
Removing intermediate container 798fee85709b
---> 07ca978c450f
Step / : ENTRYPOINT ["/bin/entrypoint.sh"]
---> Running in b3d13eb6e049
Removing intermediate container b3d13eb6e049
---> 06e6e8b0b448
Successfully built 06e6e8b0b448
Successfully tagged wohaoshuaihttpd:v0.- [root@localhost ~]# docker inspect -f {{.Config.Labels}} wohaoshuaihttpd:v0.-
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 /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.- ./
Sending build context to Docker daemon .096kB
Step / : FROM nginx:1.14-alpine
---> 8a2fb25a19f5
Step / : ARG author="wohaoshuai <wohaoshuai@qq.com>"
---> Using cache
---> f682ee70b312
Step / : LABEL maintainer="${author}"
---> Using cache
---> 5c3eb8688fff
Step / : ENV NGX_DOC_ROOT="/data/web/html/"
---> Using cache
---> 1427d0079175
Step / : ADD index.html ${NGX_DOC_ROOT}
---> Using cache
---> 987d3187f31f
Step / : ADD entrypoint.sh /bin/
---> Using cache
---> 7bc12ca11c64
Step / : EXPOSE /tcp
---> Using cache
---> 16c8520ae136
Step / : HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:10080/
---> Using cache
---> 0eac1d50b199
Step / : ONBUILD ADD http://nginx.org/download/nginx-1.15.12.tar.gz /usr/local/src/
---> Running in e694a816039c
Removing intermediate container e694a816039c
---> 8ad18558dc97
Step / : CMD ["/usr/sbin/nginx","-g","daemon off;"]
---> Running in aabdddec1860
Removing intermediate container aabdddec1860
---> a9d1f912f8c9
Step / : ENTRYPOINT ["/bin/entrypoint.sh"]
---> Running in f7af8d4d2ef7
Removing intermediate container f7af8d4d2ef7
---> 41521f27c609
Successfully built 41521f27c609
Successfully tagged wohaoshuaihttpd:v0.- [root@localhost images4]# cat Dockerfile
FROM wohaoshuaihttpd:v0.-
RUN mkdir /tmp/test [root@localhost images4]# docker build -t test:v0.- ./
Sending build context to Docker daemon .048kB
Step / : FROM wohaoshuaihttpd:v0.-
# Executing build trigger
Downloading [==================================================>] .032MB/.032MB
---> 5401af3f58d1
Step / : RUN mkdir /tmp/test
---> Running in 9fec094f32d3
Removing intermediate container 9fec094f32d3
---> 107f495f566e
Successfully built 107f495f566e
Successfully tagged test:v0.- [root@localhost images4]# docker run --name test1 --rm test:v0.- ls /usr/local/src
nginx-1.15..tar.gz

Docker 学习8 Dockerfile详解2的更多相关文章

  1. Docker 学习7 Dockerfile详解

    一.镜像的生成途径 1.使用当前进程替换上一个进程 exec 2.生成方式 3.dockerfile制作镜像要求 a.要有专有的工作目录. b.要有专门的制作文件,文件名首字母大写 c.如果要打包很多 ...

  2. Docker系列07—Dockerfile 详解

    本文收录在容器技术学习系列文章总目录 1.认识Dockerfile 1.1 镜像的生成途径 基于容器制作  dockerfile,docker build 基于容器制作镜像,已经在上篇Docker系列 ...

  3. docker学习(3)--Dockfile详解

    转载请注明出处:http://www.cnblogs.com/lighten/p/6900556.html 1.基本说明 Dockfile是一个用于编写docker镜像生成过程的文件,其有特定的语法. ...

  4. Docker 学习之命令详解

    1. docker version docker version 显示 Docker 版本信息. 2. docker info docker info 显示 Docker 系统信息,包括镜像和容器数. ...

  5. Docker入门02——Dockerfile详解

    基本示例 FROM MAINTAINER LABEL RUN ADD COPY CMD ENTRYPOINT ENV EXPOSE VOLUME WORKDIR USER ARG 基本示例 # Thi ...

  6. [转帖]Docker学习之Dockerfile命令详解

    Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...

  7. Dockerfile详解

    Dockerfile详解 利用Dockerfile文件,可以构建docker的image镜像 命令使用 通过-f参数指定Dockerfile路径,进行构建image docker build -f / ...

  8. Dockerfile详解及优化

    Dockerfile详解 0. Dockerfile的作用 docker可以根据Dockerfile中的指令来构建docker镜像.Dockerfile是一个文本文件,其应当包含用户想要构建一个镜像的 ...

  9. 最佳实战Docker持续集成图文详解

    最佳实战Docker持续集成图文详解 这是一种真正的容器级的实现,这个带来的好处,不仅仅是效率的提升,更是一种变革:开发人员第一次真正为自己的代码负责——终于可以跳过运维和测试部门,自主维护运行环境( ...

随机推荐

  1. 九.django模型基础(三)之关联对象操作及多表查询

    Ⅰ.关系表的数据操作 1.正向 正向:如果一个模型有外键字段,通过这个模型对外键进行操作叫做正向. 1)更新(增) a.通过属性复制 b.通过主键的方式 总结: ForeignKey 字段的更新,跟普 ...

  2. cucumber测试项目报错

    [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building th ...

  3. elasticsearch 介绍

    一.什么是elasticsearch Elasticsearch是一个基于Lucene的高度可伸缩的分布式的开源全文搜索和分析引擎.它允许您快速.实时地存储.搜索和分析大量数据.它通常用作底层引擎/技 ...

  4. js ajax方法模板

    ajax方法: $.ajax({ type: "POST", url: "WebService.asmx/sp_sj_yisheng_gexinhuaAdd", ...

  5. package.json 里的 dependencies和devDependencies区别

    dependencies(依赖的意思): 通过 --save 安装,是需要发布到生产环境的.比如项目中使用react,那么没有这个包的依赖就会报错,因此把依赖写入dependencies devDep ...

  6. LeetCode第十五题-找出数组中三数和为0的答案

    3Sum 问题简介: 给定n个整数的数组nums,是否有元素a,b,c在nums中,使a + b + c = 0? 找到数组中所有唯一的三元组,它们的总和为零 注:解决方案集不得包含重复的三元组 例如 ...

  7. LibreOJ一本通题解报告

    网页跳转 解析啥的以后会有的 目录 ·T1活动安排 ·T2种树 ·T3喷水装置 T1活动安排 /* problem:yibentong10000 date:2019/4/21 author:Lonel ...

  8. Centos7安装JDK+部署Tomcat8

    Centos7下JDK+Tomcat的部署: 1.安装JDK 1.1 通过以下命令获得java JDK列表 yum -y list java* 1.2 通过yum安装JDK yum -y instal ...

  9. C++入门篇十二

    成员变量和成员属性: 静态成员函数和静态成员变量是不属于对象的,所以不占有空间,非静态成员是属于对象的,占有存储空间,空类大小1 #include "pch.h" #include ...

  10. #10038.A Horrible Poem

    #10038.A Horrible Poem 题目传送门 思路解析 既然这道题目在hash板块里,那么自然就可以想到用hash做这道题目. 首先我们可以用hash数组存储字符串的前缀的hash值. 因 ...