
画像: Docker
Docker Composeは、複数コンテナのDockerアプリケーションを定義および実行するためのツールです。つまり、複数のDockerコンテナを必要とするサービスを定義する必要がある場合、Docker Composeは最適なツールと言えるでしょう。
では、Docker Compose はどのように使用すればいいのでしょうか?Docker Compose と Docker デーモンの両方をインストールしたら、コンテナ化されたアプリケーションをどのようにデプロイすればよいのでしょうか?Docker Compose は docker-compose.yml ファイルに依存しています(このファイルは、実績のある Dockerfile と連携して動作します)。
基本的な Docker Compose ファイルを独自に構築する方法を理解していただけるよう、最も簡単な言葉で説明します。
参照:採用キット: データベース管理者(TechRepublic Premium)
必要なもの
必要なものは以下のものだけです:
- Docker と docker-compose のインスタンスが実行されているサーバー。
- docker グループに属するユーザー。
Docker Composeの仕組み
簡単に言うと、Docker Composeは完全なサービスを実行するためのアプリケーションスタックを構築します。docker-compose.ymlファイルは複数のセクションに分かれており、各セクションは単一のコンテナを表し、他のコンテナと組み合わせることでサービスが作成されます。例えば、2つのセクションで構成されるdocker-compose.ymlファイルがあるとします。
- web – アプリケーションの Web サーバー部分。
- db – アプリケーションのデータベース サーバー部分。
各セクションは異なるコンポーネントで構成できます。Webセクションについてはより詳細な設定が必要になる場合があるため、docker-compose にWeb部分をDockerfileで定義するように指示することができます(これについては別のチュートリアルで説明します)。実際、docker-compose では複数のDockerfileをインクルードして非常に複雑なスタックを構築できます。ただし、ここでは簡単に始められるように、比較的シンプルなスタックを構築します。
それでは、webセクションとdbセクションを含むdocker-compose.ymlファイルを作成しましょう。NGINXとMySQLを使用して、開発用途に使いやすいスタックを作成します。
docker-compose.yml ファイル
まず最初に、新しいファイルを作成します。このファイルは新しく作成したディレクトリ内に作成します。mkdir ~/docker-buildコマンドを実行します。 cd ~/docker-buildコマンドで、新しく作成したディレクトリに移動します。ディレクトリ内で、以下のコマンドを実行して新しい docker-compose.yml ファイルを作成します。
nano docker-compose.yml
これは YAML ファイルなので、フォーマットが一貫している必要があることに注意してください (そうでない場合、ビルドは失敗します)。
まず最初に、ファイルのヘッダーを追加します。ファイルの先頭に以下のコードを追加します。
version: '3'
これは、Docker Composeにツールのバージョン3を使用することを指示します。次の行は、デプロイするサービスを指定するためのものです。これは次のように定義されます。
services:
これまでのところ、ファイルは次のとおりです。
version : '3'
services:
最初に定義するセクションは、スタックのWeb部分です。これは2行のシンプルなコードで記述できます。
web:
image: nginx
上記のコマンドは、Docker Composeに公式のnginxイメージを使ってコンテナをデプロイするよう指示するものです。このコンテナに対して特別な処理は何もしていません。基本的な処理だけです。
次のセクションではデータベースを定義します。データベースが機能するために必要なパラメータを設定する必要があるため、このセクションは少し複雑になります。まず、以下のセクションを定義します。
db:
次に、次のようにして、Docker Compose にデータベースに mysql イメージを使用するように指示します。
image:mysql
次に、データベースで使用する外部ポートと内部ポートを定義します。デフォルトのMySQLポートを使用し、以下のように定義します。
ports:
- "3306:3306"
最後に、データベース環境を設定します。環境とは、データベースの設定オプション(パスワード、ユーザー、データベース名)のことです。このセクションは以下のようになります。
environment:
- MYSQL_ROOT_PASSWORD=password1
- MYSQL_USER=user
- MYSQL_PASSWORD=password2
- MYSQL_DATABASE=database
どこ:
- password1 は MySQL 管理者ユーザーのパスワードです。
- ユーザーは新しい MySQL ユーザーです。
- password2 は新しい MySQL ユーザーのパスワードです。
- database は使用するデータベースの名前です。
上記の各パスワードはご自身で設定してください。スタックを安全に保つために、強力で一意のパスワードを使用してください。
このファイルをまとめると次のようになります。
version: '3'
services:
web:
image: nginx
db:
image: mysql
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_USER=user
- MYSQL_PASSWORD=password
- MYSQL_DATABASE=demodb
ファイルの構造は一貫している必要があるため、慎重にインデントすることに注意してください。
そのファイルを保存して閉じます。
Docker Compose を使ったビルド
docker-compose.yml ファイルの作成が完了したので、いよいよアプリケーションをビルドします。これは非常にシンプルなアプリケーションなので、基本的にはWebサーバーとデータベースという2つのコンテナをデプロイします。この2つのコンテナをどのように使用するかは、皆さん次第です。もちろん、独自のイメージを開発して使用することも可能です(例えば、シームレスに連携して独自のサービスやアプリを作成するカスタムNGINXイメージやMySQLイメージなど)。今回は、デモのためデフォルトのイメージを使用しています。
スタックをビルドするには、ターミナル ウィンドウに戻り、ビルド ディレクトリにいることを確認して、次のコマンドを発行します。
docker-compose up
上記のコマンドは、WebコンテナとDBコンテナの両方をデプロイします。このコマンドのみを実行すると、コンテナはアタッチモードでデプロイされるため、bashプロンプトは表示されません。デタッチモードで実行したい場合は、以下のコマンドを実行してください。
docker-compose up -d
実行が完了すると、コンテナ ID がリストされます (図 A )。
コンテナが実行されていることを確認するには、次のコマンドを発行します。
docker-compose ps
コンテナの名前、コマンド、状態、およびポートが一覧表示されます (図 B )。
おめでとうございます!Docker Composeを使って最初のコンテナ「スタック」をデプロイしました。これは非常にシンプルな例ですが、これからの長く充実した道のりへの第一歩となるはずです。次回は、Dockerfileと連携して動作する、より複雑なdocker-compose.ymlファイルを作成します。