返回介绍

PART Ⅰ : 容器云OPENSHIFT

PART Ⅱ:容器云 KUBERNETES

PART Ⅲ:持续集成与持续部署

PART Ⅴ:日志/监控/告警

PART Ⅵ:基础

PART Ⅶ:数据存储、处理

PART VIII:CODE

PART X:HACKINTOSH

PART XI:安全

Dockerfile中CMD与ENTRYPOINT命令的区别

发布于 2024-06-08 21:16:46 字数 6515 浏览 0 评论 0 收藏 0

  • CMD命令设置容器启动后默认执行的命令及其参数,但CMD设置的命令能够被docker run命令后面的命令行参数替换

  • ENTRYPOINT配置容器启动时的执行命令(不会被忽略,一定会被执行,即使运行 docker run时指定了其他命令)

  • ENTRYPOINT 的 Exec 格式用于设置容器启动时要执行的命令及其参数,同时可通过CMD命令或者命令行参数提供额外的参数

  • ENTRYPOINT 中的参数始终会被使用,这是与CMD命令不同的一点

1. Shell格式和Exec格式命令

  • Shell格式指令 <command>

    CMD java -jar test.jar
    
  • Exec格式指令 ["executable", "param1", "param2", ...]

    ENTRYPOINT  ["java", "-jar", "test.jar"]
    

2. Shell格式和Exec格式命令的区别

  • Shell格式中的命令会直接被Shell解析
  • Exec格式不会直接解析,需要加参数

3. CMD和ENTRYPOINT指令支持的命令格式

CMD 指令的命令支持以下三种格式:

  • Exec格式: CMD ["executable","param1","param2"]
  • Exec参数: CMD ["param1","param2"] 用来为ENTRYPOINT 提供参数
  • Shell格式: CMD command param1 param2

ENTRYPOINT 指令的命令支持以下了两种格式:

  • Exec格式:可用使用CMD的参数和可使用docker run [image] 参数后面追加的参数
  • Shell格式 :不会使用 CMD参数,可使用docker run [image] 参数后面追加的参数

4. 示例

ENTRYPOINT的Exec格式

# Dockerfile
FROM centos
ENTRYPOINT ["/bin/echo", "Hello"]

# 启动容器的命令: docker run -it [image]
# 输出: Hello
# 启动容器的命令: docker run -it [image] Test
# 输出: Hello Test

ENTRYPOINT的Exec格式 + CMD的Exec格式

# Dockerfile
FROM centos
ENTRYPOINT ["/bin/echo", "Hello"]
CMD ["Word"]

# 启动容器的命令: docker run -it [image]
# 输出: Hello Word
# 启动容器的命令: docker run -it [image] Test
# 输出: Hello Test

ENTRYPOINT的Exec格式 + CMD的shell格式

# Dockerfile
FROM centos
ENTRYPOINT ["/bin/echo", "Hello"]
CMD Word

# 启动容器的命令: docker run -it [image]
# 输出: Hello /bin/sh -c Word
# 启动容器的命令: docker run -it [image] Test
# 输出: Hello Test

ENTRYPOINT的shell格式

# Dockerfile
FROM centos
ENTRYPOINT /bin/echo "Hello"

# 启动容器的命令: docker run -it [image]
# 输出: Hello
# 启动容器的命令: docker run -it [image] Test
# 输出: Hello

ENTRYPOINT的shell格式 + CMD的Shell格式

# Dockerfile
FROM centos
ENTRYPOINT /bin/echo "Hello"
CMD Word

# 启动容器的命令: docker run -it [image]
# 输出: Hello
# 启动容器的命令: docker run -it [image] Test
# 输出: Hello

ENTRYPOINT的shell格式 +CMD的Exec格式

# Dockerfile
FROM centos
ENTRYPOINT /bin/echo "Hello"
CMD ["Word"]

# 启动容器的命令: docker run -it [image]
# 输出: Hello
# 启动容器的命令: docker run -it [image] Test
# 输出: Hello

https://blog.csdn.net/weixin_42971363/article/details/91506844

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文