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 側におまかせだと思うのですが、その辺のアルゴリズムが気になりました
単純に上からとかもあるかもしれません

参考サイト

0 件のコメント:

コメントを投稿