Ubuntu20.04にDockerComposeをインストールして使用する方法

提供:Dev Guides
移動先:案内検索

序章

Dockerは、コンテナー内のアプリケーションプロセスを管理するプロセスを簡素化します。 コンテナは特定の点で仮想マシンに似ていますが、より軽量でリソースに優しいものです。 これにより、開発者はアプリケーション環境を複数の分離されたサービスに分割できます。

複数のサービスに依存するアプリケーションの場合、すべてのコンテナーを調整して、起動、通信、およびシャットダウンを一緒に行うと、すぐに扱いにくくなる可能性があります。 Docker Compose は、YAMLファイルに設定された定義に基づいてマルチコンテナーアプリケーション環境を実行できるようにするツールです。 サービス定義を使用して、ネットワークとデータボリュームを共有できる複数のコンテナを備えた完全にカスタマイズ可能な環境を構築します。

このガイドでは、Ubuntu20.04サーバーにDockerComposeをインストールする方法と、このツールの使用を開始する方法を示します。

前提条件

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

  • sudo権限を持つ非rootユーザーとしてUbuntu20.04ローカルマシンまたは開発サーバーにアクセスします。 リモートサーバーを使用している場合は、アクティブなファイアウォールをインストールすることをお勧めします。 これらを設定するには、 Ubuntu20.04の初期サーバー設定ガイドを参照してください。
  • Ubuntu 20.04にDockerをインストールして使用する方法のステップ1および2に従って、サーバーまたはローカルマシンにDockerをインストールします。

Note: This tutorial will guide you through installing Docker Compose v1, which uses docker-compose. Starting with Docker Compose v2, Docker has migrated towards using the compose CLI plugin command as documented in our latest Ubuntu 22.04 version of this tutorial, and away from the original docker-compose. While the installation differs, in general the actual usage involves dropping the hyphen from docker-compose calls to become docker compose. For full compatibility details, check the official Docker documentation on command compatibility between the new compose and the old docker-compose.


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

Docker Composeの最新の安定バージョンを確実に入手するには、このソフトウェアを公式Githubリポジトリからダウンロードします。

まず、リリースページで入手可能な最新バージョンを確認します。 この記事の執筆時点で、最新の安定バージョンは1.29.2です。

The following command will download the 1.29.2 release and save the executable file at /usr/local/bin/docker-compose, which will make this software globally accessible as docker-compose:

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

次に、docker-composeコマンドが実行可能になるように正しい権限を設定します。

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

インストールが成功したことを確認するには、次のコマンドを実行します。

docker-compose --version

次のような出力が表示されます。

Outputdocker-compose version 1.29.2, build 5becea4c

これで、DockerComposeがシステムに正常にインストールされました。 次のセクションでは、docker-compose.ymlファイルを設定し、このツールを使用してコンテナ化された環境を起動して実行する方法を説明します。

ステップ2—docker-compose.ymlファイルを設定する

docker-compose.ymlファイルを設定してDockerComposeを操作する方法を示すために、 DockerHubの公式Nginxイメージを使用してWebサーバー環境を作成します。パブリックDockerレジストリ。 このコンテナ化された環境は、単一の静的HTMLファイルを提供します。

まず、ホームフォルダに新しいディレクトリを作成し、そこに移動します。

mkdir ~/compose-demo
cd ~/compose-demo

このディレクトリで、Nginx環境のドキュメントルートとして機能するアプリケーションフォルダを設定します。

mkdir app

お好みのテキストエディタを使用して、appフォルダ内に新しいindex.htmlファイルを作成します。

nano app/index.html

このファイルに次のコンテンツを配置します。

〜/ compose-demo / app / index.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Docker Compose Demo</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>

    <h1>This is a Docker Compose Demo Page.</h1>
    <p>This content is being served by an Nginx container.</p>

</body>
</html>

完了したら、ファイルを保存して閉じます。 nanoを使用している場合は、CTRL+XYENTERの順に入力して確認できます。

次に、docker-compose.ymlファイルを作成します。

nano docker-compose.yml

docker-compose.ymlファイルに次のコンテンツを挿入します。

docker-compose.yml

version: '3.7'
services:
  web:
    image: nginx:alpine
    ports:
      - "8000:80"
    volumes:
      - ./app:/usr/share/nginx/html

docker-compose.ymlファイルは通常、version定義で始まります。 これにより、使用している構成バージョンがDockerComposeに通知されます。

次に、servicesブロックがあり、この環境の一部であるサービスをセットアップします。 あなたの場合、webという単一のサービスがあります。 このサービスは、nginx:alpineイメージを使用し、portsディレクティブを使用してポートリダイレクションを設定します。 host マシン(Docker Composeを実行しているシステム)のポート8000でのすべてのリクエストは、ポート[のwebコンテナーにリダイレクトされます。 X172X]、Nginxが実行されます。

volumesディレクティブは、ホストマシンとコンテナの間に共有ボリュームを作成します。 これにより、ローカルのappフォルダーがコンテナーと共有され、ボリュームはコンテナー内の/usr/share/nginx/htmlに配置され、Nginxのデフォルトのドキュメントルートが上書きされます。

