Dockerコンテナ上で動作するアリババクラウドコンテナサービスのアプリケーション環境の構築

このチュートリアルでは、**Alibaba Cloud**のコンテナサービスを使って**Dockerコンテナ**クラスタを作成する方法を紹介します。

#アリババクラウドのコンテナサービスとは？
Alibaba Cloudのコンテナサービスは、スケーラブルで高性能なコンテナ管理製品で、Docker SwarmまたはKubernetesのいずれかを使用してコンテナ化されたアプリケーションのライフサイクルをオーケストレーションして管理することができます。Container Serviceには、Pay-As-You-Goでインストールされるサーバーロードバランサーが自動的に組み込まれています。

Alibaba Cloudのコンテナサービスは、継続的インテグレーションを含む複数のアプリケーションリリース方法を提供し、マイクロサービスアーキテクチャもサポートしています。アリババクラウドの仮想化、ストレージ、ネットワーク、セキュリティサービスと統合されたコンテナクラスタ用のシンプルなユーザーインターフェースのコンソール設定を提供することで、アリババクラウドのコンテナサービスは、コンテナ化されたアプリケーション環境の実行、管理、監視に最適なクラウド環境となっています。

#Docker Swarmとは？
Dockerはオープンソースの仮想化管理ツールで、コンテナ内で動作するアプリケーションやアプリケーションのコレクションを開発、デプロイ、管理、監視することができます。このプロセスはコンテナ化として知られています。Docker Swarmは、複数のスケーラブルなDockerコンテナ上で動作するこのようなシステムや環境のためのクラスタリング、スケジューリング、オーケストレーションツールです。

Dockerコンテナは、コード、ランタイム、ライブラリ、環境変数、設定ファイルなど、アプリケーション全体の実行に必要なすべてを含む実行可能パッケージであるDockerイメージを実行することで起動されます。コンテナはDockerイメージのランタイムインスタンスです。

同じインスタンス上で複数のコンテナを同時に実行したり、インスタンスのDocker Swarmクラスタ上で実行したりすることができます。実行中のコンテナは、オペレーティングシステムのハイパーバイザーの代わりにDockerによって管理されます。Dockerはハイパーバイザーとは異なり、クラスタノードの1つ以上に問題が発生した場合に冗長性とフェイルオーバーを提供します。

Dockerは軽量で効率的で、複数のアプリケーションイメージで構築された複雑なシステムを管理することができます。ローカルにDockerコンテナを構築することも、クラウドにデプロイすることもできます。

Dockerは、1つのAlibaba Cloud ECSインスタンス上で簡単にセットアップ、インストール、実行することができます。業界レベルのアプリケーションやシステムを実行する大規模なコンテナ化環境には、信頼性と拡張性に優れたオーケストレーションと監視システムが必要です。Alibaba Cloudのコンテナサービスは、システム管理者やDevOpsチームに、大規模なコンテナ化環境を管理するために必要な広大なクラスタ化アーキテクチャを提供します。

#なぜクラスターが必要なのか？
Alibaba CloudのコンテナサービスDocker Swarmオプションを使用して実行中のDockerコンテナのスイートをインストールする前に、コンテナ化されたシステムを実装するためのAlibaba Cloud Container Service Docker Swarmクラスタを準備して利用できるようにしておく必要があります。

[前回のチュートリアル](https://www.alibabacloud.com/blog/creating-a-docker-container-cluster-with-container-service_594419?spm=a2c65.11461447.0.0.16ab7cdf0shEKx)では、Alibaba Cloudのコンテナサービスでコンテナ化環境を実行するためのDocker Swarmクラスタを簡単にセットアップする方法を紹介しました。このチュートリアルでは、同じ稼働中のクラスタを使用してアプリケーション環境を構築します。イメージから構築したWebサーバーとオーケストレーションテンプレートから構築したWebアプリケーションで環境を構築します。

#アリババクラウドのコンテナサービスクラスタが稼働しているかどうかを確認する
まず、Docker Swarmクラスタが稼働していることを確認しましょう。Alibaba CloudアカウントのContainer Serviceコンソールページに向かいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/6e184e40-5c16-e267-137f-e2655f8ebce6.png)


