概要
Dockerfileを書いていて、CMDとENTRYPOINTという命令があって、どっちもコマンドを実行できて、これなんやねんと思ったので雑まとめ。
CMD
単純にコマンドを実行できる。
ただし、docker run
時にコマンドを指定すると処理がうわがかれる。
たとえば以下のようなDockerfileがあったとする。
FROM centos CMD echo "CMD"
それを普通にdocker run
すればなんの問題もない。
echo "CMD"
が実行される。
$ sudo docker run 7bb22e4b8dbe CMD
ただしdocker run
のときにたとえば以下のように実行したとする。
$ sudo docker run 7bb22e4b8dbe echo "wawawa" wawawa
すると、Dockerfile内のCMDの記述が上書きされ、Dockerfile内で記載したecho "CMD"
は実行されない。
なぜならCMDはDockerfile内に一つしか宣言できないから。
ENTRYPOINT
コマンドを実行できる。
CMDとは違い、docker run
時にコマンドを指定しても処理がうわがきされない。
コンテナ実行時にかならず実行させたいものをここに記載する。
たとえば以下のようなDockerfileがあったとする。
FROM centos ENTRYPOINT echo "ENTRYPOINT"
docker run
のときにたとえば以下のように実行したとする。
CMDの場合はこれで処理が上書きされてしまっていたが
$ sudo docker run f74b3addb0bf echo "wawawa" ENTRYPOINT
ENTRYPOINTは上書きされない。
ちなみにENTRYPOINTもDockerfile内に一つしか宣言できない。
複数宣言した場合は最後のENTRYPOINTが有効になる。
- 作者: Adrian Mouat,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/08/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る