.Net Core部屬到Heroku

如何將.net core 3.1網站應用程式透過container的方式部屬到heroku平台?

編輯Dockfile

.net core網站在docker容器內預設用80 port,但是Heroku平台容器會隨機指定一個port,並放入容器內環境變數 $PORT ,因此要修改網站的port為Heroku指定的port。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["myapp/myapp.csproj", "myapp/"]
RUN dotnet restore "myapp/myapp.csproj"
COPY . .
WORKDIR "/src/myapp"
RUN dotnet build "myapp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "myapp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
CMD dotnet myapp.dll --urls http://+:$PORT

部屬到Heroku

先在本地端建立image,name必須符合Heroku的規定,再使用Heroku CLI推上平台就部屬完成了。

1
2
3
4
$ docker build -f .\myapp\Dockerfile -t registry.heroku.com/myapp/web .
$ heroku container:login
$ docker push registry.heroku.com/myapp/web:1.0
$ heroku container:release web -a myapp

參考資料