Ubuntu20.04にDockerComposeをインストールして使用する方法
序章
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+X
、Y
、ENTER
の順に入力して確認できます。
次に、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アプリケーションを保護する方法を確認してください。 。