🙄
docker CMD VS ENTRYPOINT
ENTRYPOINT
- コンテナが起動するときに必ず実行するコマンド、常に実行したいプログラムがあるときに使います。
- 例えば、作ったアプリがmyappという名前の実行ファイルであれば、以下のように書くことができます。
- ENTRYPOINT ["myapp"]
- これで、コンテナが起動するとmyappが自動的に実行されます。
CMD
- ENTRYPOINTに追加の引数を提供するか、ENTRYPOINTが指定されていない場合はコンテナが実行するデフォルトのコマンドです。
- もしmyappが追加の引数(例えば-d)を必要とする場合、CMDを以下のように使います。
- CMD ["-d"]
- これをENTRYPOINTと組み合わせると、コンテナが起動するとmyapp -dというコマンドが実行されます。
まとめ
- myappというアプリを作り、それをデフォルトでデバッグモード(-dオプションで指定)で実行したいとします。
- ENTRYPOINT ["myapp"]
CMD ["-d"] - この設定により、コンテナが起動すると自動的にmyapp -dが実行されますが、docker runコマンドで異なる引数(例えば-p)を指定した場合は上書きされます。
- docker run mycontainer -p
- この場合、myapp -pが実行されます。
Discussion