次のようなdocker-compose.ymlを考える
services: mysql: image: mysql:8.0.30 restart: always volumes: - mysql_data:/var/lib/mysql mysql-cli: image: mysql:8.0.30 volumes: - ./docker/mysql:/opt/mysql working_dir: /opt/mysql command: ["mysql", "--defaults-extra-file=/opt/mysql/client-extra.conf", "db_name"]
docker compose up
でmysqlは起動してほしいが、mysql-cliは起動してほしくない。実際のところupでmysql-cliが起動しても即座に終了するため問題はないのだが気分はよろしくない
このような場合はprofilesを使うと起動対象から除外できる
services: mysql: image: mysql:8 restart: always volumes: - mysql_data:/var/lib/mysql mysql-cli: image: mysql:8 volumes: - ./docker/mysql:/opt/mysql working_dir: /opt/mysql command: ["mysql", "--defaults-extra-file=/opt/mysql/client-extra.conf", "db_name"] profiles: - one-off
profileの名前はなんでもいいが、not-service
とか one-off
等にしておくと分かりやすいだろう
こうして docker compose up
を実行するとmysqlは起動するがmysql-cliは起動しなくなる。mysql-cliを使うときは普通にrunで起動する。runはprofileに影響されない
docker compose run --rm mysql-cli
profilesは本来、環境ごとに起動するコンテナを変えるためのオプション。例えば本番環境ではauroraに接続するのでmysqlを使わない、phpMyAdminはローカル開発環境以外では起動して欲しくない、といったケースで用いるものらしい。
詳細は公式ドキュメントを参照されたい