はじめに
この実験では、マルチコンテナ Docker アプリケーションを管理するために docker-compose start コマンドを使用する方法を学びます。まず、サービスを定義するシンプルな docker-compose.yml ファイルを作成します。
compose ファイルの作成後、単一のコマンドを使用して定義されたすべてのサービスを起動する練習を行います。最後に、compose 設定から特定のサービスを選択的に起動する方法を学びます。この実践的な経験を通じて、Docker Compose プロジェクトを効果的に管理するための基本的なスキルを身につけることができます。
シンプルな docker-compose.yml ファイルを作成
このステップでは、シンプルな docker-compose.yml ファイルを作成します。Docker Compose は、マルチコンテナ Docker アプリケーションを定義および実行するためのツールです。Compose では YAML ファイルを使用してアプリケーションのサービスを設定し、単一のコマンドで設定からすべてのサービスを作成・起動できます。
docker-compose.yml ファイルを作成する前に、Docker Compose をインストールする必要があります。LabEx 環境にはプリインストールされていないため、pip を使用してインストールします。
まず、パッケージリストを更新し、pip がインストールされていない場合はインストールします。
sudo apt update
sudo apt install -y python3-pip
次に、pip を使用して Docker Compose をインストールします。
pip install docker-compose
インストールが完了したら、Docker Compose のバージョンを確認してインストールを検証できます。
docker-compose --version
docker-compose version 1.29.2, build 5becea4c のような出力が表示されるはずです。
Docker Compose がインストールされたので、プロジェクト用のディレクトリを作成し、その中に移動します。このディレクトリ内に docker-compose.yml ファイルを作成します。
mkdir ~/project/my-compose-app
cd ~/project/my-compose-app
次に、nano エディタを使用して docker-compose.yml ファイルを作成します。
nano docker-compose.yml
nano エディタ内に以下の内容を貼り付けます。この docker-compose.yml ファイルは、nginx イメージを使用し、コンテナのポート 80 をホストマシンのポート 8080 にマッピングする web という単一のサービスを定義しています。
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8080:80"
このファイルの内容を分解してみましょう:
version: '3.8'- Compose ファイルフォーマットのバージョンを指定services:- アプリケーションを構成するさまざまなサービスを定義web:- サービスの名前(任意の名前を選択可能)image: nginx:latest- このサービスで使用する Docker イメージ(最新版の公式 Nginx イメージ)ports:- ホストとコンテナ間のポートマッピング- "8080:80"- コンテナ内のポート 80(Nginx のデフォルトポート)をホストのポート 8080 にマッピング。これにより、Web ブラウザでhttp://localhost:8080にアクセス(またはターミナルからcurlを使用)して Nginx Web サーバーにアクセス可能
ファイルを保存するには、Ctrl + X、次に Y、そして Enter を押します。
cat コマンドを使用してファイルの内容を確認できます。
cat docker-compose.yml
貼り付けた YAML コンテンツが表示されるはずです。
compose ファイルで定義された全サービスを起動
このステップでは、docker-compose.ymlファイルで定義されたすべてのサービスを起動します。この目的のためにdocker-compose upコマンドを使用します。
まず、docker-compose.ymlファイルを作成したディレクトリにいることを確認してください。
cd ~/project/my-compose-app
次に、docker-compose upコマンドを実行します。-dフラグはコンテナをデタッチドモードで実行し、バックグラウンドで動作させてターミナルをブロックしません。
docker-compose up -d
このコマンドを初めて実行すると、Docker Compose は以下の処理を行います:
- カレントディレクトリの
docker-compose.ymlファイルを探す - サービス定義を読み込む
- 各サービスについて、指定されたイメージがローカルに存在するか確認。存在しない場合、Docker Hub からイメージをプル。今回のケースでは
nginx:latestイメージをプル - 各サービスのコンテナを作成して起動
イメージがプルされ、コンテナが作成・起動されることを示す出力が表示されます。
Pulling web (nginx:latest)...
latest: Pulling from library/nginx
... (イメージレイヤーのダウンロードを示す出力)
Status: Downloaded newer image for nginx:latest
Creating my-compose-app_web_1 ... done
コマンドが完了したら、docker psコマンドを使用してコンテナが実行中か確認できます。
docker ps
webコンテナのエントリが表示され、イメージはnginx:latest、ステータスはUpとなっているはずです。コンテナ名はmy-compose-app_web_1のような形式になります。
Nginx サーバーが実行中でアクセス可能かさらに確認するには、curlコマンドを使用してホストマシンのポート 8080 で Web サーバーにアクセスします。
curl http://localhost:8080
ターミナルに Nginx のデフォルトウェルカムページの HTML 出力が表示されるはずです。これにより、コンテナが正常に実行されており、ポートマッピングが正しく機能していることが確認できます。
compose ファイルで定義された特定サービスを起動
前のステップでは、docker-compose upを使用してdocker-compose.ymlファイルで定義されたすべてのサービスを起動しました。このステップでは、Compose ファイルに複数のサービスが定義されている場合に特定のサービスを起動する方法を学びます。
現在のdocker-compose.ymlには 1 つのサービス (web) しかありませんが、特定のサービスを起動するコマンドは、Web サーバー、データベース、バックエンド API など、複数のサービスを持つより複雑なアプリケーションで役立ちます。
まず、現在実行中のサービスを停止しましょう。docker-compose downコマンドを使用できます。このコマンドはupで作成されたコンテナ、ネットワーク、ボリュームを停止して削除します。
~/project/my-compose-appディレクトリにいることを確認してください。
cd ~/project/my-compose-app
次に、docker-compose downコマンドを実行します。
docker-compose down
コンテナとネットワークが停止・削除されることを示す出力が表示されます。
Stopping my-compose-app_web_1 ... done
Removing my-compose-app_web_1 ... done
Removing network my-compose-app_default
docker psを実行してコンテナが停止したことを確認できます。compose ファイルからの実行中コンテナは表示されないはずです。
docker ps
では、特定のサービスを起動する方法を実演しましょう。コマンドはdocker-compose up <service_name>です。今回のケースではサービス名はwebです。再び-dフラグを使用してデタッチドモードで実行します。
docker-compose up -d web
このコマンドはdocker-compose.ymlファイルで定義されたwebサービスのみを起動します。前のステップですでにイメージがプルされているため、直接コンテナを作成して起動します。
以下のような出力が表示されます:
Creating my-compose-app_web_1 ... done
再度docker psを使用してwebコンテナが実行中か確認できます。
docker ps
my-compose-app_web_1コンテナがUpステータスでリスト表示されるはずです。
これで、docker-compose.ymlファイルで定義されたサービスを選択的に起動する方法が示されました。これはより複雑なマルチサービスアプリケーションを管理する際に役立ちます。
まとめ
この実験では、docker-compose startコマンドの使用方法を学びました。最初にシンプルなdocker-compose.ymlファイルを作成しました。これにはpipを使用した Docker Compose のインストール、インストールの確認、プロジェクトディレクトリの作成、そしてdocker-compose.ymlファイル自体の作成が含まれていました。作成したファイルは、nginxイメージを使用しポートマッピングを行ったwebという単一サービスを定義しています。
提供された内容では完全に詳細が記述されていませんでしたが、その後のステップでは、docker-compose startコマンドを使用して、compose ファイルで定義されたすべてのサービスを起動するか、特定のサービスを起動する方法が含まれていたでしょう。これは、Compose ファイルで定義されたマルチコンテナアプリケーションのライフサイクルを管理するためのdocker-compose startコマンドのコア機能を示しています。