コンテナサービスのコンソールページに到着します。

左側メニューのClusterオプションをクリックする前に、Container Service - Swarmオプションが選択されていることを確認してください。

問題がなければ、健全な状態の Running cluster が表示されているはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/dd81686a-ca9b-a869-a6f5-2e35a52aa579.png)


#Docker Swarmコンテナサービスアプリケーションの作成
「Application」メニューオプションに移動し、「Create Applicatio」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/8e21f7d7-dc9a-b4a1-02e3-808624ae54f5.png)


基本オプションで、アプリケーションの名前とバージョン番号(デフォルトは1.0)を追加し、アプリケーションに使用するクラスタを選択します(ここでは、実行中のクラスタが1つしかないので、これがデフォルトになっています)。

標準リリースでは、新しいバージョンをデプロイする前に、以前のバージョンのアプリケーションを削除します。このチュートリアルではこれで十分です。青緑色のリリースは、更新時に中断することなく実行し続ける必要があるアプリケーションのためのアクティブ・スタンバイ・オプションです。

#Dockerイメージを引っ張ってコンテナを作成する
アプリケーションの説明を追加し、Pull Docker Imageオプションを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b447103b-d440-2641-5141-79ccc1892655.png)


ここで「Create with Image」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/db227c08-1c15-18f9-fa8c-121a9e8f9a42.png)


設定オプションに進みます。一般的な設定で、[Select Image] をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/ca1e6aac-e87c-f149-6f13-5a1755c12b3c.png)


nginxオプションを選択し、OKをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/4b05b85b-f7cf-049a-f57e-c67c4f4e8817.png)


最新のDockerイメージのバージョンは、デフォルトでリモートのDockerリポジトリから引っ張ってきます。

これで右側のCreateをクリックすることができるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/be297ace-5432-7268-7917-8a969f5fc2ea.png)


アプリケーションが作成されていることを確認する画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/8beea247-d828-3e85-8cf8-db693e74fdf5.png)


これで、アプリケーションとサービスの両方のメニューに nginx アプリケーションが表示されるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/6127493f-b671-8d50-6844-ad6676ba97a9.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/d9250be2-7b7a-3512-78cf-f4034d1f505e.png)


「Applications」メニューで、nginxを実行しているアプリケーションをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/0693cfe5-6f2d-3e00-0840-69f91dd086bb.png)


Updateをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/4b7ef3f2-7659-9703-2d39-ceee14232e77.png)


これで、ネットワークの設定を行います。

HTTP/HTTPS 80と443のポートマッピングの詳細と、コンテナポートを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/88154826-1fb6-7360-027c-8175f74d54ed.png)


ここで「Update」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/62f42b71-8b57-1885-e496-6dd3cf47e5b8.png)


アプリケーションが作成され、最終的には実行中の状態に落ち着くのがわかります。

アプリケーションメニューオプションをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b43b314f-71dd-0b2c-639b-d892891a1178.png)


クリックすると応募の詳細が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/84522532-4d87-ecf3-708d-55378c96341e.png)


このビューでは、いくつかのタブが表示されます。[サービス] タブには、アプリケーションの状態が表示されます。

コンテナ] タブをクリックします。このビューには、すべての VPC ネットワーク ポート設定、コンテナの IP、ノードの IP が表示されます。また、コンテナを監視するオプションもあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/8790236c-f4bd-8519-71a5-cc57c48f304f.png)


名前のリンクをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/a92d0a80-fcd6-f7cd-7239-564a76e9330f.png)

コンテナのCPU、メモリ、IO、プロセスの使用率など、多くのグラフが表示されます。

ここでログタブをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b8be7070-6e13-dc4d-4b9c-01dc48f4f0a9.png)


ここでは、コンテナのログが表示されます。今すぐイベントをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/888b6a65-603b-53c9-e958-e9d846f1b3a5.png)


このオプションを選択すると、コンテナ上のイベントのリストが表示されます。ここで、[ルート] タブをクリックします。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f71c81ca-7f46-7eba-967e-3d9dec013ed5.png)


