本文へスキップ
BecomeCoder

Dockerコース · 第8章 本番運用の作法 · レッスン29

compose の総仕上げ ― volumes・networks・environment をまとめる

ブラウザで完結

導入

第5章で学んだ docker compose に、この章までのボリューム・ネットワーク・環境変数を組み込みます。「Web + DB + キャッシュ」のような本番構成を、1枚のファイルにすべて宣言できる——これが compose の真価です。長い docker run を何行も打つ代わりに、構成そのものをコードとして残せます。

説明

本番に近い compose ファイルは、こんな姿になります(読み解いてみましょう)。

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:            # ← 環境変数(第27)
      - DB_HOST=db
      - DB_PASSWORD=secret
    depends_on:             # ← db が立ち上がってから web を起動
      - db
    restart: always        # ← 再起動ポリシー(第28)
  db:
    image: postgres:16
    environment:
      - POSTGRES_PASSWORD=secret
    volumes:                # ← 名前付きボリューム(第6章)
      - dbdata:/var/lib/postgresql/data

volumes:                    # ← 使うボリュームの宣言
  dbdata:

この1枚に、これまで学んだ要素がすべて入っています。

flowchart TD
    F["docker-compose.yml(1枚)"] --> W["web: build・ports・env・restart"]
    F --> D["db: image・env・volume"]
    F --> V["volumes: dbdata(データ永続化)"]
    W -->|"depends_on"| D
    D --> V

compose の嬉しいところは、ネットワークを自動で用意し、全サービスをそこに繋いでくれること。だから第7章で学んだ「サービス名で通信」が、設定なしで最初から使えます。実際に起動して確かめましょう。

docker compose up -d
docker compose ps

起動時の出力に Network myapp_default Created と出ます。これが compose の作った専用ネットワークです。docker network ls にも現れます。

docker network ls

そして、web から他のサービスへサービス名で ping が通ります(第7章の埋め込み DNS が、compose では最初から効いている)。

docker exec myapp-web-1 ping cache
  • environment: … サービスに渡す環境変数(docker run -e に相当)。
  • depends_on: … 起動の順番(db の後に web)。
  • volumes:(サービス内)… ボリュームのマウント(docker run -v に相当)。トップレベルの volumes: で使う保管庫を宣言。
  • restart: … 再起動ポリシー(docker run --restart に相当)。

つまり compose は、この章までに手で打ってきた docker run の長いオプションを、まるごとファイルに宣言し直したもの。片付けも docker compose down の一発です(第5章)。

やってみよう

  • docker compose up -d を実行し、Network myapp_default Created と各コンテナStarted を確認しましょう。
  • docker network lsmyapp_default が増えていること、docker exec myapp-web-1 ping cache でサービス名の通信が通ることを見てください。
  • docker compose down で、コンテナもネットワークもまとめて片付きます。

実際に動かしてみよう

下の端末に docker コマンドを打って Enter を押すと、その場で結果が返ります。本文の手順を実際になぞりながら進めましょう(各レッスンは毎回まっさらな状態から始まり、「最初からやり直す」でいつでも戻せます)。

Docker(シミュレート)

ブラウザ内で docker コマンドを試せる学習用環境を読み込みます(本物のDockerではなく、動きを再現したものです)。
スクロールして表示された時点でも自動で読み込まれます。