2017年2月19日日曜日

Docker cloud を使ってみた (AWS 編)

概要

docker cloud はいろいろなクラウドサービス上でマネージドな docker 環境を構築、管理することができるサービスです
AWS や Azure, Degital Ocean などが対応しています
今回は docker cloud + AWS で AWS 上に環境を構築してみます
AWS にはすでに ECS (EC2 Container Service) というサービスがありますが、このあたりとも比較してみたいと思います

環境

  • CentOS 7.3
    • docker 1.12.6
  • AWS 2017/02/10
  • Docker cloud 2017/02/10

docker cloud のアカウント作成とログイン

https://cloud.docker.com/ から作成します
dockerhub で既ににアカウントを持っている場合はそのアカウントを使えば OK です
ない場合はメールアドレスがあれば登録できるので登録してください

AWS のロールを作成する

Docker cloud が用意している AWS 用のアカウントが自分の AWS のリソースにアクセスすることができるようにロールを作成します
ロールを作成することができるユーザで AWS のコンソールにログインします
IAM の設定画面を開き「ロール」から「新しいロールの作成」を選択します

まずロール名を入力します
first_docker_cloud1.png

次にロールのタイプですが「クロスアカウントアクセスのロール」で「AWS アカウントとサードパーティ AWS アカウントの間のアクセス権を提供します」を選択します
first_docker_cloud2.png

ロールを付与するアカウント情報を入力します
アカウント ID は「689684103426」になります
外部 ID は docker cloud にログインした自分のアカウント ID を入力してください
first_docker_cloud3.png

ロールに割り当てるポリシーを選択します
今回は検証なのでフルアクセス権限 (AdministratorAccess) を設定します
実際は必要なアクセス権限だけを持ったポリシーを別途作成してそれを設定するようにしましょう
first_docker_cloud4.png

あとは内容を確認してポリシーを作成してください
そしてロール ARN をメモしておいてください

ロール ARN を docker cloud に設定する

ここからは docker cloud 側で操作します
左メニューの「Cloud Settings」を選択し「Cloud providers」を選択します
その中に Amazon Web Services があるので「Connect provider」ボタンを選択します
そこに先程メモしておいたロール ARN を入力してください
first_docker_cloud5.png

問題なくポリシー (権限) が付与されていれば設定できます
Docker cloud 側から AWS にアクセスできる権限が正しく設定されていないとエラーとなります

AWS 上にノードを作成する

では実際に Docker cloud から AWS 上にノードと呼ばれるインスタンスを作成していきます
左メニューの「Nodes」を選択します
右上に「Create」があるので選択します

ノードを作成するクラスタの情報を設定します

  • NAME・・・dockercloud-cluster1
  • LABELS・・・設定なし
  • PROVIDER・・・Amazon Web Services
  • REGION・・・ap-southeast-2
  • VPC・・・設定なし (Auto)
  • TYPE/SIZE・・・t2.nano
  • IAM ROLES・・・None
  • Node disk size・・・60 GB
  • Number of nodes・・・1 node

first_docker_cloud6.png

で、とりあえず設定します
設定値は基本的に各人の環境に合わせていただければ OK です
設定したら「Launch node cluster」を選択します

AWS 側にデプロイが始まるので待ちます
試しに AWS 側で EC2 のコンソールを確認すると EC2 インスタンスが作成中なのが確認できると思います
ステータスが DEPLOYED になれば OK です
first_docker_cloud7.png

サービスを定義する

サービスは簡単に言えば「このコンテナイメージを使ってこんなコンテナを起動してね」というルールになります
左メニューから「Services」を選択します
右上の「Create」を選択します
すると見たことのあるアプリがずらずらと並んでいると思います

とりあえずチュートリアルにしたがって「dockercloud/hello-world」を選択しましょう
選択したイメージは簡単な Web アプリが移動するイメージになります
Docker hub でも公開されています

設定画面になると思いますが設定する箇所は以下の通りです

  • Ports の Published を ON にする (ちょうど真ん中くらい)

ここで設定する項目は所謂 docker run するときのオプションになります
volume や link を設定することができます -p などが画面で設定できるイメージです

設定できたら「Create & Deploy」を選択します
デプロイが始まるのでステータスが「RUNNING」になれば起動完了です

動作確認

選択したサービスの下の方に Endpoints という欄があるので、そこの URL にアクセスすればクジラちゃんの Hello world の画面が確認できると思います

with AWS での基本的な使い方はざっとこんな感じです

Amazon EC2 Container Service との違い

簡単に触っただけなので細かいところまではわかりませんが以下が違うかなと思いました

  • EC2 のインスタンスとして起動する (ECS のインスタンスとしては起動しない)
  • いろいろなアプリがデフォルトで準備されている (Docker Hub が直接使える)
  • docker (docker-cloud) コマンドが直接使えるので、docker に慣れている人でも直感的に使える
  • Docker cloud が死んだらわりと何もできない

あたりでしょうか
正直、どちらも同じような機能を提供しているし一長一短な気がするので好きな方を使えば良いかなというのが正直な感想です
ECS を使えば AWS だけで完結するので、AWS に慣れている人はわざわざ Docker cloud を使う必要はないかと思います
ECS のコンソールが使いづらいとか ecs-cli が嫌いだという人は Docker cloud を使っても良いと思います

参考サイト

0 件のコメント:

コメントを投稿