9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dockerfileに記載するCMD命令とdocker-compose.ymlのcommandの使い分け

Posted at

概要

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とは

commanddocker-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.ymlDockerfileどっちに実行コマンドを記載するのがいいのだろうか。

結論

docker-compose.ymlに記載すればいいです。
docker-compose.ymlに実行コマンドを記載した場合、Dockerfileに記載されているCMDは無視されます。
よって基本的にdocker-compose.ymlにすべて記載する方向で間違いないと思います。

まとめ

docker runで個別のコンテナに対してコマンドを実行する場合は、Dockerfile内にCMDを記載して、
docker-composeで複数のコンテナを管理している場合はdocker-compose.ymlに記載する。

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?