目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / docker-composeを使用したマルチコンテナアプリケーションの管理

docker-composeを使用したマルチコンテナアプリケーションの管理

発行日: 12/12/2024
概要

docker-composeを使用すると、マルチコンテナアプリケーションを定義および管理できます。使いやすい定義ファイルを使用することにより、このようなアプリケーションスタックの展開が簡単になります。

目的

この記事では、docker-composeを使用してマルチコンテナアプリケーションを作成する方法について説明します。

所要時間

この記事の理解には20分ほどを要します。

目標

コンテナベースの独自のアプリケーションスタックを作成できるようになります。

要件

アプリケーションコンテナイメージ、またはアプリケーションの構築に使用する関連するソースファイル。

1 マルチコンテナアプリケーションの管理に関係するツール

docker-composeは、マルチコンテナアプリケーションを作成するためのツールです。デフォルトではDockerが使用されますが、DockerはSLE Microには存在しません。Dockerをバイパスして、代わりにPodmanを使用するには、podman-dockerスクリプトを使用します。したがって、既存のスクリプトを、DockerではなくPodmanを使用するように変更する必要はありません。以下のセクションでは、ツールの詳細について説明します。

1.1 Podmanについて

PodmanはPod Manager Toolの略称です。Podmanはデーモンレスコンテナエンジンであり、コンテナとコンテナイメージを使用してアプリケーションを実行および展開できます。Podmanは、コンテナを管理するためのコマンドラインインタフェースを提供します。

Podmanはデーモンを持たないため、systemdとの統合が提供されています。これにより、systemdユニット経由でコンテナを制御できるようになります。このようなユニットを既存のコンテナ向けに作成できるほか、システムにコンテナが存在しない場合にコンテナを起動できるユニットを生成することもできます。Podmanはコンテナ内でsystemdを実行できます。

Podmanを使用すると、コンテナをポッドとして編成できます。ポッドは同じネットワークインタフェースとリソースを共有します。コンテナのグループをポッドに編成する代表的なユースケースは、データベースを実行するコンテナ、およびそのデータベースにアクセスするクライアントが含まれるコンテナです。

1.1.1 Podmanのインストール

PodmanはデフォルトでSLE Microに含まれます。ただし、Podmanが見つからない場合は、次の説明に従ってインストールできます。

  1. 次のコマンドを実行します。

    > sudo transactional-update pkg install podman*
  2. システムを再起動して、新しいスナップショットで起動します。

1.2 podman-dockerについて

podman-dockerは、ユーザが実行するdockerコマンドを、渡された引数と同じ引数を使用して対応するpodmanコマンドに変更するbashスクリプトです。したがって、すべてのDockerスクリプトを変更せずに使用できます。

1.2.1 podman-dockerのインストール

podman-dockerは、デフォルトではSLE Microにインストールされていません。これをインストールするには、次の手順に従います。

  1. 次のコマンドを実行して、podman-dockerパッケージをインストールします。

    transactional-update pkg install podman-docker
  2. システムを再起動して、最新のスナップショットに切り替えます。

1.3 docker-composeについて

docker-composeは、マルチコンテナアプリケーションを管理するためのツールです。docker-composeでは、単一ホスト上に複数の隔離された環境を設定しながら、環境間で変数を使用することができます。docker-composeを使用すると、変更されたコンテナのみを再作成することができ、マルチコンテナアプリケーション全体を破棄する必要はありません。

重要
重要: dockerコマンドはpodmanコマンドに置き換え

SLE Microでは、docker-composeを実行すると常にpodman-dockerスクリプトを使用してPodmanを呼び出します。これは、SLE MicroにはDockerが存在しないためです。

1.3.1 docker-composeのインストール

docker-composeがシステムに存在しない場合は、次の手順に従ってインストールできます。

  1. 次のコマンドを実行します。

    > sudo transactional-update pkg install docker-compose
  2. インストールが完了したら、システムを再起動して新しいスナップショットで起動します。

2 マルチコンテナアプリケーションの作成

マルチコンテナアプリケーションを作成するには、次の手順に従います。

  1. 設定ファイルcompose.ymlを作成します。詳細については、2.1項 「compose.ymlの作成」を参照してください。

  2. 必要なディレクトリ構造を準備します。compose.ymlファイルは、作業ディレクトリの最上位に置くことをお勧めします。

  3. 必要に応じて、コンテナ化されたアプリケーションで使用されるサービスに固有の、独自のコンテナファイルを記述します。たとえば、Goアプリケーションを展開するには、必要な設定と依存関係を含む、Goアプリケーションのコンテナファイルを作成します。

    作業ディレクトリ内にサービスごとにサブディレクトリを作成し、そこにサービス固有のファイルを配置することを推奨します。

  4. マルチコンテナアプリケーションを展開します。詳細については、2.2項 「マルチコンテナアプリケーションの展開」を参照してください。

2.1 compose.ymlの作成

マルチコンテナアプリケーションを作成するには、compose.ymlファイルを作成し、できれば作業ディレクトリに配置する必要があります。このファイルは1つのファイルにすることも、フラグメントや拡張機能を利用して、よりきめ細かいアプローチを使用することもできます。複数のdocker-composeファイルをマージして、アプリケーションモデル全体を定義することもできます。

compose.ymlファイルはアプリケーションを定義します。以下の要素を含めることができます。

