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の手順に従ってインストールされます。
注:このチュートリアルでは、DockerComposev1のインストールについて説明します。 docker-compose
. Docker Compose v2以降、Dockerは compose
このチュートリアルの最新のUbuntu22.04バージョンに記載されているCLIプラグインコマンドで、元のコマンドとは異なります。 docker-compose
. インストールは異なりますが、通常、実際の使用法では、からハイフンを削除します。 docker-compose
になるための呼び出し docker compose
. 互換性の詳細については、新しいDocker間のコマンド互換性に関するDockerの公式ドキュメントを確認してください。 compose
と古い docker-compose
.
ステップ1—DockerComposeをインストールする
Docker Composeは公式のUbuntuリポジトリからインストールできますが、最新リリースの背後にあるいくつかのマイナーバージョンであるため、DockerのGitHubリポジトリからDockerComposeをインストールします。 以下のコマンドは、リリースページにあるコマンドとは少し異なります。 を使用して -o
出力をリダイレクトするのではなく、最初に出力ファイルを指定するフラグ。この構文は、使用時に発生するアクセス許可拒否エラーに遭遇することを回避します。 sudo
.
現在のリリースを確認し、必要に応じて、以下のコマンドで更新してください。
- sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/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 1.29.2, build 5becea4c
Docker Composeがインストールされたので、「HelloWorld」の例を実行する準備が整いました。
ステップ2—DockerComposeを使用してコンテナーを実行する
パブリックDockerレジストリであるDockerHubには、デモンストレーションとテスト用の HelloWorldイメージが含まれています。 これは、DockerComposeを使用してコンテナーを実行するために必要な最小限の構成を示しています。単一のイメージを呼び出すYAMLファイルです。
まず、YAMLファイルのディレクトリを作成し、そこに移動します。
- mkdir hello-world
- cd hello-world
次に、YAMLファイルを作成します。
- nano 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
、DockerComposeはDockerHubパブリックリポジトリからプルします。
OutputPulling my-test (hello-world:latest)...
latest: Pulling from library/hello-world
c04b14da8d14: Downloading [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest
. . .
注: Dockerソケットに関する権限エラーが発生した場合は、 Ubuntu18.04にDockerをインストールして使用する方法のステップ2をスキップしたことを意味します。 戻ってその手順を完了すると、dockerコマンドを実行する権限が有効になります。 sudo
.
画像をプルした後、 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 of docker-compose up. . .
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
. . .
Dockerコンテナーは、コマンドがアクティブである間のみ実行されるため、1回 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 drunk_payne
これにより、コンテナを使い終わったときにコンテナを削除するために必要な情報が表示されます。
手順3—画像の削除(オプション)
不要なディスク領域を使用しないように、ローカルイメージを削除します。 これを行うには、を使用して画像を参照するすべてのコンテナを削除する必要があります docker rm
コマンドの後に、CONTAINERIDまたはNAMEのいずれかが続きます。 以下では、からのCONTAINERIDを使用しています。 docker ps -a
実行したコマンド。 必ずコンテナのIDに置き換えてください。
- docker rm 06069fd5ca23
イメージを参照するすべてのコンテナーが削除されたら、イメージを削除できます。
- docker rmi hello-world
結論
これで、Docker Composeがインストールされ、Hello Worldの例を実行してインストールをテストし、テストイメージとコンテナーを削除しました。
Hello Worldの例ではインストールが確認されていますが、単純な構成では、DockerComposeの主な利点の1つは示されていません。Dockerコンテナーのグループを同時に上下させることができます。 Docker Composeの実際の機能を確認するには、この実用的な例 Ubuntu 16.04 でDockerとDockerComposeを使用して継続的インテグレーションテスト環境を構成する方法(注:この記事)を確認してください。 18.04ではなくUbuntu16.04用です)