序章

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

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

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

前提条件

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

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

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

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

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

次のコマンドを使用してダウンロードします。

  1. mkdir -p ~/.docker/cli-plugins/
  2. curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose

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

  1. chmod +x ~/.docker/cli-plugins/docker-compose

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

  1. docker compose version

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

Output
Docker Compose version v2.2.3

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

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

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

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

  1. mkdir ~/compose-demo
  2. cd ~/compose-demo

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

  1. mkdir app

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

  1. 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ファイルを作成します。

  1. 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サービスのコンテナーを作成し、コンテナー化された環境をバックグラウンドモードで実行します。

  1. docker compose up -d

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

Output
Creating 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コマンドを実行する権限が有効になります。

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

  1. 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 Demo Page

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

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

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

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

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

  1. docker compose logs

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

Output
Attaching 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" "-"

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

  1. docker compose pause
Output
Pausing compose-demo_web_1 ... done

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

  1. docker compose unpause
Output
Unpausing compose-demo_web_1 ... done

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

  1. docker compose stop
Output
Stopping compose-demo_web_1 ... done

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

  1. docker compose down
Output
Removing compose-demo_web_1 ... done Removing network compose-demo_default

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

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

  1. docker image rm nginx:alpine
Output
Untagged: 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アプリケーションを保護する方法を確認してください。