Docker | 2週間で実務レベルに到達するDocker学習:Docker Compose入門 - Day8

Docker Docker
スポンサーリンク

Day8:Docker Compose入門 後半

テーマ:Compose を“実務レベル”で使いこなし、Web + DB の本格的な開発環境を構築できるようになる

後半では、前半・中盤で理解した
「複数コンテナをまとめる」「サービス名で通信できる」
という基礎をさらに深掘りし、実務で必須となる

  • Web + DB の本格構成
  • 永続化(データが消えない仕組み)
  • 環境変数の管理
  • Compose の便利機能

を、初心者でも迷わず理解できるように解説します。

ここを理解すると、あなたは
「Compose を使って本物の Web アプリ環境を構築できるエンジニア」
になります。


Web + DB を“実務レベル”に近づけるための Compose

まずは完成形のイメージ

以下は、実務でよく使われる Web + DB 構成の基本形です。

version: "3"

services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      DB_HOST: db
      DB_USER: root
      DB_PASSWORD: password
      DB_NAME: myapp

  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: myapp
    volumes:
      - dbdata:/var/lib/mysql

volumes:
  dbdata:
JavaScript

後半では、この構成の意味を1つずつ深掘りしていきます。


DB のデータを“永続化”する理由

コンテナは消えるが、データは消えてはいけない

MySQL コンテナは削除すると中のデータも消えます。
しかし、アプリのユーザー情報や商品データが消えたら困ります。

そこで使うのが ボリューム(volume) です。

volumes:
  - dbdata:/var/lib/mysql
JavaScript

これは
「MySQL のデータを dbdata という外部ストレージに保存する」
という意味です。

重要ポイント

  • コンテナを削除しても dbdata は残る
  • 新しい DB コンテナを作っても同じデータを使える
  • 本番環境では必須の設定

Compose を使うと、永続化も YAML に書くだけで完了します。


Web と DB の設定を“環境変数”で管理する

Web コンテナに DB 情報を渡す

environment:
  DB_HOST: db
  DB_USER: root
  DB_PASSWORD: password
  DB_NAME: myapp
JavaScript

Web アプリはこれを process.env.DB_HOST のように読み取ります。

DB コンテナ側の設定

environment:
  MYSQL_ROOT_PASSWORD: password
  MYSQL_DATABASE: myapp
JavaScript

MySQL は環境変数で初期設定ができます。

重要ポイント

  • Web と DB の設定はすべて環境変数で管理
  • コードにパスワードを書かない
  • 開発・本番で設定を切り替えやすい

Day9 の内容とつながる部分です。


depends_on で“起動順”を制御する

Web は DB が起動してから動くべき

Compose では次のように書きます。

depends_on:
  - db
JavaScript

これにより、
db → web の順で起動 します。

ただし深掘りポイント

depends_on は「起動順」を保証するだけで、
「DB が完全に準備できたか」は保証しません。

実務では healthcheck を使いますが、
Day8 の段階ではここまで理解できれば十分です。


Compose の“便利すぎる”操作方法

一括起動

docker compose up

一括停止

docker compose down

Web のログだけ見る

docker compose logs web

DB のログだけ見る

docker compose logs db

Web コンテナに入る

docker compose exec web sh

DB コンテナに入る

docker compose exec db sh

Compose を使うと、
複数コンテナを1つのアプリとして扱える
という感覚が一気に強まります。


Web + DB の“実務レベルの動作イメージ”

docker compose up の裏側で起きていること

あなたが docker compose up を実行すると、Compose は次のことを自動で行います。

  1. Web 用 Dockerfile をビルド
  2. MySQL イメージを取得
  3. 専用ネットワークを作成
  4. DB コンテナを起動
  5. Web コンテナを起動
  6. Web が DB に接続できるようにする
  7. DB のデータをボリュームに保存

あなたは 1コマンド しか打っていませんが、
Compose は裏側で 7つ以上の作業 を自動化しています。

これが Compose の本当の価値です。


後半まとめ

あなたがここまで理解できていれば、Day8 のゴールは完全達成です。

  • Web + DB の本格構成を Compose で作れる
  • DB のデータはボリュームで永続化する
  • Web と DB の設定は環境変数で管理する
  • depends_on で起動順を制御できる
  • Compose は複数コンテナを“1つのアプリ”として扱える
  • docker compose up で Web + DB が一括起動する
タイトルとURLをコピーしました