service

サービスとはアプリケーションのコンピューティングコンポーネントです。定義に関する詳細については、2.1.1項 「サービスの定義」を参照してください。

networks

networkステートメントを使用してカスタムネットワークを定義し、特定のサービスをカスタムネットワークに割り当てることができます。詳細については、2.1.2項 「ネットワークの定義」を参照してください。

volumes

コンテナエンジンによって管理されるディレクトリで、サービスはここにデータを保存および共有します。

環境変数

サービスに渡す環境変数のリストを使用しなければならない場合もあります。詳細については、environment variables referenceを参照してください。

configs

サービスに必要なすべての設定ファイルをconfigsセクションで宣言する必要があります。詳細については、configs definitionを参照してください。

2.1.1 サービスの定義

サービスを定義する場合、使用するコンテナイメージを指定するか、サービスを構築する元になるソースファイルを用意する必要があります。

サービスコンテナをイメージから作成するには、imageステートメントを使用します。

services:
       db:
         image: database

Podmanは、compose.ymlファイルで宣言されたイメージ名がローカルコンテナストレージにあるかどうかをチェックします。ない場合、Podmanは、設定されたレジストリの1つからイメージを取得します。

サービスをソースファイルから構築するには、ソースファイルを用意してコンテナファイルを作成し、その両方を同じディレクトリに配置します。その後、compose.ymlファイルで次のようにbuildステートメントを使用します。

      services:
        db: 
          build: PATH_TO_SOURCE_FILES

特定のサービスを別のサービスの後に開始する必要がある場合は、depends_onステートメントを使用します。

      services:
       db:
         image: database
         depends_on:
          system:
            condition: SERVICE_CONDITION

SERVICE_CONDITIONは、service_startedservice_healthy、またはservice_completed_successfullyのいずれかになります。

servicesの定義に関する詳細については、services specificationを参照してください。

2.1.2 ネットワークの定義

デフォルトでは、docker-composeはデフォルトのネットワークを作成し、アプリケーションスタック内の各コンテナはそのネットワークに含まれます。デフォルトのネットワークはdocker-composeによって自動的に作成されるため、compose.ymlファイルで宣言する必要はありません。

カスタムネットワークを定義し、特定のサービスをそのネットワークに割り当てることもできます。たとえば、2つのネットワークnetwork1network2を作成するには、次のスニペットを追加します。

networks:
  network1:
    # Use a custom driver
    driver: custom-driver-1
  network2:
    # Use a custom driver and name the network
    driver: custom-driver-2
    name: custom_network

既存のネットワークを使用することもできます。この場合、ネットワークをexternalとしてマークします。

networks:
  network1:
    name: network1
    external: true

networksの仕様の全詳細については、networks specificationを参照してください。

2.1.3 compose.ymlの例

次のcompose.ymlの例では、Prometheus監視システムとGrafana分析システムを使用するアプリケーションスタックを定義します。

services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
    ports:
      - 9090:9090
    restart: unless-stopped
    volumes:
      - ./prometheus:/etc/prometheus
      - prom_data:/prometheus
  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - 3000:3000
    restart: unless-stopped
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=grafana
    volumes:
      - ./grafana:/etc/grafana/provisioning/datasources
volumes:
  prom_data:

この例のプロジェクト構造は次のようになります。

.
├── compose.yaml
├── grafana
│   └── datasource.yml
├── prometheus
│   └── prometheus.yml
└── README.md

2.2 マルチコンテナアプリケーションの展開

適切なディレクトリ構造とcompose.ymlファイルを作成したら、マルチコンテナアプリケーションを展開できます。

  1. 実行しようとしているコンテナがまだ存在しないことを確認します。

    > podman ps --all

    必要に応じて、特定のコンテナを削除します。

    > podman rm -fCONTAINER_ID
  2. compose.ymlが存在するディレクトリから次のコマンドを実行して、マルチコンテナアプリケーションを起動します。

    > docker compose up -d

    docker-composeにより、そのマルチコンテナアプリケーション用に別のネットワークが作成されます。

  3. 実行中のコンテナを一覧にすると、コンテナが実行中でポートがマップされていることを確認できます。

    > podman ps

3 マルチコンテナアプリケーションの管理

マルチコンテナアプリケーションを作成した後に、docker-composeコマンドを使用して管理操作を実行できます。コマンドの構文は次のとおりです。

> docker compose[OPTIONS]COMMAND

このコマンドは、管理するマルチコンテナアプリケーションのcompose.ymlファイルが存在するディレクトリと同じディレクトリから実行します。または、-f, --fileオプションを使用してcompose.ymlファイルへのパスを指定します。たとえば、マルチコンテナアプリケーションを終了して削除するには、次のコマンドを実行します。

> docker compose -f ./test/compose.yml down

その他の役立つコマンド:

images

マルチコンテナアプリケーション内のコンテナが使用するすべてのイメージを一覧にします。

> docker compose images
pause

すべてのコンテナを一時停止します。

> docker compose pause[SERVICE]
ps

マルチコンテナアプリケーション内のコンテナを一覧にします。

> docker compose ps
rm

停止したコンテナを削除します。

> docker compose rm
start/stop

コンテナを開始または停止します。

> docker compose stop[SERVICE]

オプションとコマンドの完全なリストについては、次のコマンドを実行します。

> docker-compose --help