概要
Heroku に対して Docker コンテナをデプロイできる仕組みに Container Registry があります
今回はざっと触ってみたので試してみました
自作の Docker コンテナも動作させてみたのでポイントを紹介します
デプロイ対象の Heroku アプリは「test-app-20170208」
環境
- CentOS 7.3
- heroku-cli/5.6.18-9f6df83
- Docker 1.12.6
とりあえず試す
- heroku plugins:install heroku-container-registry
- heroku container:login
- git clone https://github.com/heroku/alpinehelloworld.git
- cd alpinehelloworld/
heroku create -a test-app-20170208
- heroku container:push web
heroku open -a test-app-20170208
https://test-app-20170208.herokuapp.com/ にアクセスすると Hello World が表示されます
既存のイメージを 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 件のコメント:
コメントを投稿