Ebook連載:『5分x10回で学ぶ 開発者のためのDocker コンテナ入門』第9章 ー Docker Compose #docker #DX #Mirantis
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
コンテナ化はDXの第一歩に最適な取り組みです。本シリーズでは10回にわたってMirantis社が発行するEbook「Learn Containers 5 Minutes at a Time An introductory guide for developers」 (Eric Gregory著)を翻訳・編集し、チャプターごとにCL LABで公開しています。本稿はその第9章です。皆さまのクラウドネイティブジャーニーやアプリケーションのモダナイズの一助になれば幸いです。
- 第1章 コンテナとは?
- 第2章 コンテナの作成・調査・削除
- 第3章 Dockerfile でのコンテナイメージのビルド
- 第4章 イメージレジストリ
- 第5章 ボリュームと永続的なストレージ
- 第6章 コンテナネットワークとコンテナのポートの開設
- 第7章 コンテナ化アプリの実行
- 第8章 ユーザ定義ネットワーク上のマルチコンテナアプリケーション
- 第9章 Docker Compose
- 第10章 Webアプリをコンテナサービスとして構築する
第9章: Docker Compose
前章では、ユーザー定義のネットワーク上に、マルチコンテナ構成の Web アプリケーションをデプロイしました。このプロセスはそれほど複雑なものではありませんが、より効率化できます。Docker にはマルチコンテナのデプロイを簡略化するためのツールがあります。
訳注:本稿に記述しているdocker compose V1 のコマンドは2023年6月末でサポートが終了しました。Compose V2に移行してご使用ください。詳細はhttps://docs.docker.com/compose/compose-v2/ をご確認ください。またこちらのTech Blogもご参照ください。
MySQL を使用して Mediawiki のマルチコンテナのデプロイを設定する際、多くのオプションを手動で設定する必要がありました。ユーザ定義のネットワーク、ボリューム、ポート、パスワードなどです。同様のデプロイの度に、同じオプションの設定プロセスを繰り返し行う必要があることは想像に難くありません。
このような状況を解決するために、1つの YAML ファイルにマルチコンテナのデプロイメントの詳細を指定するツールであるDocker Compose を使用できます。YAML は Yet Another Markup Language の略、または YAML Ain't Markup Language の略です。
前章の演習でデプロイした Mediawiki の実装のための Docker Compose ファイルは、次のようになります。
# MediaWiki with MySQL # version: '3' services: mediawiki: image: mediawiki restart: always ports: - 8000:80 volumes: - /var/www/html/images database: image: mysql restart: always environment: MYSQL_ROOT_PASSWORD: root
上記の設定項目の多くは見覚えがあるでしょう。私たちは2つの "サービス "を作成しています。 Mediawiki アプリケーションと MySQL データベースです。アプリケーションのために、私たちは 80 番ポートをローカルマシンの 8000 番ポートに公開しています。データベースについては、永続的なデータのためにコンテナ内のディレクトリを指定しています。
しかし service とは何を意味するのでしょうか?これは Docker やその他のシステムが、大規模なデプロイをコンポーネントの役割ごとに整理するために使用する抽象的なものです。つまりより大規模なデプロイに向けて構成されたコンテナイメージです。
複雑なデプロイでは、特定の機能がさらに細分化され、Web インタフェースを通じて、互いに通信可能な高度で専用の個別モジュールになり、小規模なチームによって管理されることもあります。
このアプローチは、マイクロサービスアーキテクチャと呼ばれています。このシンプルな2つのコンテナのデプロイメントは、単純化されたサービスを中心とした設計パターンの基本を理解することに役立ちます。このアプリケーションは、アプリケーションとデータベースという、明確に定義されたジョブを持つコンテナ化されたコンポーネントに分解されます。コンテナ化されたアプリケーションのロジックは、例えば、アカウントの認証、投稿の編集、サイトの提供などの特定のロジックを扱うモジュールにさらに分解することもできます。
しかし今は、分解よりも構築に集中しましょう。 YAML の内容を wiki.yml というファイルにコピーして、ホストマシンの project フォルダに保存してください。
注意: YAML ファイルでマルチコンテナのデプロイメントを整理するこのパターンは、クラウドネイティブシステムを構築する上で繰り返し登場します。もしあなたがクラウドネイティブシステムの開発を続けるなら、今回が YAML ファイルを使用する最初の機会かもしれませんが、これが最後でないことは確かです。
前章で作成したコンテナが実行されていないことを確認してください。そして、ターミナルで、次のコマンド文を実行します。
% docker-compose -f wiki.yml up
-f の引数はカスタムファイル名である wiki.yml を指定します。指定しない場合、docker-compose は YAML ファイルが docker-compose.yml という名前であるとみなします。
このコマンドはアタッチドモードでコンテナを開始するため、ターミナルタブに連続したログが表示されます。localhost:8000 をブラウザから確認すると、データベースをホストするコンテナの名前を表示するために docker container ls を実行する必要があることを除いて、前回と全く同じセットアッププロセスを実行します。おそらく、データベースコンテナの名前は、wiki_database_1 です。LocalSettings.php を再度ダウンロードする必要がありますが、今回は wiki.yml と同じホストマシンディレクトリに置き、wiki.yml を次のように編集します。
# MediaWiki with MySQL # services: mediawiki: image: mediawiki restart: always ports: - 8000:80 volumes: - /var/www/html/images - ./LocalSettings.php:/var/www/html/LocalSettings.p hp database: image: mysql restart: always environment: MYSQL_ROOT_PASSWORD: root
Docker Compose を起動すると、LocalSettings.php ファイルが永続ボリュームに関連付けられたディレクトリにインポートされるように設定しています。
そのままターミナルタブで CTRL+C で処理を終了し、再度 docker compose を実行します。
% docker-compose -f wiki.yml up
コマンドラインでの面倒な作業を減らし再びマルチコンテナのデプロイを実行することができるようになりました。そして、YAML ファイルを共有することで、設定の方法を簡単に共有できるようになりました。
コマンドラインでの面倒な作業を減らし再びマルチコンテナのデプロイを実行することができるようになりました。そして、YAML ファイルを共有することで、設定の方法を簡単に共有できるようになりました。
まとめ
この章では、マルチコンテナアプリケーションのデプロイを簡略化できる docker compose について学びました。学んだことを振り返ってみましょう。
- Docker Composeを使って単一のYAMLファイルでデプロイメントを構成しました。YAMLファイルが1つであることでファイルのコピー・共有・バージョン管理が簡単になります。
- Docker Compose を利用することで、環境のセットアップにかかる手間を大幅に削減できることがわかりました。
- Docker Compose は大規模デプロイのためのサービスを定義しており、そのサービスモデルはクラウドネイティブ開発でよく使われるマイクロサービスアーキテクチャの基礎を形成しているということを学びました。
最終章では、これまで学んだことをすべてまとめて、コンテナ化サービスとしてデプロイ可能な新しい Web アプリケーションを作成します。
※Docker Enterprise事業は2019年11月14日にMirantis社によって買収されました。
当時のDocker Enterprise製品は、現在は下記のように名称変更されています。
- 「Docker Engine」→「Mirantis Container Runtime (MCR)」
- 「エンタープライズ版Docker」→「Mirantis Kubernetes Engine (MKE)」
- 「Docker Trusted Registry」→「Mirantis Secure Registry (MSR)」
Mirantis製品に関するお問い合わせはこちら。
Mirantisについて
Mirantisは、Fortune 1000 企業の 2/3 以上にコンテナやマルチクラウドの導入を加速させ、データセンター運用のストレスを取り除く支援をしています。日本では、クリエーションラインと提携し、Kubernetes、OpenStack、その他のオープンクラウドテクノロジーを、現地語でのサポートやサービスとともに提供しています。Mirantis Kubernetes Engine(旧Docker Enterprise)および関連製品を含む、深い技術的専門知識とベンダーにとらわれない柔軟なプラットフォームが、お客様から選ばれています。
詳細は www.mirantis.com でご確認ください。