概要
Dockerfile
に記載するCMD
命令とdocker-compose.yml
に記載するcommand
の使い分けが曖昧で
自分なりに調べたのでメモとして残しておきます。
なお、Docker
について詳しく知りたい場合は下記公式ドキュメントを参照してください。
Docker公式ドキュメント
DockerfileのCMD命令とは
CMD
とはDockerfile
に記載できる命令のひとつです。docker run
でコンテナを起動した際に
コンテナで実行したいコマンドを記載することができます。
コード例
Dockerfile
FROM ruby:3.0.3
# 省略
CMD ['bundle', 'exec', 'rails', 's', '-p', '3000', '-b', '0.0.0.0']
これはrailsを起動し、外部からの通信を許可し3000番ポートで待ち受けるコマンドです。
docker-composeのcommandとは
command
はdocker-compose.yml
で記載でき、docker-compose up
でコンテナを起動した際に
実行したいコマンドを記載するところです。
コード例
docker-compose.yml
web:
# 省略
command: bundle exec rails s -p 3000 -b '0.0.0.0'"
疑問点
docker-compose
を使っているときは
docker-compose.yml
とDockerfile
どっちに実行コマンドを記載するのがいいのだろうか。
結論
docker-compose.yml
に記載すればいいです。
docker-compose.yml
に実行コマンドを記載した場合、Dockerfile
に記載されているCMD
は無視されます。
よって基本的にdocker-compose.yml
にすべて記載する方向で間違いないと思います。
まとめ
docker run
で個別のコンテナに対してコマンドを実行する場合は、Dockerfile
内にCMD
を記載して、
docker-compose
で複数のコンテナを管理している場合はdocker-compose.yml
に記載する。