dockerコマンドを簡単に管理 Docker Composeとは

IT・プログラミング

Docker Composeは、一言でいうと、これまで紹介してきた様々なDockerコマンドをまとめて管理できるファイルです。
Composeを使用することで、複数のコンテナを一つのYAMLファイルで定義し、簡単に管理、起動、停止、削除することができます。
この記事では、Docker Composeの基本概念、設定方法、および一般的な使用方法について解説します。

Docker Composeの基本概念

Docker Composeは、以下の主な機能を提供します。

  • マルチコンテナ管理: 複数のコンテナを一つのYAMLファイルで定義し、単一のコマンドで操作できます。
  • サービス定義: 各サービス(コンテナ)の設定を簡潔に定義でき、依存関係も管理できます。
  • 環境の再現性: 開発環境や本番環境の構成を簡単に共有でき、再現することが可能です。

Docker Composeファイルの作成

Docker Composeの設定は、通常docker-compose.ymlという名前のYAMLファイルに記述します。以下は、基本的な構成の例です。

version: '3.8'

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

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

この例では、NginxのWebサーバーとPostgreSQLのデータベースを定義しています。

このYAMLファイルは、Docker Composeの設定ファイルで、バージョン3.8を使用して、2つのサービス(webdb)を定義しています。それぞれのサービスについて詳しく見ていきます。

version: '3.8'
  • version: Docker Composeファイルのバージョンを指定します。この場合、3.8というバージョンを使用しています。バージョンによって利用できる機能や書き方が異なります。

webサービス

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  • services: このセクションでは、アプリケーションの各サービスを定義します。

  • web: サービスの名前です。この場合、webはNginxのWebサーバーを示しています。

  • image: 使用するDockerイメージを指定します。ここでは、nginx:latestという最新のNginxイメージを使用します。

  • ports: コンテナのポートとホストのポートをマッピングします。この場合、ホストのポート8080をコンテナのポート80にマッピングしています。これにより、ホストのブラウザでhttp://localhost:8080にアクセスすると、Nginxが提供するコンテンツにアクセスできます。

dbサービス

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
  • db: サービスの名前で、ここではPostgreSQLのデータベースを示しています。

  • image: 使用するDockerイメージを指定します。この場合、postgres:latestという最新のPostgreSQLイメージを使用します。

  • environment: 環境変数を設定するセクションです。PostgreSQLの設定に必要な環境変数を指定しています。

  • POSTGRES_USER: PostgreSQLのデフォルトユーザー名を設定します。この例ではuserというユーザー名が設定されています。
  • POSTGRES_PASSWORD: PostgreSQLのデフォルトユーザーのパスワードを設定します。この例ではpasswordが指定されています。

Docker Composeの基本コマンド

以下は、Docker Composeでよく使用されるコマンドの一覧です。

サービスの起動: docker-compose up
-dオプションを使用すると、バックグラウンドで起動します。

docker-compose up -d

サービスの停止: docker-compose down
コンテナを停止し、ネットワークやボリュームも削除します。

docker-compose down

コンテナのログの表示: docker-compose logs
各サービスのログを確認できます。

docker-compose logs -f

環境変数の設定

環境変数は、environmentキーを使って定義できます。また、.envファイルを作成し、そこから環境変数を読み込むことも可能です。これにより、設定の柔軟性が向上します。

version: '3.8'

services:
  app:
    image: myapp:latest
    environment:
      - DB_USER=${DB_USER}
      - DB_PASS=${DB_PASS}

ボリュームとネットワーク

Docker Composeでは、データの永続性を保つためにボリュームを使用し、サービス間の通信を容易にするためにネットワークを設定できます。YAMLファイルでボリュームとネットワークを定義することができます。

version: '3.8'

services:
  app:
    image: myapp:latest
    volumes:
      - mydata:/data

volumes:
  mydata:

Docker Composeでバインドマウントを設定する方法について解説します。バインドマウントは、ホストマシン上の特定のディレクトリやファイルをコンテナ内にマウントすることで、ホストとコンテナ間でデータを共有できる機能です。これにより、ホスト上のファイルの変更がコンテナ内に即座に反映され、開発作業が効率化されます。

バインドマウントの設定方法

以下は、先ほどのYAMLファイルにバインドマウントを追加する例です。

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html  # バインドマウントの設定

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
  • volumes: コンテナにマウントするボリュームを指定します。このセクションでバインドマウントを設定します。

  • - ./html:/usr/share/nginx/html: これはバインドマウントの具体的な設定です。

  • ./html: ホストマシン上の相対パスです。docker-compose.ymlファイルが存在するディレクトリ内のhtmlフォルダを指定しています。このフォルダにNginxが配信するHTMLファイルを置きます。

  • /usr/share/nginx/html: コンテナ内のパスです。NginxがデフォルトでHTMLファイルを提供するディレクトリです。ここにホストのhtmlフォルダの内容がマウントされます。

まとめ

Docker Composeは、複数のコンテナを簡単に管理できる強力なツールです。設定ファイルを使用して、アプリケーションの構成を再現性のある形で定義することができ、環境のセットアップやデプロイメントを効率化します。ぜひ、Composeを活用して、Dockerでの開発をよりスムーズに進めてください。

タイトルとURLをコピーしました