このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Docker超入門:Docker Composeの仕組みと特徴を操作例で解説

Docker Composeの仕組みと特徴を操作例で解説

Docker Composeを使えば、複数のコンテナを1つのYAMLファイルでまとめて管理できます。
 Webサーバー、DBサーバーなどを一緒に起動したいときに、いちいち複数の docker run コマンドを叩く必要はありません。

この記事では、Composeの仕組みと特徴を、実際の操作例を交えてやさしく解説していきます。

作業前のクリーンアップ

まずは、環境をキレイにしておきましょう。
古いコンテナやイメージが残っていると、動作確認の際に混乱しやすくなります。

不要なDockerオブジェクトを削除する

コマンド

docker system prune -a

 このコマンドを実行すると、停止中のコンテナ・未使用のネットワーク・不要なイメージなどをまとめて削除します。
実行するときに確認メッセージが出るので、「y」と入力します。

実行結果

PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y

コマンドの書式とオプション

コマンド説明
docker system prune不要なDockerオブジェクトを削除する
-aすべての未使用イメージも削除するオプション

ポイント
作業前に一度だけ実行しておくと、後の動作確認がスムーズになります。

Docker Composeの特徴

Docker Composeは「複数コンテナをまとめて操作できる便利ツール」です。
YAMLファイルにコンテナの設定を書いておくことで、次のような操作が簡単になります👇

① サービス名で操作できる

Composeファイル(compose.yaml)では、各コンテナを「サービス」として定義します。
例えば、Webサーバーなら web、データベースなら db のように名前をつけます。

コマンド例

docker compose up web

これで「web」サービス(=webコンテナ)だけを起動できます。

サービス名を省略すると、YAMLに書かれたすべてのサービスが対象になります。
つまり、docker compose up だけでアプリ全体を一括で起動できるというわけです。

② プロジェクト名とコンテナ名の関係

Docker Composeでは、ディレクトリ名がそのままプロジェクト名になります。
そして、コンテナ名は「プロジェクト名+サービス名+番号」で構成されます。

例)
ディレクトリ名が webdb の場合

サービス名コンテナ名
webwebdb-web-1
dbwebdb-db-1

こうした命名ルールにより、複数のComposeプロジェクトを同時に動かしても名前が衝突しません。

実際に操作してみよう!

それでは、Nginx(Web)とMySQL(DB)の2つのサービスをComposeで動かしてみましょう。

 今回の例では、2つのサービスをCompose で同時に動かすことが目的のため、MySQL(DB)サービスはUPしませんし、ブラウザからWebサービスにアクセスはできませんのでご了承ください。

① 作業用ディレクトリを準備

PowerShellまたはターミナルで以下を実行します。

cd desktop/docker
mkdir webdb
cd webdb

この webdb フォルダがプロジェクト名になります。

実行結果

PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker> mkdir webdb

    Directory: C:\Users\joeac\Desktop\docker

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2025/10/05    13:02                webdb

PS C:\Users\joeac\Desktop\docker> cd webdb
PS C:\Users\joeac\Desktop\docker\webdb>

② VSCodeでcompose.yamlを作成

VSCodeを開いて、新しいファイルを作成します。

code compose.yaml

実行結果

PS C:\Users\joeac\Desktop\docker\apache> code compose.yaml

VSCodeが起動します。

内容は次の通りです。

version: '3'
services:
  web:
    image: nginx:latest
  db:
    image: mysql:latest

このファイルでは、

  • webサービス → Nginxコンテナ
  • dbサービス → MySQLコンテナ
    を定義しています。

コンテナを起動してみる

Composeファイルができたら、いよいよ起動です。

起動コマンド

docker compose up -d

-d は「デタッチドモード(バックグラウンド実行)」の意味です。

オプション説明
-dターミナルをブロックせずにコンテナをバックグラウンドで実行する

実行結果(抜粋)

PS C:\Users\joeac\Desktop\docker\webdb> docker compose up -d
(省略)
[+] Running 3/3
 ✔ Network webdb_default  Created
 ✔ Container webdb-web-1  Started
 ✔ Container webdb-db-1   Started
(省略)

ここで webdb-web-1webdb-db-1 が作成されました。
これが、プロジェクト名とサービス名が組み合わさったコンテナ名です。

コンテナの確認

docker container ls -a

実行結果

PS C:\Users\joeac\Desktop\docker\webdb> docker container ls -a
CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS                     PORTS     NAMES
a84eacc4cdb1   mysql:latest   "docker-entrypoint.s…"   7 seconds ago   Exited (1) 4 seconds ago             webdb-db-1
ea435bf786ee   nginx:latest   "/docker-entrypoint.…"   7 seconds ago   Up 5 seconds               80/tcp    webdb-web-1

ポイント:
Composeでは、コンテナを個別に管理する必要がなく、
「プロジェクト全体をひとまとめ」で扱えます。

Docker Desktopでの確認

Docker Desktopを開くと、
Containersタブ に「webdb」というプロジェクトが表示され、

その中に2つのコンテナ(dbとweb)が含まれています。

同様に、Imagesタブ では
Composeファイルで指定したイメージ(nginxとmysql)が確認できます。

Webブラウザで確認

ついでに、Webブラウザで確認してみます。

・Webブラウザを起動して、URLに「localhost」と入力します。

 今回は、ホストとコンテナのポート番号の紐づけを行っていないため、nginxの初期ページは表示されません。

コンテナの停止

Composeでは、停止も一括です!

docker compose stop

実行結果

PS C:\Users\joeac\Desktop\docker\webdb> docker compose stop
(省略)
[+] Stopping 2/2
 ✔ Container webdb-db-1   Stopped                                                                                                       0.0s
 ✔ Container webdb-web-1  Stopped

docker container stop のように個別指定する必要はありません。
Composeが全体をまとめて制御してくれます。

まとめ

Docker Composeを使えば、複数コンテナの管理が圧倒的にシンプルになります。

  • docker system prune -a で環境を整理してから作業する。
  • Composeでは サービス名 でコンテナを制御できる。
  • プロジェクト名 はディレクトリ名から自動決定
  • docker compose up -d で一括起動
  • docker compose stop で一括停止

これで、Composeの基本的な仕組みと操作の流れがしっかりつかめたはずです!