概要
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 の画面に遷移すると思います
これで「Create & Deploy」してみましょう
エラーになる場合は yml ファイルのフォーマットがおかしい他、イメージが Dockerhub になかったり、build ディレクティブを使っていないか確認しましょう
また、ここでボタンを押す時にコンテナを動かすノードが存在していないとエラーになります
例として AWS の EC2 ノードを Docker Cloud のノードとして動作させる方法はこちらを御覧ください
ノードもちゃんとある状態でボタンを押すのに成功すると以下の Stacks の画面に移動すると思います
どうやら Docker cloud ボタンからデプロイした場合は Stack として作成できるようです
Stack の状態が RUNNING になればノード上へのデプロイは成功です
動作確認
Docker cloud がデフォルトで用意しているエンドポイントにアクセスしてみましょう
エンドポイントの情報は上記の Stacks の画面のすぐ下にあります
ちゃんとページが表示されることが確認できると思います
最後に
Docker Cloud ボタンを試してみました
ファイルを配置したりコンテナを動作させるノードがなかったりしなきゃいけないと結構つまづきポイントもありました
Heroku ボタンに慣れていればほぼそれと同じ感じなので簡単にできるかなと思います
あとは Docker Cloud で動作させることが、どれだけ需要があるかは、まぁ何とも言えません、、、
ちょっと気になったのはクラスタが複数ある場合にどちらのクラスタへのデプロイが優先されるかです
今回は 1 クラスタだけだったので問答無用でそのクラスタのノードが選択されましたが、クラスタが複数ある場合もいい感じで分散してくれるのかが気になりました
URL ではクラスタやノードを特に指定していないので、その辺は Docker cloud 側におまかせだと思うのですが、その辺のアルゴリズムが気になりました
単純に上からとかもあるかもしれません
0 件のコメント:
コメントを投稿