以前、最小の ASP.NET Core アプリケーションの Docker コンテナを Heroku で動かせた。
ただ、ASP.NET Core MVC アプリケーションでは、Heroku 上で NuGet パッケージの復元を実行しようとしていて失敗。
NuGet パッケージの復元で失敗するのなら、復元の必要が無いように、発行したアプリから Docker イメージを作ってしまえばいいかもしれない。
再挑戦してみる。
Heroku CLI をインストール
新しい MacBook Pro に Heroku CLI が入ってなかったので、Homebrew でインストールする。
brew install heroku/brew/heroku
Heroku にログイン
heroku login heroku container:login
ASP.NET Core MVC プロジェクトを作成
最小の ASP.NET Core MVC アプリケーションの Docker イメージを作りたいので、dotnet new
コマンドで生成された雛形をそのまま使う。
mkdir HelloAspNetCore cd HelloAspNetCore dotnet new mvc
ASP.NET Core MVC プロジェクトを発行
dotnet publish -c Release
を実行すると、./bin/release/netcoreapp2.0/
下に実行に必要なファイルがすべて出力される。
Docker ファイルを作成
ファイル一式が出力されたディレクトリに Docker ファイルを作成する。
cd ./bin/release/netcoreapp2.0/publish
ディレクトリの中身をコピーして、ASP.NET Core アプリケーションを起動する Docker ファイルを書く。 ポートは Heroku から環境変数で渡される値を使う。
FROM microsoft/aspnetcore WORKDIR /app COPY . . CMD ASPNETCORE_URLS=http://*:$PORT dotnet HelloAspNetCore.dll
Docker イメージを作成
docker build -t <イメージ名> .
Docker イメージに Heroku 用のタグを設定
Heroku アプリは事前に作成しておいたものを使っておく。
docker tag <イメージ名> registry.heroku.com/<Heroku アプリ名>/web
Heroku にデプロイ
Heroku が用意したレジストリにプッシュすると、Heroku 上で実行される。
docker push registry.heroku.com/<Heroku アプリ名>/web
確認
Web ブラウザでアプリの URL にアクセスすると、今回はちゃんとおなじみのページを表示できた。
ASP.NET Core MVC アプリケーションの Docker コンテナを Heroku で動かすのはこの方法で良さそうだ。次の課題は Heroku Postgres の利用だな。