今回はDockerやコンテナというサービスについて、勉強がてらに解説して行きます。
自分自身全く触れたことがないサービスですので、なるべくわかりやすく説明できるよう努めます!
#コンテナ型仮想化技術について
- Dockerはコマンドラインインターフェイスっぽく使える
- インフラの構築、アプリのデプロイ、プロビジョニングがこれ一つで出来る
- 複数の環境で(開発〜検証〜本番)同じイメージを使える
- 頻繁に変更したり、機能追加していける
- 負荷に応じて弾力的に数を変えられる
##もっと簡単に説明すると
- 運輸業界のコンテナは、一隻の船に数種類の貨物を積むことが可能になる。
- 物資を運ぶためだけの「専用の船」を、準備する必要がなくなる。
- IT業界でいう「コンテナ化」も考え方は同じで、ひとつの環境に数台の「コンテナ」を準備することで、「環境構築」の工数が大幅に削減できることが可能になります。
オペレーティングシステム(船)とソフトウェア(積荷)を準備するのではなく、
コードとそれが依存するものだけを、コンテナへ準備し操作できるようにすることで、 環境を一から構築するよりも、早く環境を準備することが可能です。
#Dockerについて
ひとつの環境に、複数のコンテナを準備することができるのが、Dockerというソフトウェアです。
従来の仮想化技術で使われていた、ハイパーバイザーという技術は
「運ぶ物のために船を準備する」
だとしたら、Dockerは「運ぶ物のためにコンテナを作る技術」です。
#簡単にデプロイを試してみる
##Docker コンテナのデプロイ
Amazon Elastic Container Service (Amazon ECS) を使用します。
チュートリアルでは、ロードバランサーの後方に配置した Amazon ECS クラスターで、
Docker 対応サンプルアプリケーションを実行し、サンプルアプリケーションをテストし、リソースを削除する方法を試すことができます。
##ステップ 1: リソース管理
Amazon ECS の初回実行ウィザードのガイドに従ってクラスターを作成し、サンプルウェブアプリケーションを起動します。
このステップでは、Amazon ECS コンソールからウィザードを起動します。
Amazon ECS には、Amazon Elastic Container Registry (Amazon ECR) を使用して、
イメージリポジトリを作成し、初回実行ウィザードの一部としてリポジトリにイメージをプッシュするオプションがあります。
##ステップ 2: タスク定義を作成する
タスク定義はアプリケーションの設計図のようなものです。
コンテナにどの Docker イメージを使用するか、タスクで何個のコンテナを使用するか、および各コンテナへのリソース割り当てについて、タスク定義を指定して Amazon ECS に知らせます。
タスク定義には、デフォルト設定値が事前にロードされています。
デフォルト値を確認してから、[次] をクリックします。
##ステップ 3: サービスを設定する
次に、Amazon ECS サービスを設定します。
例えば、あるアプリケーションをサービスとして実行し、停止したタスクがある場合、停止したタスクは Amazon ECS によって自動的に回復され、指定した数のコピーが維持されます。
「sample-webapp」
AWS によって作成されたウェブベースの、 "Hello World" アプリケーションです。
無限に実行することを意図しているため、これをサービスとして実行することにより、タスクに異常や予期しない停止が発生した場合にタスクが再起動されます。
タスクの必要数
AWS 無料利用枠を超えないよう、デフォルト値の 1 のままにしておきます。
タスクのコピーが 1 つ作成されることになります。
Elastic load balancing: サービスには、任意でロードバランサーを使用できます。
Amazon ECS では、Elastic Load Balancing (ELB) ロードバランサーを作成して、タスクが起動している複数のコンテナインスタンスに、トラフィックを分散させることができます。
ホストポート
[Simple-app:80] を選択します。
サンプルアプリケーションには、[ELB リスナープロトコル]、[ELB リスナーポート]、[ELB ヘルスチェック] のデフォルト値が設定されています。
##ステップ 4: クラスターを設定する
Amazon ECS タスクは、Amazon ECS コンテナエージェントが実行されている、コンテナインスタンスのセットであるクラスターで実行されます。
このステップでは、クラスター、セキュリティ、IAM ロールを設定します。
クラスター名を入力します。
EC2 インスタンスタイプ
特に設定する必要がありません。
コンテナは、個別の Amazon EC2 インスタンスを管理および設定することなく実行されます。
インスタンス数
デフォルト値の 1 のままにしておき、タスクの実行されるクラスター内に作成される Amazon EC2 インスタンスの数を 1 つにします。
クラスター内のインスタンスが増えれば、より多くのタスクを実行させることができます。
キーペア
インスタンスに SSH で接続する場合は、キーペアが必要になります。
[なし – SSH で接続不可] を選択するか、既存のキーペアを選択するか、または Amazon EC2 コンソールでキーペアを新規作成します。
##ステップ 5: リソースの確認と表示
作成する前に、何が作成されるか、最終確認と編集ができます。
リソースを作成すると、[起動ステータス] ページが表示されています。
起動が完了したら、[サービスの表示] を選択します。
##ステップ 6: サンプルアプリケーションを開く
このステップでは、ブラウザにロードバランサーの DNS 名を指示することにより、サンプルアプリケーションが動作していることを確認します。
sample-webapp ページで、ロードバランサー名をクリックして ELB DNS 名をコピーします。
新しいブラウザウィンドウにペーストし、サンプルアプリケーションを表示させます (この場合は静的ウェブページ)。
##ステップ 7: リソースを削除する
このステップでは、不要な課金を避けるためにリソースをクリーンアップします。
Amazon ECS コンソールページに戻ります。
作成したクラスター名をクリックします。
[sample-webapp] の横のチェックボックスをオンにしてから、[更新] をクリックします。
アクティブなタスクを実行中のサービスを誤って削除しないよう、Amazon ECS でのサービス削除前にすべてのタスクを停止しておく必要があります。
[タスクの数] を 0 に設定し、[サービスの更新] を選択します。
サービスが更新された後、[削除] を選択します。
クラスターに起動していた、 EC2 インスタンスも消します。
[アクション] > [インスタンスの状態] > [削除] を順に選択します。
左側のパネルから [ロードバランサー] を選択します。
サービスのために作成したロードバランサー (先程作った名前) の横にあるチェックボックスをオンにします。
右クリックして [削除] を選択します。
#まとめ
このチュートリアルでは、Amazon ECS クラスター、Amazon EC2 インスタンスおよびロードバランサーという 3 つのリソースを起動しました。
ほぼ新しくリソースが、自動的に作成してもらえるので、あとはアプリケーションの作成に注力できます。
試してみるだけなら、難しい設定も必要ないので簡単にお試しいただけます!
#公式サイトリンク
Amazon Elastic Container Service (Amazon ECS)