🪣
DockerにおけるENTRYPOINTとCMDの関係と上書き方法
Dockerにおけるエンドポイント(ENTRYPOINT)とコマンド(CMD)は、コンテナの実行方法を定義するための指示ですが、それぞれ異なる役割を持っています。
ENTRYPOINT
-
ENTRYPOINTはコンテナが実行する主なプロセスを定義します。 - 常に実行されるプロセスを指定するために使用されることが多く、指定されたコマンドはコンテナが起動するときに必ず実行されます。
-
ENTRYPOINTは配列形式または文字列形式の2つの形式で指定できます。- 配列形式:
ENTRYPOINT ["executable", "param1", "param2"] - 文字列形式:
ENTRYPOINT command param1 param2
- 配列形式:
- コンテナが実行される際に引数を渡すことができ、これにより柔軟なコンテナの起動が可能です。
CMD
-
CMDはデフォルトで実行されるコマンドまたは引数を指定します。 -
CMDはコンテナ起動時にオーバーライドされることが多く、主にデフォルト値として機能します。 -
CMDも配列形式または文字列形式で指定できます。 -
ENTRYPOINTが指定されている場合、CMDはその引数として渡されます。
上書きの方法
-
ENTRYPOINTやCMDを上書きするためには、Dockerのdocker runコマンドにオプションを追加して実行します。 -
ENTRYPOINTを上書きする場合:docker run --entrypoint [new_executable] [image_name] [args] -
CMDを上書きする場合:docker run [image_name] [new_command] [args]
例
例えば、以下のDockerfileがあるとします。
FROM ubuntu
ENTRYPOINT ["echo"]
CMD ["Hello, World!"]
このDockerfileでビルドしたイメージを実行すると、出力は Hello, World! になります。
CMDを上書きする例:
docker run [image_name] "Goodbye, World!"
上記のコマンドを実行すると、出力は Goodbye, World! になります。
ENTRYPOINTを上書きする例:
docker run --entrypoint ["ls"] [image_name]
上記のコマンドでは、コンテナ内で ls コマンドが実行され、そのリストが表示されます。
まとめ
-
ENTRYPOINTはコンテナのメインプロセスを定義し、常に実行されます。 -
CMDはデフォルトの引数やコマンドを指定し、必要に応じてオーバーライドされます。 - どちらも
docker runコマンドでオーバーライド可能です。
Discussion