このページで解説している内容は、以下の 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 の場合
| サービス名 | コンテナ名 |
|---|---|
| web | webdb-web-1 |
| db | webdb-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.yamlVSCodeが起動します。

内容は次の通りです。
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-1 と webdb-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 Stoppeddocker container stop のように個別指定する必要はありません。
Composeが全体をまとめて制御してくれます。
まとめ
Docker Composeを使えば、複数コンテナの管理が圧倒的にシンプルになります。
docker system prune -aで環境を整理してから作業する。- Composeでは サービス名 でコンテナを制御できる。
- プロジェクト名 はディレクトリ名から自動決定
docker compose up -dで一括起動docker compose stopで一括停止
これで、Composeの基本的な仕組みと操作の流れがしっかりつかめたはずです!
