Docker

Docker #

更多内容见:Docker 学习笔记

entrypoint vs cmd #

  • 格式

    • Shell form
      • 实际运行的是 /bin/sh -c 命令
        • 有些镜像没有 shell 程序,无法使用这种方式
        • 从外部发送任何 POSIX 信号到 docker 容器,/bin/sh 命令不会转发消息给实际运行的命令
      • CMD executable param1 param2
      • ENTRYPOINT executable param1 param2
        • 会忽略 CMD 或者 docker run 参数
        • 无法覆盖
    • Exec form
      • the JSON array format
      • CMD ["executable","param1","param2"]
        • 如果要使用 Shell 环境变量,必须显示使用 sh
        • CMD [ "sh", "-c", "echo $HOME" ]
      • ENTRYPOINT ["executable","param1","param2"]
        • 会把 CMD 接到后面作为参数
        • docker run 可以覆盖:docker run demo --entrypoint cmd
      • 不管是 ENTRYPOINT 还是 CMD 命令,都强烈建议采用 exec 表示法
  • 覆盖

    • ENTRYPOINT 或者 CMD 命令会覆盖 base 镜像的 ENTRYPOINT 或者 CMD 命令
      • 如果设置了 ENTRYPOINT 而没有设置 CMD,则 base 镜像的 CMD 也会被置为空
    • docker run 覆盖
      • CMD: 比较容易覆盖:docker run demo cmd
      • ENTRYPOINT: 只有 Exec form 可以覆盖:docker run demo --entrypoint cmd
  • ENTRYPOINT  与  CMD 的最终结果:

      No ENTRYPOINT ENTRYPOINT exec_entry p1_entry ENTRYPOINT [“exec_entry”, “p1_entry”]
    No CMD error, not allowed /bin/sh -c exec_entry p1_entry exec_entry p1_entry
    CMD [“exec_cmd”, “p1_cmd”] exec_cmd p1_cmd /bin/sh -c exec_entry p1_entry exec_entry p1_entry exec_cmd p1_cmd
    CMD [“p1_cmd”, “p2_cmd”] p1_cmd p2_cmd /bin/sh -c exec_entry p1_entry exec_entry p1_entry p1_cmd p2_cmd
    CMD exec_cmd p1_cmd /bin/sh -c exec_cmd p1_cmd /bin/sh -c exec_entry p1_entry exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd
  • Kubernetes

    • 如果容器没有设置 command 和 args,则使用 docker 镜像自带的命令和参数
    • 如果容器设置了 command(不管有没有设置 args),则 docker 镜像自带命令和参数被忽略
    • 如果容器设置了 args,没有设置 command,则 docker 镜像自带的命令会使用该新参数

Docker 与 Kubernetes 中对应的字段名称。

描述 Docker 字段名称 Kubernetes 字段名称
容器执行的命令 Entrypoint command
传给命令的参数 Cmd args

参考:为容器设置启动时要执行的命令和参数


本文访问量

本站总访问量

本站总访客数