docker compose alpha dry-run コマンドで変更をテストする方法

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、docker compose alpha dry-run コマンドを使用して、実際に実行せずに Docker Compose の設定変更をテストする方法を学びます。これは docker-compose.yaml ファイルを検証し、コマンドを適用する前にその潜在的な影響を理解するための貴重なツールです。

まず、シンプルな docker-compose.yaml ファイルを準備します。次に、基本的な Docker Compose コマンドで dry-run フラグを使用し、シミュレートされた出力を観察してコマンドの挙動を理解します。最後に、通常は変更を加えるコマンドに dry-run を適用し、システムを変更することなく意図したアクションを確認します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/ls -.-> lab-555069{{"docker compose alpha dry-run コマンドで変更をテストする方法"}} docker/ps -.-> lab-555069{{"docker compose alpha dry-run コマンドで変更をテストする方法"}} docker/create -.-> lab-555069{{"docker compose alpha dry-run コマンドで変更をテストする方法"}} docker/pull -.-> lab-555069{{"docker compose alpha dry-run コマンドで変更をテストする方法"}} docker/images -.-> lab-555069{{"docker compose alpha dry-run コマンドで変更をテストする方法"}} docker/info -.-> lab-555069{{"docker compose alpha dry-run コマンドで変更をテストする方法"}} docker/version -.-> lab-555069{{"docker compose alpha dry-run コマンドで変更をテストする方法"}} docker/network -.-> lab-555069{{"docker compose alpha dry-run コマンドで変更をテストする方法"}} end

シンプルな 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 が以下のアクションを実行予定であることが明確にわかります:

  1. my-compose-app_default という名前のデフォルトネットワークを作成
  2. web という名前のサービスを作成
  3. nginx:latest イメージを取得(ローカルに存在しない場合)
  4. web サービスのために my-compose-app-web-1 という名前のコンテナを作成

実際にはこれらのアクションは一切実行されません。ネットワークは作成されず、イメージは取得されず、コンテナも起動しません。dry-run フラグにより、Docker 環境への実際の変更が防止されます。

この機能は以下の用途で非常に便利です:

  • 変更のプレビュー: 複雑なアプリケーションをデプロイする前に、Docker Compose が実行する正確な手順を確認できます
  • トラブルシューティング: docker-compose up コマンドが失敗する場合、dry-run で初期手順を理解し、設定の潜在的な問題を特定できます
  • 学習: システムに影響を与えずに、さまざまな docker-compose.yaml 設定を試し、その影響を確認できます

dry-run フラグは、downstartstoprm などの他の Docker Compose コマンドでも使用でき、影響を受けるリソースを確認できます。

まとめ

この実験では、まず Docker Compose をインストールし、ディレクトリと基本的な Nginx サービス定義を含む YAML ファイルを作成することで、シンプルな docker-compose.yaml ファイルを準備する方法を学びました。その後、Docker Compose コマンドで dry-run フラグを使用する方法を探求しました。

dry-run フラグを使用することで、システムに実際に変更を加えることなく、コマンドが実行する予定のアクションをプレビューできることを確認しました。これは docker-compose.yaml ファイルの変更をテストしたり、コマンドの実行前の潜在的な影響を理解したりするための貴重なツールです。