ファイルを保存して閉じます。

デモページとdocker-compose.ymlファイルを設定して、それを提供するコンテナー化されたWebサーバー環境を作成しました。 次のステップでは、DockerComposeを使用してこの環境を起動します。

ステップ3—DockerComposeを実行する

docker-compose.ymlファイルを配置したら、DockerComposeを実行して環境を起動できます。 次のコマンドは、必要なDockerイメージをダウンロードし、webサービスのコンテナーを作成し、コンテナー化された環境をバックグラウンドモードで実行します。

docker-compose up -d

Docker Composeは、最初にローカルシステムで定義されたイメージを検索し、イメージが見つからない場合は、DockerHubからイメージをダウンロードします。 次のような出力が表示されます。

OutputCreating network "compose-demo_default" with the default driver
Pulling web (nginx:alpine)...
alpine: Pulling from library/nginx
cbdbe7a5bc2a: Pull complete
10c113fb0c77: Pull complete
9ba64393807b: Pull complete
c829a9c40ab2: Pull complete
61d685417b2f: Pull complete
Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502
Status: Downloaded newer image for nginx:alpine
Creating compose-demo_web_1 ... done

注: Dockerソケットに関する権限エラーが発生した場合は、 Ubuntu20.04にDockerをインストールして使用する方法のステップ2をスキップしたことを意味します。 戻ってその手順を完了すると、sudoなしでdockerコマンドを実行する権限が有効になります。


これで、環境がバックグラウンドで稼働しています。 コンテナがアクティブであることを確認するには、次のコマンドを実行できます。

docker-compose ps

このコマンドは、実行中のコンテナとその状態、および現在実行されているポートリダイレクトに関する情報を表示します。

Output       Name                     Command               State          Ports        
----------------------------------------------------------------------------------
compose-demo_web_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8000->80/tcp

これで、ローカルマシンでこのデモを実行している場合はlocalhost:8000に、リモートサーバーでこのデモを実行している場合はyour_server_domain_or_IP:8000にブラウザを向けることで、デモアプリケーションにアクセスできます。

次のようなページが表示されます。

docker-compose.ymlファイル内に設定した共有ボリュームは、appフォルダーファイルをコンテナーのドキュメントルートと同期させます。 index.htmlファイルに変更を加えると、それらはコンテナによって自動的に取得されるため、ページをリロードするときにブラウザに反映されます。

次のステップでは、DockerComposeコマンドを使用してコンテナ化された環境を管理する方法を説明します。

ステップ4—Docker作成コマンドに精通する

docker-compose.ymlファイルを設定し、docker-compose upを使用して環境を起動する方法を見てきました。 Docker Composeコマンドを使用して、コンテナー化された環境を管理および操作する方法を説明します。

Nginxコンテナによって生成されたログを確認するには、logsコマンドを使用できます。

docker-compose logs

次のような出力が表示されます。

OutputAttaching to compose-demo_web_1
web_1  | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
web_1  | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
web_1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
web_1  | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
web_1  | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
web_1  | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
web_1  | /docker-entrypoint.sh: Configuration complete; ready for start up
web_1  | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"

コンテナの現在の状態を変更せずに環境の実行を一時停止する場合は、次を使用できます。

docker-compose pause
OutputPausing compose-demo_web_1 ... done

一時停止を発行した後に実行を再開するには:

docker-compose unpause
OutputUnpausing compose-demo_web_1 ... done

stopコマンドはコンテナの実行を終了しますが、コンテナに関連付けられているデータは破棄されません。

docker-compose stop
OutputStopping compose-demo_web_1 ... done

このコンテナー化された環境に関連付けられているコンテナー、ネットワーク、およびボリュームを削除する場合は、downコマンドを使用します。

docker-compose down
OutputRemoving compose-demo_web_1 ... done
Removing network compose-demo_default

これにより、Docker Composeが環境を起動するために使用するベースイメージ(この場合はnginx:alpine)が削除されないことに注意してください。 このように、docker-compose upを使用して環境を再起動するときはいつでも、イメージがすでにシステム上にあるため、プロセスがはるかに高速になります。

システムからベースイメージも削除する場合は、次を使用できます。

docker image rm nginx:alpine
OutputUntagged: nginx:alpine
Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912
Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270
Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1
Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157
Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6
Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08
Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a

:Dockerコマンドの詳細については、Dockerのインストールと使用方法に関するガイドを参照してください。


結論

このガイドでは、Docker Composeをインストールし、NginxWebサーバーイメージに基づいてコンテナ化された環境をセットアップする方法を説明しました。 また、作成コマンドを使用してこの環境を管理する方法も確認しました。

使用可能なすべてのdocker-composeコマンドの完全なリファレンスについては、公式ドキュメントを確認してください。

Docker Composeのその他の使用法に興味がある場合は、 DockerComposeを使用してWordPressをインストールする方法およびNginx、Let's Encrypt、DockerComposeを使用してコンテナー化されたNode.jsアプリケーションを保護する方法を確認してください。