240
241

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

フューチャーAdvent Calendar 2022

Day 10

個人的docker composeおすすめtips6選

Last updated at Posted at 2022-12-23

(2024/06/21追記)
本記事のアップデート版を弊社技術ブログに投稿しました
Tipsの追加に加え、既存Tipsの内容も更新していますので、よろしければご確認ください。

はじめに

皆さん、docker composeを利用しているでしょうか?
複数のdockerコンテナをまとめて立ち上げたり、環境変数を定義できたり便利ですよね。
今回はある程度docker composeを利用している方向けに私が便利、便利そうと感じたdocker composeの機能を挙げてみました。

docker compose cli v2を利用

docker-composeではなく docker composeコマンドも利用可能になってます。
Docker Desktopでは v3.4.0から利用可能で、基本的にはコマンドの互換性あります。

Docker image名やコンテナ名のプレフィックスをディレクトリ名から変更する

通常は ${ディレクトリ名}_${サービス名}でイメージが作成されます。
環境変数COMPOSE_PROJECT_NAMEでプロジェクト名を指定することにより
${プロジェクト名}_${サービス名}にイメージ名を変更可能です。
個人的なおすすめはdocker-compose.yamlと同一ディレクトリに .envファイルに追加することです。

  • 例: sample_${サービス名}でイメージを作成したい場合
.env
COMPOSE_PROJECT_NAME=sample

--project ${プロジェクト名}を指定することによりコマンドライン引数でも指定可能です。

docker compose build --project ${project}

ヘルスチェックの設定

Dockerfileでも指定できますが、docker-compose.ymlでも指定可能です。
コンテナに対しコマンドを実行し終了コードなどによりヘルスチェックができます。
ヘルスチェックを利用することで依存関係の設定、サービス完了まで待機でサービスが healthyになるまで待機することが可能です。

docker-compose.yml
healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 1m30s
  timeout: 10s
  retries: 3
  start_period: 40s

依存関係の設定

以前はコンテナの依存関係しか指定できませんでしたが、docker compose2.1からサービスがhealthyになった後に起動する、正常終了したあとに実行するなど、より高度な依存関係を定義できるようになりました
使用可能な条件は以下

  • service_started: 依存するサービス開始まで待機。(ステータスは問わない)
  • service_healthy: 依存するサービスが healthyになるまで待機
  • service_completed_successfully: 依存するサービスが正常終了するまで待機
docker-compose.yml
version: "2.4"
services:
  web:
    build: .
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
  redis:
    image: redis
  db:
    image: postgres
    healthcheck:
      test: "exit 0"

サービス完了まで待機

docker compose up--waitオプションを利用することで、ヘルスチェックが設定されたサービスが定常状態になるまで待機することが可能です。
(執筆時点では--waitオプションはドキュメントに記載されていませんが)
以前はワンショットのサービスには --waitが効かないバグがありましたがv2.7.0で修正されたようです。

サービスをグループ化

profilesという機能を利用し、複数のサービスをまとめて起動・終了などをすることが可能です。
以前からdepends_onで依存関係を指定することで依存したサービスをまとめて立ち上げることができていましたが、profilesによって依存関係がないサービスもまとめて立ち上げることが可能になりました。

docker-compose.yml
version: "3.9"
services:
  web:
    image: web

  mock-backend:
    image: backend
    profiles: ["dev"]
    depends_on:
      - db

  db:
    image: mysql
    profiles: ["dev"]

  phpmyadmin:
    image: phpmyadmin
    profiles: ["debug"]
    depends_on:
      - db
docker compose --profile dev up

おわりに

本記事により皆さまのdocker composeライフが少しでも豊かなものになれば幸いです。

240
241
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
240
241

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?