序章

Docker は、ソフトウェアコンテナー内でのLinuxアプリケーションのデプロイを自動化するための優れたツールですが、その可能性を最大限に活用するには、アプリケーションの各コンポーネントを独自のコンテナーで実行する必要があります。 多くのコンポーネントを含む複雑なアプリケーションの場合、すべてのコンテナーを調整して、起動、通信、およびシャットダウンを一緒に行うと、すぐに扱いにくくなる可能性があります。

Dockerコミュニティは、 Fig と呼ばれる人気のあるソリューションを考案しました。これにより、単一のYAMLファイルを使用してすべてのDockerコンテナーと構成を調整できます。 これは非常に人気があったため、DockerチームはFigソースに基づいて DockerComposeを作成することを決定しました。これは現在非推奨です。 Docker Composeを使用すると、ユーザーは、コンテナー内のリンクとボリュームの起動、シャットダウン、セットアップなど、Dockerコンテナーのプロセスを簡単に調整できます。

このチュートリアルでは、Debian9サーバーでマルチコンテナーアプリケーションを管理するのに役立つ最新バージョンのDockerComposeをインストールする方法を示します。

前提条件

この記事をフォローするには、次のものが必要です。

  • Debian9サーバーとsudo権限を持つroot以外のユーザー。 このDebian9チュートリアルを使用した初期サーバー設定では、これを設定する方法について説明しています。
  • Dockerは、 Debian9にDockerをインストールして使用する方法のステップ1およびステップ2の手順に従ってインストールされます

注:前提条件にDebian 9にDockerをインストールする手順が記載されていますが、この記事のdockerコマンドは、Dockerがインストールされている限り他のオペレーティングシステムでも機能します。

ステップ1—DockerComposeをインストールする

Docker Composeは公式のDebianリポジトリからインストールできますが、最新リリースよりもいくつかのマイナーバージョンであるため、DockerのGitHubリポジトリからインストールします。 以下のコマンドは、リリースページにあるコマンドとは少し異なります。 -oフラグを使用して、出力をリダイレクトするのではなく、最初に出力ファイルを指定することにより、この構文は、sudoの使用時に発生する許可拒否エラーに遭遇することを回避します。

現在のリリースを確認し、必要に応じて、以下のコマンドで更新します。

  1. sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

次に、権限を設定します。

  1. sudo chmod +x /usr/local/bin/docker-compose

次に、バージョンを確認して、インストールが成功したことを確認します。

  1. docker-compose --version

これにより、インストールしたバージョンが出力されます。

Output
docker-compose version 1.22.0, build f46880fe

Docker Composeがインストールされたので、「HelloWorld」の例を実行する準備が整いました。

ステップ2—DockerComposeを使用してコンテナーを実行する

パブリックDockerレジストリであるDockerHubには、デモンストレーションとテスト用の HelloWorldイメージが含まれています。 これは、DockerComposeを使用してコンテナーを実行するために必要な最小限の構成を示しています。単一のイメージを呼び出すYAMLファイルです。 hello-worldコンテナを実行するために、この最小限の構成を作成します。

まず、YAMLファイルのディレクトリを作成し、そこに移動します。

  1. mkdir hello-world
  2. cd hello-world

次に、YAMLファイルを作成します。

  1. nano docker-compose.yml

次の内容をファイルに入れ、ファイルを保存して、テキストエディタを終了します。

docker-compose.yml
my-test:
 image: hello-world

YAMLファイルの最初の行は、コンテナー名の一部として使用されます。 2行目は、コンテナの作成に使用するイメージを指定します。 docker-compose upコマンドを実行すると、指定した名前hello-worldでローカルイメージが検索されます。 これが整ったら、ファイルを保存して終了します。

docker imagesコマンドを使用して、システム上の画像を手動で確認できます。

  1. docker images

ローカル画像がまったくない場合は、列見出しのみが表示されます。

Output
REPOSITORY TAG IMAGE ID CREATED SIZE

ここで、~/hello-worldディレクトリにいる間に、次のコマンドを実行します。

  1. docker-compose up

コマンドを初めて実行するときに、hello-worldという名前のローカルイメージがない場合、DockerComposeはDockerHubパブリックリポジトリからコマンドをプルします。

Output
Pulling 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はコンテナーを作成し、接続して 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コンテナーは実行されていないため、リストされません。

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

-aフラグを使用すると、次のステップで必要になるコンテナ情報を確認できます。 これにより、アクティブなコンテナだけでなく、すべてのコンテナが表示されます。

  1. docker ps -a
Output
CONTAINER 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に置き換えてください。

  1. docker rm 06069fd5ca23

画像を参照するすべてのコンテナが削除されたら、画像を削除できます。

  1. docker rmi hello-world

結論

これで、Docker Composeをインストールし、Hello Worldの例を実行してインストールをテストし、テストイメージとコンテナーを削除しました。

Hello Worldの例ではインストールが確認されていますが、単純な構成では、DockerComposeの主な利点の1つは示されていません。Dockerコンテナーのグループを同時に上下させることができます。 Docker Composeの実際の動作を確認するには、この実用的な例 Ubuntu16.04でDockerとDockerComposeを使用して継続的インテグレーションテスト環境を構成する方法を確認してください。