Ubuntu18.04にDockerComposeをインストールする方法
序章
Docker は、ソフトウェアコンテナー内でのLinuxアプリケーションのデプロイを自動化するための優れたツールですが、その可能性を最大限に活用するには、アプリケーションの各コンポーネントを独自のコンテナーで実行する必要があります。 多くのコンポーネントを含む複雑なアプリケーションの場合、すべてのコンテナーを調整して、起動、通信、およびシャットダウンを一緒に行うと、すぐに扱いにくくなる可能性があります。
Dockerコミュニティは、 Fig と呼ばれる人気のあるソリューションを考案しました。これにより、単一のYAMLファイルを使用してすべてのDockerコンテナーと構成を調整できます。 これは非常に人気があったため、DockerチームはFigソースに基づいて DockerComposeを作成することを決定しました。これは現在非推奨です。
Docker Composeを使用すると、ユーザーは、コンテナー内のリンクとボリュームの起動、シャットダウン、セットアップなど、Dockerコンテナーのプロセスを簡単に調整できます。 このチュートリアルでは、最新バージョンのDocker Composeをインストールして、マルチコンテナーアプリケーションを管理します。
前提条件
この記事をフォローするには、次のUbuntu18.04サーバーが必要です。
- sudo権限を持つroot以外のユーザー( Ubuntu 18.04 を使用した初期サーバーセットアップでは、これをセットアップする方法について説明しています。)
- Dockerは、 Ubuntu18.04にDockerをインストールして使用する方法のステップ1およびステップ2の手順に従ってインストールされます。
これらが配置されたら、フォローする準備ができています。
注:前提条件にUbuntu 18.04にDockerをインストールする手順が記載されていますが、この記事のdocker
コマンドは、Dockerがインストールされている限り他のオペレーティングシステムでも機能します。
ステップ1—DockerComposeをインストールする
Docker Composeは公式のUbuntuリポジトリからインストールできますが、最新リリースの背後にあるいくつかのマイナーバージョンであるため、DockerのGitHubリポジトリからDockerComposeをインストールします。
現在のリリースを確認し、必要に応じて、以下のコマンドで更新してください。
- mkdir -p ~/.docker/cli-plugins/
- curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
次に、権限を設定します。
- chmod +x ~/.docker/cli-plugins/docker-compose
次に、バージョンを確認して、インストールが成功したことを確認します。
- docker compose version
これにより、インストールしたバージョンが印刷されます。
OutputDocker Compose version v2.2.3
Docker Composeがインストールされたので、「HelloWorld」の例を実行する準備が整いました。
ステップ2—DockerComposeを使用してコンテナーを実行する
パブリックDockerレジストリであるDockerHubには、デモンストレーションとテスト用の HelloWorldイメージが含まれています。 これは、DockerComposeを使用してコンテナーを実行するために必要な最小限の構成を示しています。単一のイメージを呼び出すYAMLファイルです。
まず、YAMLファイルのディレクトリを作成し、そこに移動します。
- mkdir hello-world
- cd hello-world
次に、YAMLファイルを作成します。
- nano docker-compose.yml
次の内容をファイルに入れ、ファイルを保存して、テキストエディタを終了します。
services:
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
という名前のローカルイメージがない場合、DockerComposeはDockerHubパブリックリポジトリからコマンドをプルします。
Output[+] Running 2/2
- my-test Pulled 2.2s
- 2db29710123e Pull complete 0.5s
[+] Running 2/2
- Network hello-world_default Created 0.1s
- Container hello-world-my-test-1 Created 0.1s
. . .
注: Dockerソケットに関する権限エラーが発生した場合は、 Ubuntu18.04にDockerをインストールして使用する方法のステップ2をスキップしたことを意味します。 戻ってその手順を完了すると、sudo
なしでdockerコマンドを実行する権限が有効になります。
イメージをプルした後、docker compose
はコンテナーを作成し、接続して hello プログラムを実行します。これにより、インストールが機能しているように見えることが確認されます。
Output. . .
Attaching to hello-world-my-test-1
hello-world-my-test-1 |
hello-world-my-test-1 | Hello from Docker!
hello-world-my-test-1 | This message shows that your installation appears to be working correctly.
hello-world-my-test-1 |
. . .
次に、それが何をしたかの説明を出力します。
Output of docker compose up. . .
hello-world-my-test-1 | To generate this message, Docker took the following steps:
hello-world-my-test-1 | 1. The Docker client contacted the Docker daemon.
hello-world-my-test-1 | 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
hello-world-my-test-1 | (amd64)
hello-world-my-test-1 | 3. The Docker daemon created a new container from that image which runs the
hello-world-my-test-1 | executable that produces the output you are currently reading.
hello-world-my-test-1 | 4. The Docker daemon streamed that output to the Docker client, which sent it
hello-world-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
ce0b59a18650 hello-world "/hello" 48 seconds ago Exited (0) 46 seconds ago hello-world-my-test-1
これにより、コンテナを使い終わったときにコンテナを削除するために必要な情報が表示されます。
手順3—画像の削除(オプション)
不要なディスク容量を使用しないように、ローカルイメージを削除します。 そのためには、docker rm
コマンドに続けて、CONTAINER IDまたはNAMEのいずれかを使用して、イメージを参照するすべてのコンテナーを削除する必要があります。 以下では、実行したdocker ps -a
コマンドのCONTAINERIDを使用しています。 必ずコンテナのIDに置き換えてください。
- docker rm ce0b59a18650
イメージを参照するすべてのコンテナが削除されたら、イメージを削除できます。
- docker rmi hello-world
結論
これで、Docker Composeがインストールされ、Hello Worldの例を実行してインストールをテストし、テストイメージとコンテナーを削除しました。
Hello Worldの例ではインストールが確認されていますが、単純な構成では、DockerComposeの主な利点の1つは示されていません。Dockerコンテナーのグループを同時に上下させることができます。 Docker Composeの実際の動作を確認するには、この実用的な例 Ubuntu 16.04 でDockerとDockerComposeを使用して継続的インテグレーションテスト環境を構成する方法を確認してください(注:この記事18.04ではなくUbuntu16.04用です)