前書き
Dockerは、ソフトウェアコンテナー内でのLinuxアプリケーションの展開を自動化するための優れたツールですが、アプリケーションの各コンポーネントが独自のコンテナーで実行される可能性を最大限に活用するには。 多数のコンポーネントを持つ複雑なアプリケーションの場合、すべてのコンテナをまとめて起動、通信、およびシャットダウンするように調整すると、すぐに扱いにくくなります。
Dockerコミュニティは、http://www.fig.sh/ [Fig]と呼ばれる一般的なソリューションを思い付きました。これにより、単一のYAMLファイルを使用して、すべてのDockerコンテナーと構成を調整できます。 これは非常に人気があったため、Dockerチームは、廃止予定のFigソースに基づいてhttps://docs.docker.com/compose/[Docker Compose]を作成することにしました。 Docker Composeを使用すると、ユーザーは、コンテナ内のリンクとボリュームの起動、シャットダウン、セットアップなど、Dockerコンテナのプロセスを簡単に調整できます。
このチュートリアルでは、最新バージョンのDocker Composeをインストールして、Debian 9サーバー上のマルチコンテナアプリケーションを管理する方法を紹介します。
前提条件
この記事を読むには、次のものが必要です。
-
Debian 9サーバーとsudo特権を持つ非rootユーザー。 このhttps://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04[Debian 9チュートリアルによるサーバーの初期セットアップ]は、これを設定する方法を説明しています。
-
How Toの*ステップ1 *および*ステップ2 *の手順でインストールされたDocker Debian 9にDockerをインストールして使用する]
ステップ1-Docker Composeのインストール
公式のDebianリポジトリからDocker Composeをインストールできますが、最新リリースの背後にはいくつかのマイナーバージョンがあるため、DockerのGitHubリポジトリからインストールします。 以下のコマンドは、https://github.com/docker/compose/releases [Releases]ページにあるコマンドとは少し異なります。 出力をリダイレクトするのではなく、最初に出力ファイルを指定するために `+ -o `フラグを使用することにより、この構文は ` sudo +`の使用時に発生する許可拒否エラーの発生を防ぎます。
https://github.com/docker/compose/releases [現在のリリース]を確認し、必要に応じて以下のコマンドで更新します。
sudo curl -L https://github.com/docker/compose/releases/download//docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
次に、アクセス許可を設定します。
sudo chmod +x /usr/local/bin/docker-compose
次に、バージョンを確認して、インストールが成功したことを確認します。
docker-compose --version
これにより、インストールしたバージョンが出力されます。
Outputdocker-compose version , build f46880fe
Docker Composeがインストールされたので、「Hello World」の例を実行する準備ができました。
ステップ2-Docker Composeでコンテナーを実行する
パブリックDockerレジストリDocker Hubには、デモおよびテスト用の_Hello World_イメージが含まれています。 これは、Docker Composeを使用してコンテナーを実行するために必要な最小構成を示しています。単一のイメージを呼び出すYAMLファイルです。 この最小構成を作成して、 `+ hello-world +`コンテナーを実行します。
最初に、YAMLファイルのディレクトリを作成して移動します。
mkdir hello-world
cd hello-world
次に、YAMLファイルを作成します。
nano docker-compose.yml
次の内容をファイルに入れ、ファイルを保存して、テキストエディターを終了します。
docker-compose.yml
my-test:
image: hello-world
YAMLファイルの最初の行は、コンテナー名の一部として使用されます。 2行目は、コンテナの作成に使用するイメージを指定します。 `+ docker-compose up `コマンドを実行すると、指定した名前 ` hello-world +`でローカルイメージを探します。 これを設定したら、ファイルを保存して終了します。
`+ docker images +`コマンドでシステム上の画像を手動で見ることができます:
docker images
ローカル画像がまったくない場合、列見出しのみが表示されます:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
ここで、まだ `+〜/ hello-world +`ディレクトリにいる間に、次のコマンドを実行します。
docker-compose up
コマンドを初めて実行するときに、「+ hello-world」という名前のローカルイメージがない場合、Docker ComposeはDocker Hubパブリックリポジトリからそれを取得します。
OutputPulling my-test (hello-world:)...
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest
. . .
イメージをプルした後、 `+ docker-compose +`はコンテナーを作成し、アタッチし、https://github.com/docker-library/hello-world/blob/85fd7ab65e079b08019032479a3f306964a28f4d/hello-world/Dockerfile [hello]プログラムを実行します。これにより、インストールが機能しているように見えることが確認されます。
Output. . .
Creating helloworld_my-test_1...
Attaching to helloworld_my-test_1
my-test_1 |
my-test_1 | Hello from Docker.
my-test_1 | This message shows that your installation appears to be working correctly.
my-test_1 |
. . .
次に、実行内容の説明を出力します。
Output To generate this message, Docker took the following steps:
my-test_1 | 1. The Docker client contacted the Docker daemon.
my-test_1 | 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
my-test_1 | (amd64)
my-test_1 | 3. The Docker daemon created a new container from that image which runs the
my-test_1 | executable that produces the output you are currently reading.
my-test_1 | 4. The Docker daemon streamed that output to the Docker client, which sent it
my-test_1 | to your terminal.
Dockerコンテナはコマンドがアクティブである間のみ実行されるため、「+ hello 」の実行が終了すると、コンテナは停止しました。 したがって、アクティブなプロセスを見ると、列ヘッダーが表示されますが、実行されていないため、 ` hello-world +`コンテナーはリストされません。
docker ps
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
`+ -a +`フラグを使用して、次のステップで必要になるコンテナ情報を確認できます。 これにより、アクティブなコンテナだけでなく、すべてのコンテナが表示されます。
docker ps -a
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06069fd5ca23 hello-world "/hello" 35 minutes ago Exited (0) 35 minutes ago hello-world_my-test_1
これにより、作業が完了したときにコンテナを削除するために必要な情報が表示されます。
手順3-イメージの削除(オプション)
不要なディスク領域を使用しないように、ローカルイメージを削除します。 これを行うには、「+ docker rm 」コマンドを使用して画像を参照するすべてのコンテナを削除し、その後に「 CONTAINER ID 」または「 NAME 」を追加する必要があります。 以下では、実行したばかりの ` docker ps -a `コマンドの ` CONTAINER ID +`を使用しています。 コンテナのIDを必ず置き換えてください:
docker rm
イメージを参照するすべてのコンテナが削除されたら、イメージを削除できます。
docker rmi hello-world
結論
Docker Composeをインストールし、Hello Worldの例を実行してインストールをテストし、テストイメージとコンテナーを削除しました。
Hello Worldの例ではインストールが確認されましたが、シンプルな構成ではDocker Composeの主な利点の1つは示されていません-Dockerコンテナーのグループを同時に上下させることができます。 Docker Composeの機能を実際に見るには、この実用的な例をご覧ください。https://www.digitalocean.com/community/tutorials/how-to-configure-a-continuous-integration-testing-environment- with-docker-and-docker-compose-on-ubuntu-16-04 [Ubuntu 16.04でDockerおよびDocker Composeを使用して継続的統合テスト環境を構成する方法]。