開発環境を整えるとき、複数のコンテナ(Webサーバー、DB、キャッシュサーバーなど)を手動で立ち上げるのはとても手間です。そんな時に活躍するのが「Docker Compose」です。特にその中でも使いこなしたいコマンドが「docker-compose up
」。
このコマンドを使えば、複数のコンテナを一括で起動・連携させることができ、開発の効率を飛躍的に向上させることが可能です。
本記事では、「docker-compose up
」の基本的な使い方から、便利なオプション、トラブル時の対処法まで、初めての方にもわかりやすく丁寧に解説していきます。
まず前提として、Docker Composeとは何かを理解しておきましょう。
Docker Composeは、複数のコンテナを一括管理するためのツールです。たとえば、Webアプリケーションの開発においては以下のような構成になることが一般的です。
このように複数のコンテナを協調して動作させる場合、個別に起動・設定するのは非常に面倒です。Docker Composeを使えば、これらの情報を一つのdocker-compose.yml
ファイルにまとめて管理できます。
docker-compose up
は、Composeファイルで定義されたすべてのサービス(コンテナ)を一括で起動するためのコマンドです。
docker-compose up
このコマンドを実行すると以下の処理が自動で行われます:
docker-compose.yml
ファイルを読み込む非常にシンプルですが、開発環境を一発で立ち上げられるため、作業の効率化に貢献します。
以下は、Webアプリケーションとデータベースを構成する簡単な例です。
version: '3'
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
このようなdocker-compose.yml
ファイルを作成して、同じディレクトリでdocker-compose up
を実行すると、NginxとMySQLの2つのコンテナが同時に起動します。
docker-compose up
はシンプルなコマンドですが、オプションを組み合わせることでさらに便利に使えます。
docker-compose up -d
通常は標準出力にログが表示され続けますが、-d
オプションを使うとバックグラウンドで実行されます。サーバーとして常駐させたいときに便利です。
docker-compose up --build
コンテナの構成が変更された場合、このオプションを使うことで再ビルドを強制できます。
docker-compose up --force-recreate
既存のコンテナがあっても強制的に新しく作り直します。動作が不安定なときに使用されることがあります。
docker-compose up
でうまく起動できないときの対処法も押さえておきましょう。
エラーメッセージに「port is already allocated」などが出た場合、同じポート番号を使って他のサービスが起動している可能性があります。使用ポートを変更するか、既存のプロセスを停止してください。
pull access denied
などのエラーが出たら、指定したイメージが存在しないか、非公開の可能性があります。イメージ名を再確認し、認証が必要ならDocker Hubのログインを行いましょう。
docker login
環境変数(MYSQL_ROOT_PASSWORD
など)が不足している場合も起動に失敗します。.env
ファイルを用意して変数を定義するのもおすすめです。
起動したコンテナを停止するには以下のコマンドを使います。
docker-compose down
このコマンドはすべてのコンテナを停止し、ネットワークやボリュームなども削除します。設定変更のあとに一度クリーンにしたい場合にも便利です。
もしボリュームを保持したい場合は、--volumes
オプションを外して使うことも可能です。
docker-compose
は、開発環境と本番環境で設定を切り替える運用も可能です。たとえば以下のように複数のYAMLファイルを使い分けます。
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
このように複数ファイルを合成して、必要な構成だけ上書きする柔軟な使い方もできます。
docker-compose up
は、複数のコンテナを一括で起動・管理できる非常に便利なコマンドです。開発環境を構築するとき、毎回個別にコンテナを起動する必要がなくなり、時間の短縮と構成の再現性を高めることができます。
よく使うオプションやトラブル対処法を押さえておけば、初めての方でも安心して使いこなすことができます。開発現場での効率化のためにも、ぜひ習得しておきたいコマンドの一つです。