一、继续上章节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. CSS上下左右居中的几种方法

    1.absolute,margin: auto .container { position: relative; } .content { position: absolute; margin: au ...

  2. JS学习笔记Day26

    一.什么是设计模式? (一)设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 二.单例模式 (一) 概念:单个实例,只有一个对象,多次创建,返回 ...

  3. 基于 Markdown 编写接口文档

    最近公司开发项目需要前后端分离,这样话就设计到后端接口设计.复杂功能需要提供各种各样的接口供前端调用,因此编写API文档非常有必要了 网上查了很多资料,发现基于Markdown编写文档是一种比较流行而 ...

  4. python8--文件操作 with。。。open语法

    复习   一.类型转换 1.数字类型:int() | bool() | float()  2.str与int:int('10') | int('-10') | int('0') | float('-. ...

  5. Nuxt.js笔记

    前置知识 SSR服务器渲染 Vue SSR(server side rendering)服务端渲染 和 Vue SPA(single page application)单页应用 Vue SSR-> ...

  6. IPv6 RIPng (PT)

    在Cisco路由器上配置RIPng  一.拓扑图 二.地址表 Device Interface IPv6 Address R1 F 0/0 2001:0DB8:CAFE:0001::1/64 S 0/ ...

  7. 使用Ueditor编辑器上传图片总结;

    今天使用Ueditor编辑器上传图片一直出问题,在网上找了多种方法,最后总结如下: Ueditor编辑器是百度开发的编辑器,要在jsp页面添加Ueditor编辑器,需要以下几步: (1)到 http: ...

  8. 毕业设计——Django邮件发送功能实现及问题记录

    django发送邮件:send_mail()&send_mass_mail() 自强学堂 刘江的博客 HTTPS,TLS和SSL django发送邮件及其相关问题 步骤 : 0. 登录作为发送 ...

  9. winform 以不规则图形背景显示窗体

    一:创建一个winform窗体,把BackgroundImage引入一个不规则的图片,设置属性BackgroundImageLayout为Stretch 二:主要代码 using System; us ...

  10. chrome浏览器开发常用快捷键之基础篇-遁地龙卷风

    1.标签页和窗口快捷键 打开新的标签页,并跳转到该标签页 Ctrl + t 重新打开最后关闭的标签页,并跳转到该标签页 Ctrl + Shift + t 跳转到下一个打开的标签页 Ctrl + PgD ...