はじめに
この実験では、docker compose alpha dry-run コマンドを使用して、実際に実行せずに Docker Compose の設定変更をテストする方法を学びます。これは docker-compose.yaml ファイルを検証し、コマンドを適用する前にその潜在的な影響を理解するための貴重なツールです。
まず、シンプルな docker-compose.yaml ファイルを準備します。次に、基本的な Docker Compose コマンドで dry-run フラグを使用し、シミュレートされた出力を観察してコマンドの挙動を理解します。最後に、通常は変更を加えるコマンドに dry-run を適用し、システムを変更することなく意図したアクションを確認します。
シンプルな docker-compose.yaml ファイルを準備する
このステップでは、シンプルな docker-compose.yaml ファイルを準備します。このファイルは、Docker Compose の dry-run 機能をデモンストレーションするために使用できる基本的なサービスを定義します。
まず、Docker Compose をインストールする必要があります。この環境にはプリインストールされていないため、バイナリをダウンロードして実行可能にします。
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
このコマンドは、システムのアーキテクチャに合わせた Docker Compose バイナリをダウンロードし、/usr/local/bin/docker-compose に保存します。chmod +x コマンドでファイルを実行可能にします。
次に、Docker Compose が正しくインストールされたことをバージョン確認で検証します。
docker-compose version
インストールされた Docker Compose のバージョンを示す出力が表示されるはずです。
続いて、プロジェクト用のディレクトリを作成し、その中に移動します。
mkdir ~/project/my-compose-app
cd ~/project/my-compose-app
これで ~/project/my-compose-app ディレクトリに移動しました。ここに docker-compose.yaml ファイルを作成します。
次に、nano エディタを使用して docker-compose.yaml ファイルを作成します。
nano docker-compose.yaml
nano エディタ内で、以下の内容を貼り付けます:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
この docker-compose.yaml ファイルは、web という名前の単一サービスを定義しています。このサービスは nginx:latest Docker イメージを使用し、ホストのポート 80 をコンテナ内のポート 80 にマッピングします。
Ctrl + O を押してファイルを保存し、Enter を押し、Ctrl + X を押してエディタを終了します。
これでシンプルな docker-compose.yaml ファイルの作成が完了しました。
基本的な compose コマンドで dry-run を実行する
このステップでは、基本的な Docker Compose コマンドで dry-run フラグを使用し、その動作を確認します。dry-run フラグを使用すると、実際に実行せずに Docker Compose が行う予定のアクションを確認できます。これはコマンドを実行する前にその影響を理解するのに役立ちます。
docker-compose config コマンドに dry-run フラグを付けて実行します。config コマンドは Compose ファイルの設定を検証して表示します。このコマンドに dry-run を追加しても動作に大きな変化はありません(config は元々非破壊的なコマンドです)が、フラグの構文を理解するのに適した出発点です。
まず、docker-compose.yaml ファイルがあるディレクトリにいることを確認してください。
cd ~/project/my-compose-app
次に、docker-compose config --dry-run コマンドを実行します。
docker-compose config --dry-run
コンソールに docker-compose.yaml ファイルの解析済み設定が表示されます。このケースでは dry-run フラグなしで docker-compose config を実行した場合と同じ出力になります。これは config コマンドが本質的に dry-run 操作だからです。
この出力は、Docker Compose が docker-compose.yaml ファイルを正しく解析し、定義されたサービスと設定を理解していることを確認できます。
dry-run コマンドの出力を確認する
このステップでは、前のステップで実行した docker-compose config --dry-run コマンドの出力を注意深く観察します。この出力を理解することは、Docker Compose が docker-compose.yaml ファイルをどのように解釈するかを確認する上で重要です。
表示された出力は、YAML 形式で検証された設定です。これは Docker Compose がファイル内で定義されたサービス、ネットワーク、ボリュームをどのように理解しているかを表しています。
シンプルな docker-compose.yaml に基づいて、出力の主要部分を見てみましょう:
services:
web:
build:
context: /home/labex/project/my-compose-app
container_name: my-compose-app-web-1
image: nginx:latest
ports:
- published: 80
target: 80
restart: "no"
services セクションとその中の web サービスが表示されます。
image: nginx:latest:webサービスで使用するイメージを Docker Compose が正しく認識したことを確認できますports:: ポートマッピングを示しています。published: 80はホスト側のポート、target: 80はコンテナ側のポートを示しており、docker-compose.yamlで定義した内容と一致していますcontainer_name: my-compose-app-web-1: Docker Compose はプロジェクトディレクトリ名とサービス名に基づいてデフォルトのコンテナ名を自動生成しますbuild::imageを指定した場合でも、Docker Compose は現在のディレクトリをコンテキストとしたbuildセクションを含めます。これは内部表現の一部であり、imageのみを指定した場合にイメージをビルドすることを意味しませんrestart: 'no': 再起動ポリシーを指定しなかった場合、Docker Compose はデフォルトでnoに設定します
この出力は、docker-compose up のようなコマンドを実行した場合に Docker Compose が使用する最終的な設定の表現です。変更を加える可能性のあるコマンドで dry-run フラグを使用すると(次のステップで確認します)、設定だけでなく実行される予定のアクションも表示されます。
config コマンドの場合、dry-run フラグは主に docker-compose.yaml ファイルの構文と構造を検証するために機能します。構文エラーがあった場合、dry-run の有無にかかわらず config コマンドがエラーを報告します。
変更を加えるコマンドで dry-run を実行する
このステップでは、システムに変更を加える可能性のある Docker Compose コマンド(docker-compose up など)で dry-run フラグを使用します。これにより、実際にコンテナやネットワークを作成せずに、実行予定のアクションを確認できます。
dry-run なしで docker-compose up コマンドを実行すると、指定されたイメージ(ローカルに存在しない場合)の取得、ネットワークの作成、docker-compose.yaml ファイルに基づいたコンテナの起動が行われます。dry-run フラグを追加することで、実際に実行せずにこれらの手順を確認できます。
まず、正しいディレクトリにいることを確認してください:
cd ~/project/my-compose-app
次に、docker-compose up --dry-run コマンドを実行します。
docker-compose up --dry-run
Docker Compose が実行予定のアクションを示す出力が表示されます。シンプルな docker-compose.yaml の場合、出力は次のようになります:
Would create network "my-compose-app_default"
Would create service "web"
Would pull image "nginx:latest"
Would create container "my-compose-app-web-1"
この出力から、Docker Compose が以下のアクションを実行予定であることが明確にわかります:
my-compose-app_defaultという名前のデフォルトネットワークを作成webという名前のサービスを作成nginx:latestイメージを取得(ローカルに存在しない場合)webサービスのためにmy-compose-app-web-1という名前のコンテナを作成
実際にはこれらのアクションは一切実行されません。ネットワークは作成されず、イメージは取得されず、コンテナも起動しません。dry-run フラグにより、Docker 環境への実際の変更が防止されます。
この機能は以下の用途で非常に便利です:
- 変更のプレビュー: 複雑なアプリケーションをデプロイする前に、Docker Compose が実行する正確な手順を確認できます
- トラブルシューティング:
docker-compose upコマンドが失敗する場合、dry-runで初期手順を理解し、設定の潜在的な問題を特定できます - 学習: システムに影響を与えずに、さまざまな
docker-compose.yaml設定を試し、その影響を確認できます
dry-run フラグは、down、start、stop、rm などの他の Docker Compose コマンドでも使用でき、影響を受けるリソースを確認できます。
まとめ
この実験では、まず Docker Compose をインストールし、ディレクトリと基本的な Nginx サービス定義を含む YAML ファイルを作成することで、シンプルな docker-compose.yaml ファイルを準備する方法を学びました。その後、Docker Compose コマンドで dry-run フラグを使用する方法を探求しました。
dry-run フラグを使用することで、システムに実際に変更を加えることなく、コマンドが実行する予定のアクションをプレビューできることを確認しました。これは docker-compose.yaml ファイルの変更をテストしたり、コマンドの実行前の潜在的な影響を理解したりするための貴重なツールです。



