前の記事でDockerfileを使った1つのイメージ作りを学びました。しかし実際のWebアプリは、Webサーバー・アプリサーバー・データベースなど複数のコンテナが連携して動くことがほとんどです。Docker Composeはこれらを1つのYAMLファイルとコマンド1つでまとめて管理するツールです。
Docker Composeがないとどうなる?
Docker Composeがない場合、データベースとWebサーバーの2つのコンテナを起動するには、お互いのコマンドを複数回実行し、ネットワーク設定も手動で行う必要があります。Docker Composeを使うと、これらの設定を全てdocker-compose.ymlファイルに書いておけば、docker compose upの一発で完了します。
docker-compose.ymlの基本構造
YAMLファイルはインデント(スペースによる山括り)で構造を表現します。タブではなく必ずスペース2つでインデントしてください(YAMLの基本です)。
services:
サービス名1:
image: 使うイメージ
ports:
- "ホストポート:コンテナポート"
サービス名2:
image: 使うイメージ
environment:
- KEY=VALUE
実践例:WordPress + MySQLを起動する
具体的な例として、WordPresstoMySQLをDocker Composeで起動してみます。作業用ディレクトリを作成しdocker-compose.ymlを作成します。
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
volumes:
- db_data:/var/lib/mysql
restart: always
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppassword
depends_on:
- db
restart: always
volumes:
db_data:
各設定の意味を説明します。
- image:使用するイメージ名。Docker Hubから自動でダウンロードされます
- environment:コンテナに渡す環境変数。パスワードなどの設定値を渡すことができます
- ports:「ホストのポート:コンテナのポート」の形式。
8080:80は「http://localhost:8080でコンテナの80ポートにアクセス」という意味 - volumes:データをコンテナの外に保存する設定(詳しくは次の記事で)
- depends_on:依存順序の指定。
dbが起動してからwordpressを起動する
起動・停止・確認のコマンド
| コマンド | 何をするか |
|---|---|
docker compose up | 全コンテナを起動(フォアグラウンド) |
docker compose up -d | バックグラウンドで起動(実務でよく使う) |
docker compose down | 全コンテナを停止・削除 |
docker compose ps | コンテナの状態を確認 |
docker compose logs | 全コンテナのログを表示 |
docker compose logs -f | リアルタイムでログを表示 |
docker compose exec db bash | dbコンテナに入って操作 |
docker compose up --build | イメージを再ビルドして起動 |
つまずきやすいポイント
YAMLのインデントエラー
YAMLはインデント(山括り)のミスでエラーになることが多いです。必ずスペース2つでインデントし、タブキーは使わないようにしてください。エラーメッセージにyaml: line XX: ...と出たらその行のインデントを確認してください。
portがコンフリクトする
Bind for 0.0.0.0:8080 failed: port is already allocatedと出る場合、ホストの8080ポートが別のプロセスに占有されています。docker-compose.ymlのportsの最初の数字(ホスト側)を別の番号(例:8181:80)に変更してください。
まとめ
- Docker Composeは複数コンテナをYAMLで定義しコマンド1つで管理するツール
docker compose up -dでバックグラウンド起動、docker compose downで停止- YAMLはスペーサ2つインデントが基本。タブは使わない
depends_onでコンテナの起動順序を制御できる
次の記事ではボリュームとネットワークを学びます。データをコンテナ削除後も残す方法と、コンテナ同士が通信する仕組みを理解しましょう。



コメント