# Docker Compose

Docker Compose とは

Docker Compose は、複数の Docker コンテナを単一のアプリケーションとして扱い、それらを定義、実行、スケールすることができます。

Docker Compose を使用すると、Docker コマンドを直接使用する場合に比べて、より高度な構成管理が可能になります。Docker Compose ファイルを使用して、コンテナの構成、ネットワーク、ボリュームなどを定義できます。また、複数のコンテナを一度に起動することができ、コンテナ間で簡単に通信することができます。

Docker Compose を使用する主な目的は、複数のコンテナからなるアプリケーションを簡単に実行することです。例えば、Web アプリケーションを実行する場合、Web サーバー、データベースサーバー、キャッシュサーバーなどが必要です。これらのコンテナを個別に管理する代わりに、Docker Compose を使用して、1 つのコマンドですべてのコンテナを起動できます。

Docker Compose を使用することで、Docker アプリケーションの開発、デプロイ、管理が簡単になります。また、アプリケーションの複雑な構成を扱う際にも便利です。

# Docker compose 特徴

Docker Compose の主な特徴

  • 複数のコンテナを一括して管理できる
    Docker Compose を使用することで、複数のコンテナを一度に定義、起動、管理できます。これにより、複雑なアプリケーションの構成を簡単に管理できます。

  • コンテナ間の通信を簡単に設定できる
    Docker Compose を使用することで、複数のコンテナ間で簡単に通信することができます。これにより、アプリケーション内の様々なコンポーネント間のやり取りを簡単に設定できます。

  • 設定ファイルで管理が可能
    Docker Compose では、YAML ファイルを使用してコンテナ構成、ボリューム、ネットワークなどを定義します。これにより、Docker コマンドを使用するよりも簡単にアプリケーションを定義、実行、管理できます。

  • スケールアウトが簡単
    Docker Compose を使用することで、複数のコンテナをスケールアウトすることが簡単になります。これにより、アプリケーションの負荷に応じてコンテナの数を調整できます。

  • 様々な環境で動作する
    Docker Compose は、様々な環境で動作します。ローカル環境、開発環境、本番環境などで同じ Docker Compose ファイルを使用してアプリケーションを実行できます。

  • 他のツールとの統合が容易
    Docker Compose は、他のツールとの統合が容易です。例えば、CI/CD ツールと連携することで、アプリケーションのデプロイを自動化することができます。

Docker Compose を使用することで、複雑なアプリケーションの構成を簡単に管理できるだけでなく、開発、テスト、本番環境で同じ環境を再現することもできます。

# よく使う Docker compose コマンド

Docker Compose を使用している場合、コンテナの状態や設定情報を確認するためのいくつかのコマンドがあります。

# コンテナの状態確認

docker-compose ps

これにより、Compose ファイルで定義されたサービスの一覧と、それぞれのサービスが起動しているかどうか、およびどのポートで公開されているかなどの情報が表示されます。

# コンテナのログ表示

docker-compose logs <サービス名>

特定のサービスのログを表示します。<サービス名>の部分には、Compose ファイルで定義したサービスの名前を指定します。

# コンテナの詳細情報表示

docker-compose ps
docker inspect <コンテナ ID>
docker-compose ps で表示されたサービスの一覧から、対象のコンテナ ID を取得し、その ID を使用して docker inspect コマンドを実行します。これにより、詳細なコンテナ情報が表示されます。

# コンテナ内でシェルを実行

docker-compose exec <サービス名> <コマンド>

特定のサービス内のコンテナで、任意のコマンドを実行します。例えば、シェルを起動する場合は次のようになります。

docker-compose exec <サービス名> sh

ここで <サービス名> には Compose ファイルで定義されたサービスの名前を入力します。

# コンテナの再起動

docker-compose restart <サービス名>

特定のサービスを再起動します。

# その他のコマンド

# イメージをビルド
docker-compose build

# サービスを起動
docker-compose run

