Docker超入門:Docker Composeの定義方法:ファイル作成からコンテナ実行までの手順

Docker Composeは、複数のコンテナをまとめて定義・起動・管理 できる便利なツールです。
 通常の docker run コマンドでは、コンテナごとに長いオプションを打ち込む必要がありますが、Composeを使えば たった1つの設定ファイル(compose.yaml) にまとめて記述できるんです。

 ここでは、「Docker Composeファイルの作成からコンテナの実行まで」 の流れを、わかりやすくステップ形式で紹介していきます。

手順1:作成するコンテナの定義に必要な情報を整理する

まずは、どんなコンテナを作るのか整理しましょう。
Composeファイルでは、次のような情報を定義します。

項目説明
イメージ名どのDockerイメージを使うか(例:nginx、mysql、redisなど)
ポートマッピングホストとコンテナ間のポートの対応(例:80:80)
ボリューム永続化したいデータの保存場所(例:dbdata:/var/lib/mysql)
環境変数コンテナ内で使用する設定値(例:MYSQL_ROOT_PASSWORDなど)
ネットワーク設定コンテナ間通信の設定(例:同一ネットワーク内で連携)

この整理をしておくことで、後からYAMLファイルを書くときにスムーズに定義できます。

💡 ポイント
もし複数のコンテナを連携させるなら、
「どのコンテナがどのサービスに依存しているか」も考慮しておきましょう。

手順2:Docker Composeファイルを作成する

次に、整理した情報をもとにComposeファイルを作成します。
ファイル名は一般的に次のどちらかです。

  • docker-compose.yml(従来の形式)
  • docker-compose.yaml(現在の推奨形式)

たとえば、NginxとMySQLを一緒に起動する例はこんな感じ👇

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: sampledb

このファイルでは、

  • webサービス:Nginxのイメージを使用してポート8080を公開
  • dbサービス:MySQLを使用してデータベースを作成
    という2つのコンテナをまとめて定義しています。
要素説明
versionComposeファイルのバージョン(例:3.8)を指定
services管理するコンテナ群をまとめるセクション
web / db各コンテナのサービス名。任意でOK
image使用するDockerイメージを指定
portsホストとコンテナのポートマッピング
environment環境変数を定義してアプリ設定を行う

もし独自のアプリをビルドしたい場合は、image: の代わりに build: を使い、
同ディレクトリ内の Dockerfile を参照するように設定します。

手順3:コンテナを作成・実行する

Composeファイルを作成したら、いよいよ実行です!
ターミナルまたはコマンドプロンプトでファイルのあるディレクトリに移動して、
次のコマンドを入力します。

docker compose up -d
コマンド説明
docker compose upComposeファイルに定義された全コンテナを起動
-dデタッチドモード(バックグラウンド実行)で起動

実行すると、Composeファイルに書かれたすべてのコンテナが一括で作成・起動されます。
もし構成を変更したら、同じコマンドを再実行すれば自動で更新されます。

コンテナの状態を確認したいときは👇

docker compose ps

すべて停止・削除したい場合は👇

docker compose down
コマンド説明
docker compose ps起動中のサービスを一覧表示する。
docker compose down起動したサービスとネットワークを停止・削除する。

図解でイメージする!

まとめ

Docker Composeを使うと、
複数のコンテナを1つのYAMLファイルで管理できる のでとても便利です。

ポイントをおさらいすると…

  1. まずは必要なコンテナ構成を整理する。
  2. compose.yamlファイルを作成して、各サービスをYAMLで定義する。
  3. docker compose up -d コマンドで一括起動!

これで、Webサーバー・DB・APIサーバーなどをまとめて管理できるようになります。