Docker Composeの使い方完全ガイド:初心者向け

Docker

やりたいこと

このガイドでは、docker-compose.ymlの記述方法について整理し、初心者の方でも理解できるように詳しく説明します。Docker Composeを使うと、複数のDockerコンテナを一括で管理でき、開発環境の構築が簡単になります。

Docker Composeとは?

Docker Composeは、複数のDockerコンテナを管理し、アプリケーション全体をまとめて立ち上げたり、停止したりできるツールです。通常、複雑なアプリケーションには複数のサービスが必要で、たとえばWebサーバー、データベース、キャッシュなどをそれぞれ異なるコンテナで動かします。それを一括管理するためにdocker-compose.ymlファイルを使います。

docker-compose.ymlの書き方

docker-compose.ymlファイルは、複数のDockerコマンドを1つのYAMLファイルにまとめることで、サービスの起動、環境変数、ボリューム、ネットワークなどを簡単に設定できるようにするものです。これにより、プロジェクトのコンテナ管理が容易になります。

dockerコマンド一覧に関しては下記記事に記載しています。

Dockerコマンド集:基本操作をまとめて整理
Dockerのイメージ、コンテナ、ボリューム、ネットワーク、Docker Composeなど、よく使うコマンドをわかりやすくまとめました。初心者でも簡単に使えるよう、オプションの解説付きで整理しています。

基本的な要素

以下、docker-compose.ymlファイルで設定する主な要素を紹介します。

  • services
    アプリケーションの各部分(例:Webサーバー、データベースなど)をサービスとして定義します。
  • image
    使用するDockerイメージを指定します。たとえば、PostgreSQLの公式イメージを使いたい場合、postgres:15などと記述します。
  • volumes
    コンテナに永続的なデータを保存したい場合にボリュームを設定します。ホストマシンとコンテナ間でファイルを共有することができます。
  • environment
    コンテナ内で使用する環境変数を指定します。たとえば、データベースのユーザー名やパスワードを設定できます。
  • ports
    コンテナの内部ポートとホストマシンのポートを紐付けます。これにより、ホスト側の指定ポートを通じてコンテナにアクセスできます。
  • restart
    コンテナの再起動ポリシーを設定します。たとえば、restart: alwaysと設定すると、コンテナが停止したとき自動的に再起動します。
  • build
    コンテナを作成するためのDockerfileのパスを指定します。これにより、カスタムDockerイメージを作成できます。
  • command
    コンテナが起動したときに実行するコマンドを指定します。たとえば、Railsのサーバーを起動するためにbundle exec rails sといったコマンドを指定します。
  • depends_on
    サービス間の依存関係を定義します。これにより、特定のコンテナが他のコンテナが起動してから実行されるように制御します。
  • tty
    擬似端末(TTY)をコンテナに結びつけ、コンテナが終了しないようにする設定です。通常、開発環境でのデバッグ時に使用します。
  • stdin_open
    コンテナが標準入力を受け取れるようにします。対話型のセッションをサポートする際に使用します。

例:docker-compose.ymlの記述例

以下は、RailsアプリケーションとPostgreSQLデータベースをDocker Composeで管理するためのdocker-compose.ymlファイルのサンプルです。

YAML
services: 
  db:
    image: postgres:15
    volumes:
      - postgres_volume:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    ports:
      - 5432:5432
    restart: always

  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    depends_on:
      - db
    tty: true
    stdin_open: true
      
volumes:
  postgres_volume:

各要素の解説

  • dbサービス
    • image: PostgreSQLのバージョン15を指定しています。Docker Hubにある公式イメージを使用します。
    • volumes: データベースデータを永続化するために、postgres_volumeというボリュームをマウントしています。これにより、コンテナが停止してもデータが消えません。
    • environment: データベースのユーザー名とパスワードを設定しています。
    • ports: ホストマシンの5432ポートと、PostgreSQLコンテナの5432ポートを接続しています。
    • restart: 常にコンテナが自動で再起動されるように設定しています。
  • webサービス
    • build: ローカルのDockerfileからRailsアプリケーション用のコンテナをビルドします。
    • command: Railsサーバーを起動するためのコマンドを指定しています。3000ポートでアプリケーションが稼働します。
    • volumes: ローカルのプロジェクトディレクトリ(ホスト側)をコンテナ内の/appにマウントしています。これにより、コードを変更するたびにコンテナを再ビルドする必要がなくなります。
    • depends_on: Webサービスが起動する前にデータベースが起動するように依存関係を設定しています。
    • ttystdin_open: 開発時にコンテナを終了させずに保持しておくための設定です。
  • volumes
    • postgres_volume: データを永続化するためのボリュームを定義しています。

Docker Composeのメリット

Docker Composeを使うと、複数のコンテナを簡単にまとめて管理できるため、複雑な開発環境のセットアップが非常に簡単になります。以下は主なメリットです:

  1. マルチコンテナの管理が簡単 複数のサービスを1つのYAMLファイルで定義することで、一度に複数のコンテナを立ち上げたり停止させたりできます。
  2. 再利用可能な設定 一度作成したdocker-compose.ymlファイルは、同じプロジェクトで何度でも再利用できます。また、チームメンバーと簡単に共有でき、全員が同じ開発環境を再現できます。
  3. 環境依存を排除 Docker Composeを使えば、開発環境やテスト環境、本番環境の差異を減らし、一貫した動作を確保できます。
  4. スケーリングが容易 docker-compose up --scaleコマンドを使えば、特定のサービスのコンテナ数を簡単に増減できます。これは、マイクロサービスや負荷分散が必要な場合に便利です。

Docker Composeの使用方法

以下は基本的なDocker Composeコマンドです。

  • コンテナを起動する
    upコマンドを実行すると、docker-compose.ymlファイルに定義されたすべてのサービスが
    起動します。
    -dフラグを付けるとバックグラウンドで実行されます。
Bash
docker-compose up
Bash
docker-compose up -d
  • コンテナを停止する
    コマンドで全てのコンテナを停止し、ネットワークやボリュームを削除します。
Bash
docker-compose down down
  • 特定のサービスのみを起動
    特定のサービスだけを起動することも可能です。
Bash
docker-compose up web
  • ログを確認する
    起動したコンテナのログをリアルタイムで確認できます。
Bash
docker-compose logs

まとめ

Docker Composeを使えば、複数のサービスをまとめて管理でき、効率的に開発環境を構築できます。特に複雑なアプリケーションでは、コンテナごとに異なるサービスを設定し、それらを簡単に管理することができます。Docker Composeは一度理解してしまえば非常に便利なので、ぜひプロジェクトに取り入れてみてください!

コメント

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