gotohayato.com

月(ダークモード)
太陽(ライトモード)

docker-compose up で一部のサービスを除外する方法

Docker

追記 2021/03/25: profiles を使った方法について追記しました。

Docker 小ネタで、 docker-compose up コマンドで一部のサービスを除外する方法についてです。 動作確認時点の Docker と Docker Compose のバージョンは次のとおりです。

  • docker: 19.03.5, build 633a0ea
  • docker-compose: 1.25.4, build 8d51620a

docker-compose.yml で定義されたサービスのうち一部を除外してサービスを起動する方法として、以下の 3 通りの方法があります。

  • 方法 A: docker-compose up の引数を使う
  • 方法 B: docker-compose up--scale オプションを使う
  • 方法 C: 設定ファイルで profiles を使う

方法 A: docker-compose up の引数を使う

これは次のようにして起動したいサービスを明示的にすべて指定する方法です:

# 起動したくないサービス以外をすべて引数で指定する
docker-compose up [service a] [service b] [service c] ...

この方法は起動したいサービスが 1 〜 2 つの場合はよいですが、除外したいサービスの方が少ない場合は少し不便な感じがします。

また、この方法の応用として、起動したいサービス名をファイルに記述しておいてその中身を展開して docker-compose up に渡すというアプローチもあります:

docker-compose up $(< services.txt)

方法 B: docker-compose up--scale オプションを使う

これは次のようにして --scale オプションを使って除外したいサービスの起動数を 0 にする方法です:

# `cli` というサービスを除外して他をすべて起動する
docker-compose up --scale cli=0

ただ、この方法はあまり直感的ではないので覚えづらく、あくまでも「次善の策」という感じです。

方法 C: 設定ファイルで profiles を使う

これは Docker Compose の設定ファイルで、通常起動しないサービスに profiles を付けておく方法です。

docker-compose.yml:

services:
db:
image: mariadb:10.5
adminer:
image: adminer:4-standalone
ports:
- "8080:8080"
profiles:
- extra

ここでは dbadminer という 2 つのサービスを定義していて、 adminer の方には profiles を設定しています。

こうしておくと、オプションを付けずにそのまま docker-compose up をした場合は adminer サービスは起動しません:

# `profiles` の設定されていないサービスだけが立ち上がる
# 上の場合は `db` のみ
docker-compose up -d

--profile オプションを付けて実行すると adminer も起動します:

# 以下の 2 種類のサービスが起動する:
# 1. `profiles` の設定されていないもの
# 2. `profiles` に `extra` が含まれるもの
docker-compose --profile extra up -d

--profile を付けて起動したものを停止・削除したいときは、同様に --profile をつければ OK です:

docker-compose --profile extra down

ということで、 --profile 使う場面がかぎられるサービスは profiles を付けて定義しておくのがよさそうです。

個人的には、 A の方法はあまり便利ではないので、 B と C をそのときどきで使い分けています。

参考:


後藤隼人 (ごとうはやと)

ウェブ制作・開発やマーケティング、プロジェクト支援などをしています。

GitHubPython

お知らせ

大阪大学医学部附属病院 高度救命救急センターさんが現在クラウドファンディングのプロジェクトをされています(後藤も少しだけ寄附させていただきました)。
© 2021 gotohayato.com
サイトについてタグアーカイブメッセージを送る