CodeGym /コース /Docker SELF /docker-compose.ymlの作成

docker-compose.ymlの作成

Docker SELF
レベル 15 , レッスン 2
使用可能

3.1 ファイル compose.yaml

ファイル compose.yaml(または以下の別名のいずれか: docker-compose.yaml, docker-compose.yml, compose.yml)は、Docker Composeがマルチコンテナアプリケーションを定義・管理するために使用する主要な構成ファイルです。それは、どのコンテナ(サービス)が起動されるべきか、互いにどうやって連携するのか、そしてどのリソースが必要なのかを記述します。

この講義では、一貫性を持たせるために、compose.yamlを使用します。これは、最新バージョンのDocker Composeで推奨されている形式です。

compose.yamlファイルの構造

compose.yamlファイルは複数のセクションで構成され、それぞれがアプリケーションの構成の異なる側面を記述しています。主なセクションには次のものが含まれます:

  1. version: Composeファイルのバージョンを指定(例: '3.9')。
  2. services: コンテナ(サービス)、その設定および依存関係を記述。
  3. volumes: コンテナとホスト間でデータを保存するためのボリュームを定義。
  4. networks: サービス間の通信を可能にするネットワークを設定。

3.2 主要なディレクティブ

1. version

versionディレクティブは、compose.yamlファイルで使用されるDocker Composeの構文バージョンを指定します。この記事執筆時点で一番新しいのはバージョン3で、特にその更新版である3.8や3.9です。

Yaml

version: '3.9'

2. services

servicesセクションは、Composeが作成して起動するべきコンテナを定義します。各サービスは、特定の構成を持つ個別のコンテナを表します。

例:

Yaml

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: mongo:latest
    volumes:
      - mongo-data:/data/db

この例では、webdbの2つのサービスが定義されています。webサービスはnginx:latestイメージを使用し、ポート80を開きます。dbサービスはmongo:latestイメージを使用し、データ保存用のボリュームをマウントしています。

3. volumes

volumesセクションは、データ保存のためにコンテナにマウントできるボリュームを定義します。これは、コンテナを再起動してもデータを保持するために便利です。

例:

Yaml

volumes:
  mongo-data:

4. networks

networksセクションは、コンテナが動作するカスタムネットワークを定義するために使用されます。これにより、分離とネットワーク接続の設定が可能になります。ネットワークが指定されていない場合、Docker Composeはデフォルトネットワークを作成し、すべてのサービスがそのネットワークに接続されます。

例:

Yaml

networks:
  front-end:
  back-end:

3.3 サービス設定用ディレクティブ

サービス設定の主なディレクティブ:

1. image

imageディレクティブは、コンテナ作成に使用されるイメージを指定します。

例:

Yaml

services:
  web:
    image: nginx:latest

2. build

buildディレクティブは、イメージのビルドに使用するDockerfileのパスを指定します。

例:

Yaml

services:
  app:
    build: ./app

3. ports

portsディレクティブは、ホストマシンからコンテナへ転送される開放ポートを指定します。

例:

Yaml

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

4. volumes

volumesディレクティブは、データをコンテナ間で保存するためのボリュームをマウントします。

例:

Yaml

services:
  db:
    image: mongo:latest
    volumes:
      - mongo-data:/data/db

5. environment

environmentディレクティブは、コンテナ用の環境変数を設定します。

例:

Yaml

services:
  app:
    image: myapp:latest
    environment:
      - NODE_ENV=production
      - API_KEY=1234567890

6. depends_on

depends_onディレクティブは、このサービスが他のサービスに依存しており、それらの後に起動する必要があることを示します。

重要! サービスを起動する際、その動作に必要な全てのサービスが完全に準備されている保証はありません。それらは起動されますが、完全な動作保証はありません。この問題はhealth-checkで解決されますが、これは後ほど説明します。

例:

Yaml

services:
  web:
    image: nginx:latest
    depends_on:
      - db
  db:
    image: mongo:latest

7. command

commandディレクティブは、コンテナ起動時に実行されるコマンドを上書きします。

例:

Yaml

services:
  app:
    image: myapp:latest
    command: python app.py

8. networks

networksディレクティブは、サービスを1つまたは複数のネットワークに接続します。

例:

Yaml

services:
  web:
    image: nginx:latest
    networks:
      - front-end
  db:
    image: mongo:latest
    networks:
      - back-end

3.4 完全な例

完全なcompose.yamlファイルの例

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - app
    networks:
      - front-end
        
  app:
    build: ./app
    volumes:
      - ./app:/usr/src/app
    environment:
      - NODE_ENV=production
    networks:
      - front-end
      - back-end
        
  db:
    image: mongo:latest
    volumes:
      - mongo-data:/data/db
    networks:
      - back-end
        
volumes:
  mongo-data:
        
networks:
  front-end:
  back-end:

この例では:

  • 3つのサービスが定義されています: web, app, db.
  • webはNginxイメージを使い、設定ファイルをマウントし、サービスappに依存しています。
  • appはローカルのDockerfileからビルドされ、アプリケーションのソースコードをマウントし、環境変数を使用しています。
  • dbはMongoDBイメージを使用し、データを保存するためのボリュームをマウントします。
  • 2つのボリュームと2つのネットワークが、サービスの分離と相互作用の管理のために作成されています。

: 1つのボリュームはmongo-dataで、もう1つはホストマシンからマウントされたディレクトリ(例えば./app)です。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION