2017年2月16日木曜日

Heroku の Container Registry を試してみた

概要

Heroku に対して Docker コンテナをデプロイできる仕組みに Container Registry があります
今回はざっと触ってみたので試してみました
自作の Docker コンテナも動作させてみたのでポイントを紹介します
デプロイ対象の Heroku アプリは「test-app-20170208」

環境

  • CentOS 7.3
    • heroku-cli/5.6.18-9f6df83
  • Docker 1.12.6

とりあえず試す

既存のイメージを push してみる

まずはアプリを作成します

  • heroku container:login
  • heroku create -a test-app-20181002

次に Heroku Container Registry に Push するイメージを作成 (or pull) します
pull した場合はタグを付与して Heroku Container Registy に Push できるようにします
以下のサンプルでは pull していますが build して -t オプションでイメージに Heroku 用のタグ付けをしても OK です

  • docker pull kakakikikeke/request-dumper:for_heroku_container
  • docker tag kakakikikeke/request-dumper:for_heroku_container registry.heroku.com/test-app-20170208/web

あとはイメージを push してそのイメージをデプロイ (container:release) します

  • docker push registry.heroku.com/test-app-20170208/web
  • heroku container:release web

open で動作確認できます

  • heroku open -a test-app-20170208

イメージにタグ付けした web の部分はプロセスタイプと呼ばれるもので Web アプリなどの場合には「web」を指定します
その他に worker などがありコンテナのタイプに対応したものを指定しましょう

ポイント

実は Dockerfile を少し編集しています
編集したポイントは以下の通り

  • EXPOSE が使えません
  • $PORT という環境変数を使ってアプリが立ち上がるポートをバインドします

これ以外にも縛りがあるっぽいですが一旦、自分はそれを変更するだけでアプリが起動しました
diff 的には以下の通りです

-EXPOSE 4567
+#EXPOSE 4567

-CMD ["bundle", "exec", "rackup", "config.ru", "-o", "0.0.0.0", "-p", "4567"]
+CMD bundle exec rackup config.ru -o 0.0.0.0 -p $PORT

なので同じように EXPOSE やポートを直接して Dockerfile を作成している場合はそこを変更しておく必要があります
自分の場合は tag を使って Dockerhub に heroku 用の Dockerfile を push しました

最後に

Heroku の Container Registry を使ってみました
Dockerfile がそのまま使える感じではなかったので、少し工夫が入ります

おそらくデータを保存するコンテナや docker-compose を使う場合にも同じようにコツが必要になると予想しています
この辺も時間があったら触ってみようかなと思っています

参考サイト

0 件のコメント:

コメントを投稿