やりたいこと
このガイドでは、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-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ファイルのサンプルです。
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サービスが起動する前にデータベースが起動するように依存関係を設定しています。ttyとstdin_open: 開発時にコンテナを終了させずに保持しておくための設定です。
- volumes
postgres_volume: データを永続化するためのボリュームを定義しています。
Docker Composeのメリット
Docker Composeを使うと、複数のコンテナを簡単にまとめて管理できるため、複雑な開発環境のセットアップが非常に簡単になります。以下は主なメリットです:
- マルチコンテナの管理が簡単 複数のサービスを1つのYAMLファイルで定義することで、一度に複数のコンテナを立ち上げたり停止させたりできます。
- 再利用可能な設定 一度作成した
docker-compose.ymlファイルは、同じプロジェクトで何度でも再利用できます。また、チームメンバーと簡単に共有でき、全員が同じ開発環境を再現できます。 - 環境依存を排除 Docker Composeを使えば、開発環境やテスト環境、本番環境の差異を減らし、一貫した動作を確保できます。
- スケーリングが容易
docker-compose up --scaleコマンドを使えば、特定のサービスのコンテナ数を簡単に増減できます。これは、マイクロサービスや負荷分散が必要な場合に便利です。
Docker Composeの使用方法
以下は基本的なDocker Composeコマンドです。
- コンテナを起動する
upコマンドを実行すると、docker-compose.ymlファイルに定義されたすべてのサービスが
起動します。-dフラグを付けるとバックグラウンドで実行されます。
docker-compose updocker-compose up -d- コンテナを停止する
コマンドで全てのコンテナを停止し、ネットワークやボリュームを削除します。
docker-compose down down- 特定のサービスのみを起動
特定のサービスだけを起動することも可能です。
docker-compose up web- ログを確認する
起動したコンテナのログをリアルタイムで確認できます。
docker-compose logsまとめ
Docker Composeを使えば、複数のサービスをまとめて管理でき、効率的に開発環境を構築できます。特に複雑なアプリケーションでは、コンテナごとに異なるサービスを設定し、それらを簡単に管理することができます。Docker Composeは一度理解してしまえば非常に便利なので、ぜひプロジェクトに取り入れてみてください!


コメント