资讯专栏INFORMATION COLUMN

【Docker实战之入门】Dockerfile详细分析(5):ENTRYPOINT和CMD命令的区别

JerryWangSAP / 3130人阅读

摘要:用法在当中只有最后一条生效,其他都不生效第一种写法类似数组形式,推荐使用。第二章方法执行命令启动的进程,该进程的为执行完这个的。命令覆盖掉了中的命令,直接进入到了中。删除镜像前,先停止。

ENTRYPOINT用法

entrypoint在dockerfile当中只有最后一条生效,其他entrypoint都不生效
第一种写法类似数组形式,推荐使用。使用这种方法启动的进程的pid1
第二章方法执行命令启动的进程,该进程的pid为执行完这个shell的pid

CMD用法

第一种用法,也是数组格式。
第二种用法,为entrypoint指定参数。比如,entrypoint执行命令 usrs/bin/Nginx,cmd可以提供参数如start,结合起来即为usrs/bin/nginx start.
第三种写法,pid号也是shell执行的pid号。是Linux下 /bin/sh -c 的用法。

构建镜像需要基于一个基础镜像。下面基于centos7这个基础镜像构建一个镜像。

[root@Optimus /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
wordpress           latest              b027afd30886        33 hours ago        409.2 MB
csphere/wordpress   4.2                 6d90342cc99d        2 days ago          747.3 MB
csphere/mysql       5.5                 e147ac2a588e        6 days ago          752.7 MB
csphere/php-fpm     5.4                 1b08c94ce801        8 days ago          709.7 MB
csphere/centos      7.1                 fd1f7619e63e        9 days ago          613 MB
centos              centos7.1.1503      879c6d07c60e        7 weeks ago         212.1 MB
[root@Optimus /]# 

-----
使用cmd

创建dockerfile

[root@Optimus /]# vim Dockerfile

FROM centos:centos7.1.1503

CMD ["/bin/echo", "This is test cmd"] 

build的时候出错,提示没有权限

[root@Optimus /]# docker build -t csphere/cmd:0.1 .
Error checking context is accessible: "no permission to read from "proc/sys/net/ipv4/route/flush"". Please check permissions and try again.

删除Dockerfile

rm -rf 目录名字
-r 就是向下递归,不管有多少级目录,一并删除
-f 就是直接强行删除,不作任何提示的意思~    

rm -rf Dockerfile 

进入docker-training目录下面,重新创建Dockerfile,构建镜像

[root@Optimus docker-training]# docker build -t csphere/cmd:0.1
docker: "build" requires 1 argument.
See "docker build --help".

Usage: docker build [OPTIONS] PATH | URL | -

Build a new image from the source code at PATH
[root@Optimus docker-training]# docker build -t csphere/cmd:0.1 .
Sending build context to Docker daemon 27.55 MB
Sending build context to Docker daemon 
Step 0 : FROM centos:centos7.1.1503
          ---> 879c6d07c60e
Step 1 : CMD /bin/echo This is test cmd
          ---> Running in 3dce9e75bdc8
          ---> f32bb73e8383
Removing intermediate container 3dce9e75bdc8
Successfully built f32bb73e8383
[root@Optimus docker-training]# 

接下来可以通过csphere/cmd:0.1这个镜像来启动一个容器

docker run -it --rm 
--rm参数的意识是,只要容器一退出,则删除容器

[root@Optimus docker-training]# docker run -it csphere/cmd:0.1
This is test cmd

可以看到,/bin/echo This is test cmd 这条命令成功执行。

直接进入container里面,而不执行echo指令,可以在docker run 后面直接加上/bin/bash命令,/bin/bash命令会覆盖掉cmd后面的命令。

[root@Optimus docker-training]# docker run -it csphere/cmd:0.1 /bin/bash
[root@cd32d71fb9c5 /]# 

/bin/bash 命令覆盖掉了dockerfile中的cmd命令,直接进入到了container中。

---

使用entrypoint

[root@Optimus docker-training]# vim Dockerfile 

FROM centos:centos7.1.1503

ENTRYPOINT ["/bin/echo", "This is test entrypoint"]
~

构建镜像

[root@Optimus docker-training]# docker build -t csphere/ent:0.1 .
Sending build context to Docker daemon 27.55 MB
Sending build context to Docker daemon 
Step 0 : FROM centos:centos7.1.1503
          ---> 879c6d07c60e
          

直接在docker run 后面加参数/bin/bash,entrypoint会把/bin/bash当成一个echo的字符串参数,不会进入到容器中。

[root@Optimus docker-training]# docker run -it csphere/ent:0.1 /bin/bash
This is test entrypoint /bin/bash

如果想覆盖dockerfile中entrypoint指令,可以在docker run命令中加--entrypoint参数来指定。

[root@Optimus docker-training]# docker run -it --entrypoint=/bin/bash csphere/ent:0.1
[root@bc7378b9ca83 /]# 

Step 1 : ENTRYPOINT /bin/echo This is test entrypoint
          ---> Running in 40b01fac38af
          ---> 9714a8b5bb85
Removing intermediate container 40b01fac38af
Successfully built 9714a8b5bb85
[root@Optimus docker-training]# 

启动容器

[root@Optimus docker-training]# docker run -it csphere/ent:0.1
This is test entrypoint

----
其他

删除镜像

docker rmi 镜像
如果有启动中的容器正在使用该镜像,不能删除该镜像。删除镜像前,先停止container。-f 参数强制删除镜像。

如果对文件有修改,可以使用一下命令,更新git 仓库

git add *
git commit -M ""
git push origin master  提交到自己的仓库中

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27106.html

相关文章

  • Docker 快速入门指引

    摘要:本文最早发表于本人博客快速入门指引是什么是公司开源的一个基于技术之上构建的容器引擎,基于语言并遵从协议开源。指令用于设置用户或来运行生成的镜像和执行指令。中定义的指令不会继承到当前引用的镜像中,也就是当引用的镜像创建完成后将会清除所 本文最早发表于本人博客: Docker 快速入门指引 Docker是什么? Docker是 Docker.Inc 公司开源的一个基于 LXC技术之上构建的...

    figofuture 评论0 收藏0
  • Docker实战入门Dockerfile详细分析:构建docker镜像(1)基础镜像cento

    摘要:如果有服务器需要维护重启时,也会重启,此时端口会发生变化,仍然会随机拿一个没有使用的端口号来和号端口做端口映射。除非该删掉后,端口号会被分配给其他使用。 Dockerfile Docker是软件工业上的集装箱技术。 通过以下文件制作Docker镜像 [root@Optimus docker-training]# cd centos7/ [root@Optimus centos7]# l...

    learn_shifeng 评论0 收藏0
  • 30 分钟快速入门 Docker 教程

    摘要:分钟快速入门教程一欢迎来到世界与虚拟化在没有的时代,我们会使用硬件虚拟化虚拟机以提供隔离。仓库分为公开仓库和私有仓库,最大的公开仓库是官方仓库,国内的公开仓库也有很多选择,例如阿里云等。 30 分钟快速入门 Docker 教程 一、欢迎来到 Docker 世界 1. Docker 与虚拟化 在没有 Docker 的时代,我们会使用硬件虚拟化(虚拟机)以提供隔离。这里,虚拟机通过在操作系...

    LucasTwilight 评论0 收藏0
  • Docker部署基于NodejsWeb应用-实战

    摘要:采用虚拟化的技术来虚拟化出应用程序的运行环境。安装成功后,可以通过查看版本号尽量使用最新的稳定版本。是镜像名,是镜像的版本号,到此你已经成功构建了一个新的镜像,你可以通过,查看你的镜像。部署时将此文件到生产环境服务器上。 Docker docker是一个开源的应用容器引擎,可以为我们提供安全、可移植、可重复的自动化部署的方式。docker采用虚拟化的技术来虚拟化出应用程序的运行环境。此...

    marek 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<