actiontry

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

dockerfile 写法,转自cloudman 每天5分钟玩转docker

  • CMD
CMD 有三种格式:

Exec 格式:CMD ["executable","param1","param2"]
这是 CMD 的推荐格式。

CMD ["param1","param2"] 为 ENTRYPOINT 提供额外的参数,此时 ENTRYPOINT 必须使用 Exec 格式。

Shell 格式:CMD command param1 param2

Exec 和 Shell 格式前面已经介绍过了。
第二种格式 CMD ["param1","param2"] 要与 Exec 格式 的 ENTRYPOINT 指令配合使用,其用途是为 ENTRYPOINT 设置默认的参数。我们将在后面讨论 ENTRYPOINT 时举例说明。

  • ENTRYPOINT
ENTRYPOINT 指令可让容器以应用程序或者服务的形式运行。

ENTRYPOINT 看上去与 CMD 很像,它们都可以指定要执行的命令及其参数。不同的地方在于 ENTRYPOINT 不会被忽略,一定会被执行,即使运行 docker run 时指定了其他命令

ENTRYPOINT 的 Exec 格式用于设置要执行的命令及其参数,同时可通过 CMD 提供额外的参数。

ENTRYPOINT 中的参数始终会被使用,而 CMD 的额外参数可以在容器启动时动态替换掉。

如: 启动容器的时候就会 /usr/local/bin/dumb-init bash /opt/mix-ops/entrypoint-worker.sh
ENTRYPOINT ["/usr/local/bin/dumb-init"]
CMD ["/opt/mix-ops/entrypoint-worker.sh"]

如:
ENTRYPOINT ["/bin/echo", "Hello"]  

CMD ["world"]

当容器通过 docker run -it [image] 启动时,输出为:
Hello world

而如果通过 docker run -it [image] CloudMan 启动,则输出为:

Hello CloudMan

  • 最佳实践
使用 RUN 指令安装应用和软件包,构建镜像。

如果 Docker 镜像的用途是运行应用程序或服务,比如运行一个 MySQL,应该优先使用 Exec 格式的 ENTRYPOINT 指令。CMD 可为 ENTRYPOINT 提供额外的默认参数,同时可利用 docker run 命令行替换默认参数。

如果想为容器设置默认的启动命令,可使用 CMD 指令。用户可在 docker run 命令行中替换此默认命令。

  • docker run
前台:(不会执行Dockerfile中的命令,-it配合使用)

- i   --interactive=false   打开STDIN和容器交互。经常和 -t一起使用。
- t   --tty=false           使用终端。经常和 -i一起使用。

后台:(后台会执行Dockerfile里的命令,-d 不能与-it(前台)一起使用)

- d  后台(-d) 在后台模式(-d=true或者直接使用-d)


转载自Cloudman每天5分钟玩转docker

posted on 2018-11-09 15:32  actiontry  阅读(160)  评论(0)    收藏  举报