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

Docker Docker
スポンサーリンク

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"
YAML

web はサービス名、つまり 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
YAML

dbデータベース用コンテナの名前 です。

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つのアプリを作るための設計図なんだな”
と腑に落ちることです。

タイトルとURLをコピーしました