Rocky Linux 9でDocker Composeをインストールして使用する方法
イントロダクション
Dockerは、コンテナ内でアプリケーションプロセスを管理するプロセスを簡素化します。コンテナは仮想マシンと似ていますが、より軽量でリソースを効率的に利用します。これにより、開発者はアプリケーション環境を複数の分離されたサービスに分割することができます。
複数のサービスに依存するアプリケーションでは、コンテナを一緒に起動、通信、シャットダウンさせることはすぐに煩雑になります。Docker Composeは、YAMLファイルで設定された定義に基づいて、複数コンテナのアプリケーション環境を実行するツールです。サービスの定義を使用して、ネットワークとデータボリュームを共有できる複数コンテナを持つ、完全にカスタマイズ可能な環境を構築します。
このガイドでは、Rocky Linux 9 サーバーに Docker Compose をインストールし、このツールの使用を始める方法を説明します。
前提条件
この記事を参考にするためには、次のものが必要です。
- Access to a Rocky Linux 9 local machine or development server as a non-root user with sudo privileges. If you’re using a remote server, it’s advisable to have an active firewall installed. To set these up, please refer to our Initial Server Setup Guide for Rocky Linux 9.
- Docker installed on your server or local machine, following Steps 1 and 2 of How To Install and Use Docker on Rocky Linux 9.
ステップ1—Docker Composeのインストール
最新の安定版のDocker Composeを入手するために、公式のDockerリポジトリからこのソフトウェアをダウンロードします。
最初に、パッケージデータベースをアップデートしましょう。
- sudo dnf check-update
次に、Dockerのインストール中に行っていない場合は、公式のDockerリポジトリを追加してください。
- sudo dnf config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
Rocky Linuxには特定のRocky Linux専用のDockerリポジトリはありませんが、Rocky LinuxはCentOSを基にしており、同じリポジトリを使用することができます。これにより、DockerのプラグインであるDocker Composeをインストールすることができます。
- sudo dnf install docker-compose-plugin
インストールが成功したか確認するためには、次のコマンドを実行できます。
- docker compose version
これと似たような出力を見ることができます。
Docker Compose version v2.10.2
次のセクションでは、docker-compose.ymlファイルのセットアップ方法とこのツールを使用してコンテナ環境を設定し、実行する方法を確認します。
ステップ2:docker-compose.ymlファイルの設定を行います。
Docker Composeと一緒にdocker-compose.ymlファイルを設定し、Nginx公式イメージ(Docker Hubの公開Dockerレジストリ)を使用してウェブサーバー環境を作成します。このコンテナ環境は、単一の静的HTMLファイルを提供します。
最初にホームフォルダ内に新しいディレクトリを作成して、そのディレクトリに移動してください。
- mkdir ~/compose-demo
- cd ~/compose-demo
このディレクトリに、Nginx環境のドキュメントルートとして機能するアプリケーションのフォルダをセットアップしてください。
- mkdir app
あなたの好きなテキストエディタを使って、アプリフォルダ内に新しいindex.htmlファイルを作成してください。
- nano app/index.html
ファイルに以下の内容を入れてください。
以下は日本語で自然な言い方です。複数形はありません。
~/compose-demo/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 を日本語で言い換えると:
ドッカーコンポーズ.yml
version: '3.7'
services:
web:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./app:/usr/share/nginx/html
通常、docker-compose.ymlファイルはバージョンの定義から始まります。これによって、Docker Composeが使用している設定バージョンがわかります。
次に、サービスブロックがあります。ここでは、この環境の一部となるサービスを設定します。お客様の場合、webという単一のサービスがあります。このサービスは、nginx:alpineのイメージを使用し、ポートのリダイレクトをポートディレクティブで設定しています。ホストマシン(Docker Composeを実行しているシステム)のポート8000上のすべてのリクエストは、ポート80上で動作するwebコンテナにリダイレクトされます。ここでNginxが実行されています。
ボリュームディレクティブは、ホストマシンとコンテナの間に共有ボリュームを作成します。これにより、ローカルのアプリフォルダがコンテナと共有され、そのボリュームはコンテナ内の/usr/share/nginx/htmlに配置されます。そして、これによってNginxのデフォルトのドキュメントルートが上書きされます。
ファイルを保存して閉じてください。
デモページとdocker-compose.ymlファイルを設定して、コンテナ化されたウェブサーバー環境を作成しました。次のステップでは、Docker Composeを使用してこの環境を起動します。
ステップ3- Docker Composeを実行する
docker-compose.ymlファイルの配置が完了したら、Docker Composeを実行して環境を立ち上げることができます。次のコマンドを実行すると、必要なDockerイメージがダウンロードされ、Webサービス用のコンテナが作成され、コンテナ化された環境がバックグラウンドモードで実行されます。
- docker compose up -d
Docker Composeはまず、定義されたイメージをローカルシステムで探し、イメージが見つからない場合はDocker Hubからイメージをダウンロードします。次のような出力が表示されます。
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
Note
現在、背景で環境が起動しています。コンテナがアクティブかどうかを確認するために、次のコマンドを実行できます。
- docker compose ps
このコマンドは、実行中のコンテナとその状態に関する情報、および現在設定されているポートのリダイレクションを表示します。
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ファイルに変更を加えると、コンテナが自動的にこれを検知し、ページをリロードする際にブラウザ上に反映されます。
次のステップでは、Docker Composeコマンドを使用してコンテナ化された環境を管理する方法を説明します。
ステップ4 – Docker Composeコマンドの使い方を覚える
Docker-compose.ymlファイルのセットアップとdocker compose upコマンドで環境を立ち上げる方法をご覧いただきました。次に、Docker Composeコマンドを使用してコンテナ化された環境を管理し、対話する方法を確認します。
Nginxコンテナで生成されたログを確認するためには、ログコマンドを使用できます。
- docker compose logs
これに似た出力が表示されます。
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” “-”
現在のコンテナの状態を変更せずに環境の実行を一時停止したい場合は、次の方法を使用できます。
- docker compose pause
Pausing compose-demo_web_1 … done
一時停止を発行した後、実行を再開するには:
- docker compose unpause
Unpausing compose-demo_web_1 … done
「停止コマンドはコンテナの実行を終了しますが、コンテナに関連付けられたデータは破壊されません。」
- docker compose stop
Stopping compose-demo_web_1 … done
このコンテナ化された環境に関連するコンテナ、ネットワーク、およびボリュームを削除したい場合は、ダウンコマンドを使用してください。
- docker compose down
Removing compose-demo_web_1 … done Removing network compose-demo_default
次に、これはDocker Composeによって使用されるベースイメージ(あなたの場合、nginx:alpine)は削除されませんことに注意してください。それによって、docker compose upで環境を再起動するたびに、イメージが既にシステムに存在しているため、プロセスがはるかに高速になります。
基本イメージもシステムから削除したい場合は、次のコマンドを使用できます。
- docker image rm nginx:alpine
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
Note
以下のように改めてください。
注意:Dockerコマンドに関する詳細な参考情報については、「Dockerのインストールと使用方法ガイド」を参照してください。
結論
このガイドでは、Docker Composeのインストール方法とNginxウェブサーバーイメージに基づいたコンテナ化環境の設定方法を学びました。また、Composeコマンドを使用してこの環境を管理する方法も確認しました。
すべての利用可能なDocker Composeコマンドのリファレンスについては、公式のドキュメントを参照してください。