Docker for AWS 試してみた その1

 Docker AWS Swarm CloudFormation
2016.07.15

DockerCon 2016 で発表され、現在 プライベート β 公開中の Docker for AWS。 Docker 社にブログ書くよアピールをしたら招待されたのでこれ書いてます。

 

目次

Docker for AWS

とは

Docker 社の提供する AWS のマネージドサービスとうまく統合された、いい感じの Swarm クラスタ「CloudFormation テンプレート + 専用 AMI」で構成するツール群。 AWS への Docker クラスタデプロイツール。

ただの Swarm クラスタではなく、AWS ならこう構成するといいよね!なクラスタが起動します。

制約・前提

2016/07/15 現在プライベート β で、招待制試験中1。 管理用 KVS に DynamoDB、フロントのロードバランサに ELB を使うなどするため 相応の権限をもつ IAM ユーザか AWS ルートアカウントで CloudFormation を実行。 Docker v1.12 の Swarm モード 前提のクラスタを生成します。 東京リージョンにも対応済。

CloudFormation

β プログラムに招待されると、以下 2 つが Docker 社から共有されます。

起動するリソース

以下の作成権限と CloudFormation を使う権限のあるユーザでスタック生成を実行。

構成

Docker-for-AWS-_swarm_cluster_.png

バージョン Docker for AWS Beta 2 (docker 1.12.0-rc4) 時点。

manager と worker、それぞれの AutoScaling (AS) グループが作られ Docker 社から共有された AMI ベースで EC2 インスタンスが起動します。 また AS のライフサイクルフックで EC2 破棄時に SQS キューと連携、 各インスタンスの管理用コンテナがそれを受け取ってお掃除など遂行。

DynamoDB の用途ははっきりとはわかりませんが テーブルの中をのぞくと、リーダーノードを保持している模様。

EC2 インスタンス

Docker ホストである EC2 インスタンスの状況について。

Docker コンテナ

UserData で起動する各ノードの docker コンテナはこんな感じです。

  node restart DynamoDB SQS 特徴
docker4x/init-aws manager/worker no 参照 - 役目を終えると exit
docker4x/guide-aws manager/worker always 参照 参照
docker4x/shell-aws manager always - - TCP:22 を公開、sshd ぽい
docker4x/controller manager always - - swarm 操作系?

というわけで、SSH で繋いだ先で cat /etc/os-release するとこうなります(笑

$ cat /etc/os-release

NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.3.3
PRETTY_NAME="Alpine Linux v3.3"
HOME_URL="http://alpinelinux.org"
BUG_REPORT_URL="http://bugs.alpinelinux.org"

インスタンスプロファイル

ECS の新しい機能 が使えないので、最大公約数的な IAM ポリシーが割り当てられます。

当然ながら、アプリケーション側でもしその他 AWS サービスを使うなら このプロファイルに追加で権限を渡していくことになります。

ちなみに Docker レジストリとして ECR を使うなら これ の併用で完璧です。

ELB

2 つの ELB が起動します。

  Listen ポート ヘルスチェック SecurityGroup
サービス用 Swarm サービスに応じ動的に変化 TCP:2375 (Docker Remote API) 0 ~ 65535 (0.0.0.0/0)
SSH用 TCP:22 TCP:22 22 (0.0.0.0/0)

ところで CloudFormation の Outputs には ELB のエンドポイントを利用した SSH の接続コマンドが表示されますが、そのままでは繋がりません。 スタック作成時に指定したキーペア(.pem)を -i で渡す必要があります。 あたりまえですねはい・・

続編

Docker for AWS 試してみた その2

  1. 実際に試したい方は ここ から申請できます。