【コンテナ 2026 #4】Docker Compose

  • 実際にサービスを動かす場合には、一つのコンテナでは足りない場合がある
    • Webアプリ + データベース、など
  • 複数のコンテナを連携させるには、Docker Composeを使うのが簡単で一般的

Docker Composeとは

Image in a image block
  • Docker社の提供する、複数のコンテナを使う Docker アプリケーションを定義・実行するためのツール
  • compose.yaml という設定ファイルに、各コンテナをどのように立ち上げ、どのように連携するか記述する
  • docker compose upコマンドで設定ファイルで記述したとおりにコンテナが立ち上がり連携される

Docker Composeのメリット

  • 複数コンテナを立ち上げるのが簡単。コマンド一つで立ち上がる
  • データベースと連携したWebアプリの例を考えると、

Composeを使わない場合

  1. Docker ネットワークを作成する(docker network create
  2. Webアプリと DB のコンテナをそれぞれ作成したネットワーク内で起動する(docker run —network …

Composeを使う場合

  1. compose.yaml を作成する
  2. 立ち上げる(docker compose up

  • 実際には、コンテナへの環境変数の設定や、Docker ボリューム機能を利用したデータの永続化などによって、コマンドはこれよりもっと長く多くなる。そして、環境を立ち上げる度にそれを打たされることになる
  • Docker Composeであれば、それらの設定はすべて compose.yaml に記述できるため、コマンドは変わらず docker compose up 1つで済む

compose.yaml

services:
  app:
    build:
      context: ./
      dockerfile: Dockerfile.dev
    volumes:
      - ./Tool:/usr/src/app
      - /usr/src/app/node_modules 
    command: sh -c "npm start"
    ports:
      - 3000:3000
    tty: true
    stdin_open: true
    environment:
      - CHOKIDAR_USEPOLLING=true 
networks:
  default:
    ipam:
      config:
        - subnet: 192.168.210.0/24
services
  • 起動するコンテナをサービスとして定義する
    • 上記の compose.yamlでは、 app というサービスを定義している
  • 各サービスについて設定を記述していく
    • 利用するイメージや Dockerfile、コンテナに設定する環境変数など
    • docker container run コマンドや docker image build コマンドの引数・オプションを指定していくイメージが近い
networks
  • Docker ネットワークを定義する
  • なくてもいい。ない場合はデフォルトネットワークが作成され、定義した各サービスがそのネットワーク内に作成される
    • networks: default: でデフォルトネットワークの設定を変更できる

  • その他にも指定できる項目がいくつかあるが、今回は省略
⚠️
compose fileの最新仕様については現在、The Compose Specificationに記述されている。
その中で、以下のように述べられている。
The Compose file is a YAML file defining:

〜略〜

The default path for a Compose file is compose.yaml (preferred) or compose.yml that is placed in the working directory. Compose also supports docker-compose.yaml and docker-compose.yml for backwards compatibility of earlier versions. If both files exist, Compose prefers the canonical compose.yaml.
  • 古いプロジェクトだと設定ファイル名が docker-compose.yml となっていることがあるが、今は compose.yaml を使うのが良さそう
  • 古いものだとversionという項目があることがあるが、versionの記述は Optional になっているので必ずしも記述する必要はない

コマンドの説明

Command 説明
docker compose up サービス用のコンテナの構築、作成、起動、アタッチを行う
docker compose down コンテナを停止し、 upで作成したコンテナ・ネットワーク・ボリューム・イメージを削除する。デフォルトではコンテナとネットワークのみ削除する。
docker compose build compose.yamlから一連のコンテナを構築する
docker compose start コンテナを起動してサービスを開始する