前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dockerfile常用易混指令--(2)

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

作者头像
qsjs
发布2020-06-09 10:37:02
3360
发布2020-06-09 10:37:02
举报

接上一篇:<<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的实例

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CMD:
  • ENTRYPOINT:
  • shell格式与exec格式的区别:
  • EXPOSE:
  • VOLUME:
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档