Day8:Docker Compose入門 前半
テーマ:複数コンテナを「1つのアプリ」として扱う感覚をつかむ
まずは、今日のキーワードである Docker Compose が何者なのかを、イメージからつかみにいきます。
DockerとComposeの役割の違いをイメージする
Docker 単体でやっていたことは、こんな感じです。
docker run ...でコンテナを1個ずつ起動する- Webサーバー用、DB用…とコマンドを分けて管理する
- ポート番号や環境変数を毎回コマンドに書く
これは「コンテナ1台ずつ手動で操作している」イメージです。
コンテナが2つ、3つと増えると、コマンドも設定も一気にカオスになります。
そこで登場するのが Docker Compose です。
Compose は一言でいうと、
「複数コンテナで構成されたアプリ全体を、1つの設定ファイルでまとめて管理する仕組み」
です。
あなたがやりたいのは「Web + DB構成」。
つまり、2つのコンテナで1つのアプリを作る ことです。
Compose はまさにそのための道具です。
docker-compose.yml という“設計図”を書く
設計図ファイルの名前
Compose では、通常プロジェクトのルートにdocker-compose.yml というファイルを置きます。
この1ファイルの中に、
- どんなコンテナを何個動かすか
- それぞれのコンテナはどのイメージを使うか
- どのポートを外に公開するか
といった情報を全部まとめて書きます。
今日の例はこれです。
version: "3"
services:
web:
build: .
ports:
- "3000:3000"
db:
image: mysql
YAML前半では、このファイルが「何を意味しているのか」を
ざっくりイメージできるところまで行きます。
version と services の“骨組み”を理解する
version: “3” は“書き方のバージョン”
version: "3" は、
「この Compose ファイルはバージョン3の書き方で書いているよ」
という宣言です。
ここは深く悩まなくて大丈夫です。
大事なのは、この下に services: が来る構造 だと覚えておくことです。
services: は「このアプリを構成するコンテナ一覧」
services: の下に並ぶものが、
このアプリを構成するコンテナたち です。
今回の例では、
services:
web:
...
db:
...
YAMLとあるので、
web コンテナ と db コンテナ の2つで1つのアプリを作る、
という宣言になっています。
ここでのポイントは、
「コンテナを“サービス”という単位で考える」
という感覚です。
webサービスの役割をイメージする
web は「自分のアプリが動くコンテナ」
web:
build: .
ports:
- "3000:3000"
YAMLweb はサービス名、つまり Webアプリ用コンテナの名前 です。
この中身をざっくり日本語にすると、こうなります。
build: .
→ 「このフォルダにある Dockerfile を使って、Webアプリ用のイメージをビルドしてね」ports: "3000:3000"
→ 「ホストの3000番ポートと、コンテナの3000番ポートをつないでね」
つまり、あなたが Day4 で作ったような
Node.js や Python のアプリを Docker 化して、
それをこの web サービスとして動かすイメージです。
ブラウザから見ると、http://localhost:3000 にアクセスすると
この web コンテナに届く、という構成になります。
dbサービスの役割をイメージする
db は「MySQLが動くコンテナ」
db:
image: mysql
YAMLdb は データベース用コンテナの名前 です。
image: mysql は、
「Docker Hub にある公式の mysql イメージを使ってコンテナを起動してね」
という意味です。
ここではまだ細かい設定(パスワードやボリューム)は書いていませんが、
“Webアプリとは別のコンテナとして MySQL を立ち上げる”
という構造ができています。
前半でつかんでほしいのは、
- Webアプリ用のコンテナ(web)
- DB用のコンテナ(db)
この2つを 1つのファイルでまとめて定義している という感覚です。
「複数コンテナ管理」の入り口の感覚
ここまでを、あえて感覚的にまとめるとこうです。
- これまでは「コンテナ1台=アプリ1つ」みたいに扱っていた
- 現実のWebアプリは「Web + DB」で1セットになることが多い
- Docker Compose を使うと、その「Web + DB」を
1つのdocker-compose.ymlにまとめて書ける - そして
docker compose upの一発で、
WebコンテナとDBコンテナを 同時に起動 できる
前半のゴールは、
「あ、Compose って“複数コンテナで1つのアプリを作るための設計図なんだな”
と腑に落ちることです。

