Docker CMD ENTRYPOING 和Kubernetes command args對比

Docker CMD ENTRYPOING 和Kubernetes command args對比

exec 模式

使用 exec 模式時,容器中的任務進程就是容器內的 1 號進程docker

shell 模式

使用 shell 模式時,docker 會以 /bin/sh -c "task command" 的方式執行任務命令。也就是說容器中的 1 號進程不是任務進程而是 bash 進程shell

CMD 指令

CMD 指令的目的是:爲容器提供默認的執行命令。bash

CMD 指令有三種使用方式,其中的一種是爲 ENTRYPOINT 提供默認的參數:app

?.net

CMD [param1","param2"]

另外兩種使用方式分別是 exec 模式和 shell 模式:命令行

?設計

CMD ["executable","param1","param2"] // 這是 exec 模式的寫法,注意須要使用雙引號。CMD command param1 param2 // 這是 shell 模式的寫法。`

注意命令行參數能夠覆蓋 CMD 指令的設置,可是隻能是重寫,卻不能給 CMD 中的命令經過命令行傳遞參數。
通常的鏡像都會提供容器啓動時的默認命令,可是有些場景中用戶並不想執行默認的命令。用戶能夠經過命令行參數的方式覆蓋 CMD 指令提供的默認命令。code

ENTRYPOINT 指令

ENTRYPOINT 指令的目的也是爲容器指定默認執行的任務。htm

ENTRYPOINT 指令有兩種使用方式,就是咱們前面介紹的 exec 模式和 shell 模式進程

ENTRYPOINT ["executable", "param1", "param2"] // 這是 exec 模式的寫法,注意須要使用雙引號。ENTRYPOINT command param1 param2 // 這是 shell 模式的寫法。

exec 模式和 shell 模式的基本用法和 CMD 指令是同樣的,下面咱們介紹一些比較特殊的用法。

指定 ENTRYPOINT 指令爲 exec 模式時,命令行上指定的參數會做爲參數添加到 ENTRYPOINT 指定命令的參數列表中。
指定 ENTRYPOINT 指令爲 shell 模式時,會徹底忽略命令行參數

同時使用 CMD 和 ENTRYPOINT 的狀況

對於 CMD 和 ENTRYPOINT 的設計而言,多數狀況下它們應該是單獨使用的。固然,有一個例外是 CMD 爲 ENTRYPOINT 提供默認的可選參數。

咱們大概能夠總結出下面幾條規律:

• 若是 ENTRYPOINT 使用了 shell 模式,CMD 指令會被忽略。

• 若是 ENTRYPOINT 使用了 exec 模式,CMD 指定的內容被追加爲 ENTRYPOINT 指定命令的參數。

• 若是 ENTRYPOINT 使用了 exec 模式,CMD 也應該使用 exec 模式。

k8s command,args參數

注意

下表給出了Docker 與 Kubernetes中對應的字段名稱。

Description Docker field name Kubernetes field name
The command run by the container Entrypoint command
The arguments passed to the command Cmd args

若是要覆蓋默認的Entrypoint 與 Cmd,須要遵循以下規則:

  • 若是在容器配置中沒有設置command 或者 args,那麼將使用Docker鏡像自帶的命 令及其入參。
  • 若是在容器配置中只設置了command可是沒有設置args,那麼容器啓動時只會執行該 命令,Docker鏡像中自帶的命令及其入參會被忽略。
  • 若是在容器配置中只設置了args,那麼Docker鏡像中自帶的命令會使用該新入參做爲 其執行時的入參。
  • 若是在容器配置中同時設置了commandargs,那麼Docker鏡像中自帶的命令及 其入參會被忽略。容器啓動時只會執行配置中設置的命令,並使用配置中設置的入參做爲 命令的入參。

下表涵蓋了各種設置場景:

Image Entrypoint Image Cmd Container command Container args Command run
[/ep-1] [foo bar] [ep-1 foo bar]
[/ep-1] [foo bar] [/ep-2] [ep-2]
[/ep-1] [foo bar] [zoo boo] [ep-1 zoo boo]
[/ep-1] [foo bar] [/ep-2] [zoo boo] [ep-2 zoo boo]

官方文檔 傳送門

相關文章
相關標籤/搜索