ここにコンテナのエンドポイントが表示されます。先に進み、リンクをクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/d0f1682d-df49-7102-dff4-648627f8535b.png)


nginx コンテナが正しく設定され、実行されていることが確認できるはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/36e1fec0-58f3-a46a-68ff-a6deba0f8241.png)

#オーケストレーションテンプレートでコンテナを作成する
それでは、同じクラスタ上でWordPressとnginxを統合してみましょう。

今回はオーケストレーションテンプレートを使用します。コンテナサービスコンソールに戻り、アプリケーションをクリックします。正しいクラスタ上にあることを確認し（まだクラスタは1つだけです）、「アプリケーションの作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/edeb2ab6-3c64-9145-28b7-d913d34d7eb1.png)


手順は先ほどと全く同じですが、「Create with Image」をクリックする代わりに「Create with Orchestration Template」をクリックします。ここではDocker Imageオプションは非選択のままにしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b6f76075-3b48-716b-9a92-679d23e0eb67.png)


Dockerのエコスフィアに慣れている方は、ここでDockerのコンポーズファイルを実行します。Use Existing Orchestration Templateをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/912e1d5a-9437-9ee5-ef20-47990b7e1e28.png)


WordPressを選択してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/207f4702-c97d-d093-e978-b7d196eaf561.png)


ご覧のように、コンソールには関連するDocker composeコマンドと設定が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/da793ce7-60e3-d810-f660-4bad6c653231.png)


今すぐ設定の一つを編集する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/7cd7c1bb-5d51-b5f7-6b93-89de55171b78.png)


この設定変更により、テストドメインのURLからaliyunポート80へのリクエストはすべてWordPressにルーティングされるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/9d345e91-89ba-855e-5fa7-2911a721ec51.png)


ここで「Create and Destroy」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/fec4e68e-cd60-f864-4061-a7cf7713c2b0.png)


アプリケーションが起動しているのが表示されます。アプリケーションメニューをクリックすると、WordPressが作成されているのが表示されます。

アプリケーションが作成されると、実行中の状態で表示されます。クリックしてアプリケーションに進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/0174be40-815c-890e-6453-365b74298218.png)


先ほどと同じように、いくつかのタブが表示されています。WordPressを動かすにはデータベースとWebアプリケーションが必要なので、2つのタブがあります。コンテナタブをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/5bf6cdcb-c106-fa7a-1a33-d06578714820.png)

コンテナタブには、アプリケーションが必要とするすべての異なる実行中のDockerコンテナの詳細が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/3ad38d64-4f69-cd4e-7069-0a221c2cf6c1.png)


ログとイベントタブには、先ほどと同じように詳細が表示されます。Routesをクリックすると、アプリケーションの設定に必要なWordPressエンドポイントのURLが表示されます。

先に進み、エンドポイントをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b44acf58-6ad0-f25d-317b-03609e7b2f78.png)


これで、先ほど設定したnginxウェブサーバ上で動作するWordPressサイトを設定することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b6e7a7c2-af5b-21cf-ba71-d063a845511d.png)

#概要
まず、コンテナ化環境を構築する準備として、すでにAlibaba Cloud Container ServiceのDocker Swarmクラスタを構築しており、正常に動作していることを確認している様子を説明しました。

次に、Alibaba Cloud Container Serviceの製品について説明し、SwarmとKubernetesの両方のコンテナ化環境でどのように利用できるのかを説明しました。また、これらの製品がどのようにクラスタを必要としているか、Alibaba CloudがElastic Compute Services (ECS)から構築されたクラスタを自動セットアップし、自動セットアップの一部としてServer Load Balancerを含める方法を説明しました。

次に、Alibaba CloudのDocker Swarm Containerize Serviceを構築する方法を紹介しました。その後、Orchestration Templateを使ってWordPressのイメージをプルダウンすることで、開発者の柔軟性を高めることができました。

Alibaba Cloudが提供している他の製品やサービスもぜひチェックしてみてください。
[https://www.alibabacloud.com/contact-sales](https://www.alibabacloud.com/ja/contact-sales)

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*