9
1

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 構築Tips

Last updated at Posted at 2025-12-02

この記事はVR法人HIKKYのアドベントカレンダー3日目の記事です。

はじめに

世間では開発環境で Docker Composeを使いたい場合、
Dev Container を採用する場合が増えてきましたが、

VSCode の快適さを Jetbrains の IDE 等の環境で再現するのは難しく1
自前で Docker Compose 組んだほうが快適だったりします。

とはいえ、面倒なのは嫌なので、できるだけ楽をする Docker Compose 環境の構築についての勘所を紹介します。

本記事では、シンプルなRailsアプリケーションを想定して構成します。
基本を押さえれば、構成が複雑になっても、同じ考え方で展開できます。

Docker Compose

docker-compose.yml の構成で工夫するところは以下の2点です。

  • profiles の暗黙的呼び出しを使って楽をする
  • 参照を使って楽をする

profiles の暗黙的呼び出しを使って楽をする

Docker Compose の profiles、使ってますか?

特徴を端的に書くと以下の挙動をします。

  • profiles 無指定: docker compose up で自動的に起動するコンテナ
  • profiles 指定: docker compose --profile <PROFILE名> up で起動するコンテナ
  • profile が付いたサービス名を指定して走らせた時、profile はそのサービスのものになる
  • profiles 無指定 のサービスは profile 付きのサービスから depends_on で接続できる

用途ごとにprofileを定義しておけば、1つの docker-compose.yml にそれぞれの起動設定を書くことができ、それらが同時起動して競合しないようになっています。

参照を使って楽をする

YAMLの参照の構文を使い、記入量をできるだけ減らして楽をします。

  • &keyword : アンカー (参照元の定義)
  • <<: *keyword : エイリアス (参照)

docker-compose.yml の例

docker-compose.yml
x-vars:
  environment: &environment
    RAILS_ENV: development
    # 〜略〜 各種環境変数

services:
  app: &app
    container_name: app
    build:
      context: .
      dockerfile: ./.docker/rails/Dockerfile
    # 〜略〜 ネットワークやボリュームの設定など
    environment:
      <<: *environment
    depends_on:
      - db

  db:
    # 〜略〜 一般的なDBの構成

  console:
    <<: *app
    container_name: console
    command: bash -c "bundle exec rails c"
    stdin_open: true
    tty: true
    profiles:
      - console
    depends_on:
      - db

  test:
    <<: *app
    container_name: test
    environment:
      <<: *environment
      RAILS_ENV: test
      MYSQL_DATABASE: test
    profiles:
      - test
    depends_on:
      - db

このように書くと、例えばテストしたい場合、以下のコマンドで実行できます。

docker compose run --rm test

シェルスクリプトを使って後片付けを自動化する

docker compose コマンドを毎回打ってもいいですが、スクリプトを丁寧に書いて省力化してしまいましょう。

  • ビルド忘れ防止
  • コンテナを終了した後、関連サービスを自動Down

そんなひととおりワンストップでやってくれるシェル書いてしまいましょう。

dev-console.sh
docker compose --profile console build
docker compose run --rm console
EXIT_CODE=$?
docker compose --profile console rm -fsv db
exit $EXIT_CODE

$? の部分で終了コードを受け取って、コンテナ終了後に、関連のサービスを終わらせています。

さいごに

こんな構成で Docker Compose を構築すると、環境ごとにファイル分けたりしなくても、使いやすい環境を構築できるのではないでしょうか2

  1. Jetbrainsの Dev Container は約1GBの IDE Backend をリモートホストにダウンロードし、リモートで動かすので、リソースも挙動もめちゃめちゃ重い

  2. 実際のプロジェクトで使っているものは、他のサービスに抜けるためのローカルプロキシや、NoSQLやストレージサーバなども加わっているので、もう少し込み入ったものになります。

9
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?