ラベル Docker cloud の投稿を表示しています。 すべての投稿を表示
ラベル Docker cloud の投稿を表示しています。 すべての投稿を表示

2017年4月11日火曜日

Docker Cloud ボタンを試してみた

概要

Docker Cloud ボタンはリポジトリで管理されている docker-cloud.yml の定義を元に Docker cloud に簡単にデプロイできちゃうボタンです
Heroku ボタンのようなものです
今回は Github のプロジェクトに Docker Cloud ボタンを作成してボタンを押してデプロイしてからアプリが動作するところまでやってみました

環境

  • CentOS 7.3
  • docker 17.03
  • Docker Cloud (2017/04/06)

docker-cloud.yml の作成

リポジトリのルートディレクトリに作成する必要があります
Heroku でいうところの app.json になります
docker-cloud.yml の他には docker-compose.yml, fig.yml でも代用できます

またポイントしては build ディレクティブが使えません
例えば以下のような docker-cloud.yml があった場合 Docker Cloud 上にデプロイすることはできません

web:
  build: .
  ports:
    - 80:9292
  links:
    - redis
  environment:
    - REDIS_URL=redis://redis:6379
redis:
  image: redis:latest

この場合以下のように build をやめて image ディレクティブを使用します
なので、この場合、ビルドした web イメージは事前に Dockerhub で公開しておく必要があります

web:
  image: your-github-name/app
  ports:
    - 80:9292
  links:
    - redis
  environment:
    - REDIS_URL=redis://redis:6379
redis:
  image: redis:latest

作成できたらリポジトリに push しましょう

Docker Cloud ボタンの作成

次に Docker cloud ボタンを作成します
Github などであれば README.md に以下を追加すれば OK です

[![Deploy to Docker Cloud](https://files.cloud.docker.com/images/deploy-to-dockercloud.svg)](https://cloud.docker.com/stack/deploy/?repo=https://github.com/your-github-name/app)

単純に Docker cloud に対するリンクを作成しているだけです
ボタンを作成する前にテストしたいということであれば

  • https://cloud.docker.com/stack/deploy/?repo=https://github.com/your-github-name/app

に単純にブラウザでアクセスするだけで OK です
もちろんその際には docker-cloud.yml の配置が必要です

ボタンを押してみる

ではボタンが作成できたら押してみましょう
ボタンを押すと Docker cloud の画面に遷移すると思います
docker_cloud_button1.png

これで「Create & Deploy」してみましょう
エラーになる場合は yml ファイルのフォーマットがおかしい他、イメージが Dockerhub になかったり、build ディレクティブを使っていないか確認しましょう

また、ここでボタンを押す時にコンテナを動かすノードが存在していないとエラーになります
例として AWS の EC2 ノードを Docker Cloud のノードとして動作させる方法はこちらを御覧ください

ノードもちゃんとある状態でボタンを押すのに成功すると以下の Stacks の画面に移動すると思います
どうやら Docker cloud ボタンからデプロイした場合は Stack として作成できるようです
docker_cloud_button2.png

Stack の状態が RUNNING になればノード上へのデプロイは成功です

動作確認

Docker cloud がデフォルトで用意しているエンドポイントにアクセスしてみましょう
エンドポイントの情報は上記の Stacks の画面のすぐ下にあります
ちゃんとページが表示されることが確認できると思います

最後に

Docker Cloud ボタンを試してみました
ファイルを配置したりコンテナを動作させるノードがなかったりしなきゃいけないと結構つまづきポイントもありました

Heroku ボタンに慣れていればほぼそれと同じ感じなので簡単にできるかなと思います
あとは Docker Cloud で動作させることが、どれだけ需要があるかは、まぁ何とも言えません、、、

ちょっと気になったのはクラスタが複数ある場合にどちらのクラスタへのデプロイが優先されるかです
今回は 1 クラスタだけだったので問答無用でそのクラスタのノードが選択されましたが、クラスタが複数ある場合もいい感じで分散してくれるのかが気になりました
URL ではクラスタやノードを特に指定していないので、その辺は Docker cloud 側におまかせだと思うのですが、その辺のアルゴリズムが気になりました
単純に上からとかもあるかもしれません

参考サイト

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 を使っても良いと思います

参考サイト