Dockerは、コンテナー内のアプリケーションプロセスを管理するプロセスを簡素化します。コンテナは特定の点で仮想マシンに似ていますが、より軽量でリソースに優しいものです。これにより、開発者はアプリケーション環境を複数の分離されたサービスに分割できます。
複数のサービスに依存するアプリケーションの場合、すべてのコンテナーを調整して、起動、通信、およびシャットダウンを一緒に行うと、すぐに扱いにくくなる可能性があります。 Docker Composeは、YAMLファイルに設定された定義に基づいてマルチコンテナーアプリケーション環境を実行できるようにするツールです。サービス定義を使用して、ネットワークとデータボリュームを共有できる複数のコンテナを備えた完全にカスタマイズ可能な環境を構築します。
このガイドでは、Ubuntu20.04サーバーにDockerComposeをインストールする方法と、このツールの使用を開始する方法を示します。
この記事をフォローするには、次のものが必要です。
- sudo権限を持つ非rootユーザーとしてUbuntu20.04ローカルマシンまたは開発サーバーにアクセスします。リモートサーバーを使用している場合は、アクティブなファイアウォールをインストールすることをお勧めします。これらを設定するには、Ubuntu20.04の初期サーバー設定ガイドを参照してください。
- 手順1と2に従って、サーバーまたはローカルマシンにDockerをインストールします Ubuntu20.04にDockerをインストールして使用する方法について説明します。
注: このチュートリアルでは、 docker-compose
を使用するDockerComposev1のインストールについて説明します。 。 Docker Compose v2以降、Dockerは compose
の使用に移行しました。 このチュートリアルの最新のUbuntu22.04バージョンに記載されている、元の docker-compose
から離れたCLIプラグインコマンド 。インストールは異なりますが、通常、実際の使用法では、 docker-compose
からハイフンを削除します。 docker compose
になるための呼び出し 。完全な互換性の詳細については、新しい compose
間のコマンドの互換性に関するDockerの公式ドキュメントを確認してください。 そして古いdocker-compose
。
Docker Composeの最新の安定バージョンを確実に入手するには、このソフトウェアを公式のGithubリポジトリからダウンロードします。
まず、リリースページで入手可能な最新バージョンを確認します。この記事の執筆時点で、最新の安定バージョンは 1.29.2
です。 。
次のコマンドは、 1.29.2
をダウンロードします 実行可能ファイルをリリースして、 / usr / local / bin / docker-compose
に保存します。 、これにより、このソフトウェアは 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
が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
を設定する方法を説明します ファイルを作成し、このツールを使用してコンテナ化された環境を稼働させます。
docker-compose.yml
を設定する ファイル
docker-compose.yml
を設定する方法を示すため ファイルを作成し、Docker Composeを使用して、パブリックDockerレジストリであるDockerHubの公式Nginxイメージを使用してウェブサーバー環境を作成します。このコンテナ化された環境は、単一の静的HTMLファイルを提供します。
まず、ホームフォルダに新しいディレクトリを作成し、そこに移動します。
- mkdir ~/compose-demo
- cd ~/compose-demo
このディレクトリで、Nginx環境のドキュメントルートとして機能するアプリケーションフォルダを設定します。
- mkdir app
お好みのテキストエディタを使用して、新しい index.html
を作成します app
内のファイル フォルダ:
- 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
に挿入します ファイル:
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
を使用してポートリダイレクションを設定します 指令。ポート8000
でのすべてのリクエスト ホストの マシン(Docker Composeを実行しているシステム)は web
にリダイレクトされます ポート80
のコンテナ 、Nginxが実行される場所。
ボリューム
ディレクティブは、ホストマシンとコンテナの間に共有ボリュームを作成します。これにより、ローカルの app
が共有されます コンテナのあるフォルダ。ボリュームは/usr / share / nginx / html
にあります。 コンテナ内。Nginxのデフォルトのドキュメントルートが上書きされます。
ファイルを保存して閉じます。
デモページとdocker-compose.yml
を設定しました それを提供するコンテナ化されたWebサーバー環境を作成するためのファイル。次のステップでは、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
内に設定した共有ボリューム ファイルはアプリ
を保持します コンテナのドキュメントルートと同期しているフォルダファイル。 index.html
に変更を加えた場合 ファイルの場合、それらはコンテナによって自動的に取得されるため、ページをリロードするときにブラウザに反映されます。
次のステップでは、DockerComposeコマンドを使用してコンテナ化された環境を管理する方法を説明します。
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をインストールし、Nginxウェブサーバーイメージに基づいてコンテナ化された環境をセットアップする方法を説明しました。作成コマンドを使用してこの環境を管理する方法も確認しました。
利用可能なすべてのdocker-compose
の完全なリファレンスについては コマンドについては、公式ドキュメントを確認してください。
Docker Composeのその他の使用法に興味がある場合は、Docker Composeを使用してWordPressをインストールする方法と、Nginx、Let’s Encrypt、DockerComposeを使用してコンテナー化されたNode.jsアプリケーションを保護する方法を確認してください。