8
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?

docker compose up する時に特定のサービスを起動させないようにする方法3選

8
Last updated at Posted at 2026-04-27

はじめに

例として、ローカル開発環境でdocker-compose.ymlを以下のように定義しているとしましょう。

docker-compose.yml
services:
  db:
    ...
  web:
    ...
  app:
    ...
  scheduler:
    ...

この内schedulerサービスはバッチ処理用のサービスで、ローカル開発時に起動させたくないものと考えてください。しかし、docker compose upして各種サービスを起動しようとすると、定義してあるすべてのサービスが起動してしまいます。

このように「特定のサービス(今回でいうとschedulerサービス)のみ、起動させたくない」といった場合、様々な手段がありそうですが、今回は3選に絞って紹介いたします。おすすめは後述する方法3の「profilesを利用する」になります。

また、本記事の内容は、特定のサービスに関して普段は起動させたくないが、使う時もあるからその時は何かコマンドで明示的に指定することで起動できるようにしておきたい!といったユースケースに対応する方法となります。

方法1 docker-compose.ymlを分ける

まず、docker compose up時に起動させたくないサービスを除外したdocker-compose.ymlを準備します。

docker-compose.yml
services:
  db:
    ...
  web:
    ...
  app:
    ...

次に、普段は起動させたくないけど必要になったら起動したいサービス(schedulerサービス)を定義に含めたdocker-compose-all.ymlを準備します。

docker-compose-all.yml
services:
  db:
    ...
  web:
    ...
  app:
    ...
  scheduler:
    ...

これで、普段はschedulerサービスを除いたサービス群を起動したい場合はdocker compose upする形となり、schedulerサービスを含めてサービスを起動させたい場合は、docker compose -f docker-compose-all.yml upのように起動させてあげればOKになります。

方法1の所感

ただし、こちらの方法はファイルを分けたことで、なんらかの修正が発生した際に、2ファイルの修正が必要になったりする点と、docker-compose-all.ymlの方が忘れ去られて修正漏れが発生したりと運用・管理面で微妙でした。

方法2 Makefileを利用する

次にMakefileを利用した方法を紹介します。
以下のようなMakefileを準備してdocker-compose.ymlと同階層に配置します。

Makefile
up:
	docker compose up -d db web app
up-all:
	docker compose up -d db web app scheduler

このようにMakefileを活用することで
普段schedulerサービスを使いたくない場合は、make upを実行してschedulerサービスを除いたサービス群を起動させます。また、schedulerサービスを利用したい場合は、make up-allを実行して対応することができます。

方法2の所感

こちらも管理するファイルが1つ増えるため、docker-compose.ymlにサービスを追加したりした際に、Makefileも修正が必要になることが多々あり、ちょっと微妙な感じがしました。
また、Makefileを利用した形に寄せようとすると、必然的にdocker compose builddocker compose stopdocker compose execdocker compose down用の定義がいるよねとなり、結果的に定義する内容が意外と多くなってしまう印象です。

方法3 profilesを利用する(おすすめ)

まず、以下のようにprofilesを追加します。

docker-compose.yml
services:
  db:
    ...
  web:
    ...
  app:
    ...
  scheduler:
    profiles: ["scheduler"]# ←ここを追加するだけ!
    ...

profiles:を追加することで、docker compose up時などに当該サービスが起動対象から除外されます。これはbuild時も同様に対象から除外されます。
逆にschedulerサービスを起動したい場合は、profiles: ["ラベル名"]とありますが、ラベル名の部分を利用して、docker compose --profile ラベル名 upとすればprofilesを設定しているサービスを含めて起動させることが可能です。

そのため、普段はdocker compose upを行ってprofilesを設定したサービス(schedulerサービス)を起動させずに各種サービス群を起動して利用することができますし、何か特別な事情でschedulerサービスを利用したい場合は、docker compose --profile scheduler upとすればschedulerサービスを含めたすべてのサービスを起動させることができるようになります。

方法3の所感

管理するファイルを増やすことなく、make hogeといった別途コマンドを把握・管理する必要もなく、仮に使いたい時も--profileを指定してビルドや起動を行えば良いので、この方法が一番おすすめでした。

profilesに関する補足

今回は特に問題ありませんが、depends_onで指定されたサービスに対してprofilesを設定した場合は、同じprofilesを依存関係にあるサービスにも設定する必要が発生する点を押さえておきましょう。詳細はこちら

最後に

profiles便利ですね、最後まで見ていただきありがとうございます!

8
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
8
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?