dockerfile常用易混指令--(2)

作者: My熊猫眼 | 来源:发表于2019-08-24 22:07 被阅读0次

接上一篇:<<dockerfile 常用易混指令--(1)>>, 本篇介绍剩余的几个基础指令:

CMD:

dockerfile中这个指令一般只有一个,如果配置有多个,那么只有最后一个CMD配置生效,而如果没有配置CMD, 那么通常必须指定ENTRYPOINT参数.
如果既没有CMD, 也没有指定ENTRYPOINT, 那么docker build的时候并不会报错,但是run 相应的container的时候,如果忽略指定 COMMAND, 那么 会提示"No command specified"的错误; CMD指令可以被 docker run IMG COMMAND 中的COMMAND覆盖. 所以CMD指令是run container的时候被调用的,而不是在docker build的时候调用的;

ENTRYPOINT:

这个指令指定的命令是无法通过docker run 进行overwritten的,而因为 CMD 对应的命令是可以通过docker run 进行overwritten的,所以可以在dockerfile中同时指定ENTRYPOINT 以及CMD(两者都必须使用exec格式); CMD 用于指定默认的参数,而如果docker run 的时候指定了COMMAND, 那么就实现替换 默认的参数的功能 (见后面文章的例子:基于centos的rootfs 创建自己的base image)

shell格式与exec格式的区别:

在我们使用 RUN, CMD, ENTRYPOINT指令的时候,有shell form和exec form的区别,分别是如下的形式:
exec forms: INSTRUCTIONS ["command","para1","para2"]
shell forms: INSTRUCTIONS "command" "para1" "para2"
在shell 格式下,相当于 /bin/sh -c "command" "para1" "para2" ;
在exec格式中,["command" ,"para1" ,"para2"] 并不被/bin/sh 来处理,这里就涉及到一个变量解析的问题,详细例子见文章:基于centos的rootfs 创建自己的base image

EXPOSE:

这个指令 指出了container的监听端口,这个监听端口用于: 容器内部进程对该端口可以访问,被Llink的容器进行访问,也可以用于主机上的端口到container的重定向,但是不可以通过主机直接进行访问
如果要通过主机访问EXPOSE的端口,那么需要通过 docker run的时候,指定 -p 参数,来public 端口才可以,当指定-p参数的时候,其实docker 就自动做了EXPOSE.

VOLUME:

这个指令创建挂载点(简单来说就是创建一个目录),因为容器的存储层实现了不会因为运行而发生变化,所以向存储层的写操作,在容器停止运行的时候,写入的数据就丢失了。但是对于像数据库这类应用,数据库程序的相当一部分log文件即便在容器停止运行的时候也不应该丢失,所以需实现持久化存储,而实现持久化存储通常在 docker run的时候通过 -v 参数来指定, 但是如果用户在run容器的时候忘记指定volume, 那么数据库文件不可避免会出现丢失的现象,为了解决这个问题,事先指定 某些目录为匿名volume, 这样如果用户没有指定volume, 那么就会使用匿名volume来存储动态数据;所以这个VOLUME 参数其实指定了匿名volume,这个volume可以用于持久化存储;

文章《基于centos的rootfs 创建自己的base image》介绍一个具体的dockerfile来创建image的实例

本文原创,转载请注明出处

相关文章

  • dockerfile常用易混指令--(2)

    接上一篇:<>, 本篇介绍剩余的几个基础指令: CMD: dock...

  • dockerfile 常用易混指令--(1)

    学会写dockerfile是我们学习docker的必经之路;在写dockerfile的时候,感觉如下命令还是需要做...

  • dockerfile

    在dockerfile dockerfile常用指令 FROM 指定base镜像MA...

  • docker-02

    10:自动制作docker镜像 镜像: 中药 dockerfile: 配方 dockerfile常用指令 根据do...

  • DockerFile常用指令

    下面列出了 Dockerfile 中最常用的指令,完整列表和说明可参看官方文档。 FROM 指定 base 镜像。...

  • Dockerfile常用指令

    下面列出了 Dockerfile 中最常用的指令,完整列表和说明可参看官方文档。 FROM 指定 base 镜像。...

  • Dockerfile常用指令

    FORM 指定base镜像 MAINTAINER 设置镜像的作者,可以是任意字符串。 COPY 将文件从 buil...

  • Dockerfile常用指令

    摘自-----CloudMan 是时候系统学习 Dockerfile 了。 下面列出了 Dockerfile 中最...

  • Dockerfile常用指令

    3.1.FROM 指明构建的新镜像是来自于哪个基础镜像,例如: FROM centos:6 基础镜像不存在会在Do...

  • Dockerfile常用指令

    1.指定基础镜像 FROM <镜像> 2.执行命令 shell格式:RUN <命令>exec格式:RUN ["可执...

网友评论

    本文标题:dockerfile常用易混指令--(2)

    本文链接:https://www.haomeiwen.com/subject/ldlcectx.html