「Dockerを少し触ってみたけれど、コンテナを動かすたびにあの長い docker run コマンドを何度も打つの、正直面倒くさくないですか?」
「ポート番号やボリュームの設定を毎回忘れて、その都度ググり直している……」
「Webサーバーとデータベースを連携させたいけれど、設定が複雑で心が折れそう……」
基礎を学んだあとに多くの人がぶつかるのが、この「複数コンテナの管理がめんどくさい問題」です。
この記事は、そんな「長文コマンドの入力や環境構築の複雑さに消耗している初心者エンジニア・Web制作者」のあなたに向けて書きました。
今回紹介する Docker Compose(ドッカーコンポーズ) を使えば、そんな日々のストレスから完全に解放されます!
この記事を読み終えると
- 面倒な長文コマンドを毎回タイピングする苦痛から完全に解放される
- 設定ファイル(yml)の正しい書き方がわかり、エラーで挫折しなくなる
- ボタン一つを押す感覚(コマンド1行)で、WordPressとDBが連携した実践的な環境を3分で作れるようになる
- コンテナの片付けも一瞬で終わり、PCの作業環境をいつでも綺麗に保てるようになる
今回もコマンドはすべてそのままコピペで動きます。「私にもできた!」という感動を、ぜひ一緒に体験してスキルを1UPさせましょう!
まず押さえよう:Docker Composeって何?(長いコマンドを撲滅する仕組み)
これまでは、コンテナを1つ動かすたびに、以下のような長文コマンドを必死に打っていましたよね。
docker run -d -p 8080:80 -v 自身のフォルダ:コンテナのフォルダ ... [イメージ名]
もし、あなたが作りたいシステムに「Webサーバー」「データベース」「キャッシュサーバー」の3つのコンテナが必要だったとしたら、この長いコマンドを3回も間違えずに打たなければなりません。ポート番号やパスの設定をすべて記憶しておくのは、ハッキリ言って不可能です。
そこで登場するのが、あなたの救世主となる Docker Compose です。
Docker Composeとは、一言でいうと「複数のコンテナの設計図(設定)を1つのファイルにまとめて書き、たった1行のコマンドでまとめて同時に起動・停止させる仕組み」です。
よく「オーケストラの指揮者」に例えられます。
あなたが「演奏始めて!」と指示(コマンドを1行実行)を出すだけで、指揮者がタクトを振り、演奏者(各コンテナ)が一斉に正しいタイミングで音を奏で始める(起動して連携する)ようなイメージです。
これを使えば、どれだけコンテナが増えても、あなたが打つコマンドは常に1行だけで済むようになります。
【実践】WordPress(ブログ)とデータベースを同時に立ち上げる
今回は、実際の開発現場でもよくある「Webサーバー(WordPress)」と「データを保存するデータベース(MariaDB)」の2つのコンテナを、Docker Composeを使って同時に立ち上げ、自動的に連携させてみます。
「手動で2つのコンテナを繋ぐのは難しそう……」と思うかもしれませんが、心配いりません。指揮者(Docker Compose)に任せれば一瞬です。
Step 1: 新しい作業用フォルダを作る
まず、PC上のデスクトップに今回の作業用フォルダを作り、そこに移動します。
PowerShell(またはターミナル)を開いて、以下をコピペして実行してください。
# デスクトップに移動
cd ~/Desktop
# 新しいフォルダを作って中に入る
mkdir docker-compose-test
cd docker-compose-test
Step 2: 設定ファイル docker-compose.yml を作る
Docker Composeでは、Dockerfileではなく、docker-compose.yml という名前の設定ファイル(YAML形式)を使います。ここにすべてのコンテナの設定を書き溜めておきます。
PowerShellで以下のコマンドを使って、拡張子 .yml のファイルを新規作成しましょう。
# 新しいYAMLファイルを作成する
New-Item -Path . -Name "docker-compose.yml" -ItemType "file"
# メモ帳で開く
notepad docker-compose.yml
メモ帳が開いたら、以下の内容をそのまま丸ごとコピペして保存してください。
なお、YAML(ヤムル)ファイルは、「半角スペースのインデント(字下げ)」で親子関係を表すルールになっています。
もしスペースがズレていたり、タブ文字(Tabキー)が入っていたりすると、100%エラーになります。コピペした後は段落がズレていないか必ず確認してくださいね。
YAML
services:
# ① データベース用のコンテナ(名前はdb)
db:
image: mariadb:10.6
environment:
MARIADB_ROOT_PASSWORD: secretpassword
MARIADB_DATABASE: wordpress
# ② WordPress用のコンテナ(名前はwordpress)
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: secretpassword
WORDPRESS_DB_NAME: wordpress
💡 docker-compose.ymlの基本キーワード
ファイルに出てくる重要なキーワードの意味をまとめました。これらは今後の環境構築でも毎回使う定番のメニューです。
キーワード 役割 services:これから起動する「コンテナのグループ」を定義する宣言(この下に各コンテナの設定を書く) image:コンテナの土台(ベース)にするDockerイメージを指定する environment:コンテナの中に設定する「環境変数(設定値やパスワード)」を指定する ports:自分のPCとコンテナのポート(通信の窓口)を繋ぐ設定(ポートマッピング)
中身をさらに細かく紐解いていきましょう。このファイルでは 「①データベース(db)」 と 「②WordPress」 の2つのサービス(コンテナ)を定義しています。
① dbコンテナ(データベース)の設定
データを保存するための「MariaDB」というデータベースを起動する設定です。
- image: mariadb:10.6
データベースとして「MariaDBのバージョン10.6」を使うよう指定しています。 - MARIADB_ROOT_PASSWORD: secretpassword
データベースの最高管理者(rootユーザー)のパスワードを設定しています。今回は練習用として secretpassword にしています。 - MARIADB_DATABASE: wordpress
コンテナが起動した瞬間に、WordPress用のデータを保存するための箱(データベース)を wordpress という名前で自動作成する指示です。
② wordpressコンテナの設定
ブログを表示するための「WordPress」本体を起動し、先ほどのデータベースと連携させる設定です。
- image: wordpress:latest
常に最新版(latest)のWordPressイメージを使う指定です。 - ports: – “8080:80”
「自分のPCの8080番ポート」と「コンテナ内の80番ポート」を繋ぐ設定です。これにより、ブラウザで http://localhost:8080 にアクセスすると、コンテナの中のWordPress(通常80番で動いています)が表示されるようになります。 - WORDPRESS_DB_HOST: db
✨ ここがDocker Composeの1つのポイントです!
WordPressに対して「データベースはどこにある?」と教えてあげる設定ですが、IPアドレスなどを調べる必要はありません。先ほど①で決めたコンテナ名である db と書くだけで、Dockerが裏側で自動的に名前を解決して通信を繋いでくれます。 - WORDPRESS_DB_USER: root
データベースにログインする際のユーザー名(最高管理者の root)を指定しています。 - WORDPRESS_DB_PASSWORD: secretpassword
データベースにログインするためのパスワードです。①の db 側で設定したパスワードと同じものを指定してカギを開けます。 - WORDPRESS_DB_NAME: wordpress
使うデータベースの名前です。こちらも①で自動作成するように指示した名前(wordpress)と同じものを指定しています。
Step 3: 指揮者に指示を出す(一斉起動)
ファイルが保存できたら、PowerShellに戻って以下のコマンドを打ちます。
docker compose up -d
💡 「docker-compose」ではないの?
古い教材やネットの記事だと、ハイフン付きの docker-compose と書かれていることがありますが、現在のモダンな書き方はハイフンなしの docker compose です。今後はハイフンなしで覚えていきましょう!
コマンドを実行すると、Docker Composeが設定ファイルを読み込み、自動的に mariadb と wordpress のイメージをダウンロードして、2つのコンテナを裏側(-d オプション)で同時に起動してくれます。
Step 4: ブラウザで確認する
起動が完了したら、ブラウザを開いて以下のURLにアクセスしてみてください。
http://localhost:8080
WordPressの言語選択画面(「日本語」を選べる画面)が表示されれば大成功です!
裏側では、WordPressコンテナが自動的に db という名前のデータベースコンテナを見つけ出し、すでに通信を繋いでくれています。本来なら面倒なネットワークの接続設定も、Docker Composeが裏で自動的にやってくれているのです。
Step 5: 全員一斉に片付け(停止&削除)
Docker Composeの本当に凄いところは、片付けも一瞬で終わる点です。
開発が終わったら、以下のコマンドを実行してみましょう。
docker compose down
これで、動いていた2つのコンテナが同時に停止し、さらに自動で削除まで行われます。
これまで少し面倒くさかった「コンテナの停止」と「削除」の作業が、たった1行で完結します。
まとめ:今回覚えたコマンド一覧(これだけ覚えればOK!)
これからは、以下の3つのコマンドさえ手元に控えておけば、どんな複雑な環境も自由自在にコントロールできます。
| コマンド | 役割 |
| docker compose up -d | 今いるフォルダの docker-compose.yml を元に、すべてのコンテナをまとめて起動する |
| docker compose down | 起動しているすべてのコンテナをまとめて停止・削除する |
| docker compose ps | Composeで起動しているコンテナの状態だけを一覧表示する |
長いコマンドをメモ帳に貼り付けて何度も使い回す日々は、もう終わりです。
これからはファイルに設定を書いて up するだけ。開発効率が劇的にアップしたことを実感できたと思います。
演習問題:実践ハンズオンに挑戦!
今回は、本編で作ったWordPress環境に、データベースの中身をブラウザで簡単に見ることができる超便利ツール「Adminer(アドマイナ)」を3つ目のコンテナとして合流させてみます。
「1つのファイルで複数のコンテナをいくらでも増やせる」という、Docker Composeの本当の凄さを体感してみましょう!
今回のゴール
- docker-compose.yml に3つ目のコンテナの設定を正しく追加できること
- 3つのコンテナ(WordPress、DB、Adminer)を一斉に起動できること
- ブラウザからAdminerを使って、DBコンテナの内部にログインできること
🛠️ 問題(ステップ1〜3)
【STEP 1】設定ファイルに「Adminer」を追加する
本編で作成したデスクトップの docker-compose-test フォルダにある docker-compose.yml をメモ帳などで開いてください。
以下の条件(バトン)を満たすように、ファイルの1番下(wordpressコンテナの設定の下)に「adminer」のサービス設定を追加してください。
| 項目 | 設定内容 |
| サービス名 | adminer(字下げのレベルを db: や wordpress: と揃えてください) |
| 使うイメージ(image) | adminer:latest |
| ポート設定(ports) | 自分のPCの 8081 番ポートと、コンテナ内の 8080 番ポートを繋ぐ |
💡 ヒント:環境変数は不要!
Adminerコンテナは、起動した後にブラウザの画面からデータベースの情報を手動で入力してログインする仕組みのため、environment:(環境変数)の設定は今回は書かなくて大丈夫です。
【STEP 2】一斉起動してブラウザで確認する
ファイルを保存したら、PowerShellで一度おなじみの「あのコマンド」を実行し、追加したコンテナも含めて一斉起動(または更新起動)させてください。
起動後、ブラウザを開いて以下のURLにアクセスしてみましょう。
Plaintext
http://localhost:8081
ログイン画面(SystemやServerを入力する画面)が表示されれば、3つ目のコンテナの起動は見事大成功です!
【STEP 3】データベースにログインしてみる
表示されたAdminerのログイン画面に、本編の docker-compose.yml で設定した情報を以下のように入力して「ログイン」を押してください。
- System: MySQL(最初から選ばれています)
- Server: db(DBコンテナの名前です)
- Username: root
- Password: secretpassword
- Database: wordpress
以下のようにデータベースの内部が表示されれば、3つのコンテナが完璧に連携している証拠です!

演習問題の解答
上記の演習問題の解答は私のnoteの方で公開しておりますので、解答・解説を確認したい方はぜひ以下のリンクからご確認いただき、今回学んだ範囲の理解をさらに深めてください!


コメント