【Docker基礎】Docker Composeファイルの書き方

 Docker Composeを効果的に活用するためには、Docker Composeファイル(Composeファイル)の正しい書き方を理解することが重要です。ここでは、Docker Composeファイルの基本的な構造と記述方法について詳しく解説します。初めてComposeファイルを書く方でも、ルールを押さえれば簡単に作成できるようになります。実際のファイルを見ながら、どのように記述すれば良いのかを学んでいきましょう。

1.Docker Composeファイルの基本構造

1.1 Docker Composeファイルとは

 Docker Composeファイルは、YAML形式で記述されるテキストファイルで、複数のDockerコンテナを一括で定義・管理・実行するための設定を記述します。このファイルを使用することで、複雑なマルチコンテナ環境をシンプルに構築・運用することが可能になります。

1.2 基本構造

Docker Composeファイルの基本的な構造は以下の通りです。

version: "3"

services:
  サービス名:
    image: イメージ名
    ports:
      - ホストポート:コンテナポート
    restart: 常に再起動

主なセクション

セクション説明
version使用するComposeファイルのバージョン
services管理する各コンテナ(サービス)の定義

2.Docker Composeファイルの例

2.1 Apacheコンテナの定義ファイル例

 以下に、Apacheコンテナ(apache-container)を作成するためのDocker Composeファイルの例を示します。

version: "3"

services:
  apache-container:
    image: httpd
    ports:
      - 8080:80
    restart: always

ファイルの解説

項目説明
versionComposeファイルのバージョンを指定します。
services管理する各コンテナを定義するセクションです。
apache-containerサービス名(任意の名前)
image使用するDockerイメージを指定します。
portsホストとコンテナのポートをマッピングします。
restartコンテナの再起動ポリシーを設定します。

2.2 Docker Composeファイルとdocker runコマンドの比較

以下に、上記のComposeファイルと同等のdocker runコマンドを比較します。

操作内容Docker Composeファイルdocker runコマンド
Apacheコンテナの起動docker compose up -ddocker run --name apache-container -d -p 8080:80 httpd
コンテナの再起動ポリシーを設定restart: always--restart always

比較表

項目Docker Composeファイルdocker runコマンド
サービス名apache-container--name apache-container
イメージimage: httpdhttpd
ポート設定ports: - 8080:80-p 8080:80
再起動ポリシーrestart: always--restart always
実行モードdocker compose up -d-d(デタッチモード)

3.Docker Composeファイルの詳細な記述方法

3.1 サービスの追加

 複数のコンテナを定義する場合、servicesセクション内に複数のサービスを追加します。例えば、MySQLとWordPressを同時に起動する場合のComposeファイルは以下のようになります。

version: "3"

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpressuser
      MYSQL_PASSWORD: userpass

  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpressuser
      WORDPRESS_DB_PASSWORD: userpass
    depends_on:
      - db

volumes:
  db_data:

サービス間の依存関係

 depends_onを使用することで、WordPressコンテナがMySQLコンテナに依存していることを明示します。これにより、MySQLコンテナが先に起動されるようになります。

3.2 ネットワークとボリュームの定義

Composeファイルでは、ネットワークやボリュームも一緒に定義・管理できます。

セクション説明
networksカスタムネットワークの設定を行います。
volumesデータの永続化に使用するボリュームを定義します。

ネットワークの例

networks:
  frontend:
  backend:

ボリュームの例

volumes:
  db_data:
  wordpress_data:

4.Docker Composeファイルの書き方のポイント

4.1 インデントと構文

 YAML形式で記述されるComposeファイルは、インデントが非常に重要です。正しいインデントを守ることで、ファイルの構文エラーを防ぎます。

4.2 コメントの活用

 Composeファイル内でコメントを追加することで、設定内容を説明し、後から見返す際の理解を助けます。

version: "3"

services:
  apache-container:
    image: httpd
    ports:
      - 8080:80  # ホストの8080番ポートをコンテナの80番ポートにマッピング
    restart: always  # 常に再起動する設定

4.3 環境変数の利用

 環境変数を使用することで、柔軟な設定が可能になります。例えば、データベースのパスワードなどを環境変数として管理できます。

environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

5. Docker Composeファイルの確認と実行

5.1 ファイルの確認

Composeファイルが正しく記述されているかを確認するために、以下のコマンドを使用します。

docker compose config
  • このコマンドは、Composeファイルの構文チェックを行い、実際に適用される設定内容を表示します。

5.2 コンテナの起動

定義ファイルが正しく記述されていることを確認したら、以下のコマンドでコンテナを起動します。

docker compose config
  • -d: デタッチモードでバックグラウンド実行します。

5.3 コンテナの停止と削除

コンテナを停止し、関連するリソースを削除するには以下のコマンドを使用します。

docker compose up -d
  • これにより、起動中のコンテナが停止され、ネットワークやボリュームも削除されます(ボリュームはオプションで保持可能です)。

まとめ

 ここでは、Docker Composeファイルの書き方について基礎的な知識と具体的な記述方法を解説しました。以下のポイントを押さえておきましょう。

  • YAML形式の理解: Docker ComposeファイルはYAML形式で記述されるため、基本的なYAMLの構文を理解することが重要です。
  • 基本構造の把握versionservicesnetworksvolumesなどの主要セクションの役割を理解する。
  • サービスの定義: 各コンテナ(サービス)の設定を適切に記述する。
  • 依存関係の管理depends_onを使用して、コンテナ間の依存関係を明確にする。
  • ネットワークとボリュームの統合管理: ネットワークやボリュームも一緒に定義・管理することで、より効率的な環境構築が可能になる。
  • 実行前の確認docker compose configコマンドを使用して、ファイルの構文や設定内容を確認する。

 これらの知識を基に、次章では定義ファイル(Composeファイル)の書式についてさらに詳しく解説し、具体的な設定方法を学びます。引き続き、Dockerの学習を進めていきましょう。