# デタッチモード(background)でのサービスを起動
docker-compose run -d

# サービス状態を表示
docker-compose ps

# サービスのログを表示
docker-compose logs

# コンテナ内のシェルに接続エグゼク
docker-compose exec

# Docker Hub などからプル
docker-compose pull

# コンテナの終了
docker-compose kill

# 停止しているコンテナを削除
docker-compose rm

# コンテナやネットワーク (-vオプション)ボリュームを削除
docker-compose down -v
# --volumes オプションでコンテナとデフォルトネットワーク、データベース削除します。

docker-compose down コマンドは、docker-compose up コマンドで起動したコンテナを削除する場合に使用することが推奨されています。
docker-compose stop コマンドで停止したコンテナを削除する場合は、docker-compose rm コマンドを使用することが推奨されています。

# サービス内にコマンドを実行する docker compose exec

docker-compose exec [service-name] [command]

[service-name] には、Docker Compose で定義されたサービス名を指定します。
[command] には、実行したいコマンドを指定します。

# web bash
docker-compose exec web bash

# インタラクティブなシェル
docker-compose exec -it web bash

# database mysql
docker-compose exec db mysql

-it オプションを付けて実行することで、インタラクティブなシェルを使用することができます。

インタラクティブなシェルとは

インタラクティブなシェルとは、ユーザーとコンピュータの対話的なコマンドライン環境のことを指します。つまり、ユーザーがコマンドを入力すると、その入力に基づいてプログラムが動作し、結果が表示されます。一般的に、Linux や macOS などの UNIX 系オペレーティングシステムでは、シェルがインタラクティブなコマンドライン環境を提供します。

インタラクティブなシェルを使用すると、ユーザーはコマンドを入力して、その結果を即座に確認することができます。また、ファイルやディレクトリの操作、プログラムの実行、ネットワークの操作など、多くのタスクをコマンドラインから実行することができます。

Docker の場合、コンテナ内でシェルを実行する際に、インタラクティブなシェルを使用することができます。インタラクティブなシェルを使用することで、コンテナ内での作業をより直感的に行うことができます。

# docker compose コマンドとオプション一覧

使い方

docker-compose [-f=<引数>...] [オプション] [コマンド] [引数...]
docker-compose -h|--help

# コマンド

コマンド 説明
build サービスの構築または再構築
config compose ファイルの確認と表示
create サービスの作成
down コンテナ・ネットワーク・イメージ・ボリュームの停止と削除
events コンテナからリアルタイムにイベントを受信
help コマンド上でヘルプを表示
kill コンテナを kill (強制停止)
logs コンテナの出力を表示
pause サービスを一時停止
port ポートに割り当てる公開用ポートを表示
ps コンテナ一覧
pull サービス用イメージの取得
restart サービスの再起動
rm 停止中のコンテナを削除
run 1度だけコマンドを実行
scale サービス用コンテナの数を指定
start サービスの開始
stop サービスの停止
unpause サービスの再開
up コンテナの作成と開始
version Docker Compose のバージョン情報を表示

# オプション

簡略 フルコマンド 説明
-f --file FILE 別の compose ファイルを指定 (デフォルト: docker-compose.yml)
-p --project-name NAME 別のプロジェクト名を指定 (デフォルト: directory name)
--verbose 詳細情報を表示
-v --version バージョンを表示して終了
-H --host HOST 接続先のデーモン・ソケット
--tls TLS を使う;--tlsverify の指定も含む
--tlscacert CA_PATH この CA で署名した証明書のみ信頼
--tlscert CLIENT_CERT_PATH TLS 証明書ファイルへのパス
--tlskey TLS_KEY_PATH TLS 鍵ファイルへのパス
--tlsverify TLS を使いリモートを認証
--skip-hostname-check クライアントの証明書で指定されたデーモンのホスト名を確認しない。

※ 複数の -f 設定ファイルを指定した場合、Compose は1つの設定ファイルに連結します。

# 参考

2022-02-18
  • docker