In this article we’ll publishing a NET 6 application on Heroku using Docker.
Prerequisite:
Create a new .NET 6 WEB API project
The First step we need to create a new .NET 6 project, to do this we’ll use dotnet cli. Open a terminal or CMD in your computer and type this command below:
dotnet new webapi
This command will create a minimal web API:
to get to know more about minimal web API, I recommend this article Minimal APIs overview
Create a Heroku project
To host our project on Heroku, we need to go to Heroku website and Sign In or Sign Up
After this we need to create a new project. To this article I'll call net6heroku, but you can choose another name.
Containerize a .NET 6 web API
In your project folder, create a file Dockerfile
without any extension and paste below lines: (please, change dotnet-heroku.dll based on your Solution name)
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["dotnet-heroku.csproj", "."]
RUN dotnet restore "./dotnet-heroku.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "dotnet-heroku.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "dotnet-heroku.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
CMD ASPNETCORE_URLS=http://*:$PORT dotnet dotnet-heroku.dll
After this run this command bellow to create a new Docker image from you project:
docker build -t {your heroku project name} .
//like docker build -t net6heroku .
And this command to logIn at heroku-cli
heroku login
heroku container:login
Now we need to TAG our imagem to push to Heroku’s Container registry:
docker tag <MyApp> registry.heroku.com/<MyApp>/web
//like docker tag net6heroku registry.heroku.com/net6heroku/web
Build the image locally and push it to Heroku’s Container Registry
heroku container:push web -a <MyApp>
//like heroku container:push web -a net6heroku
Now release the image on Heroku to be deployed:
heroku container:release web -a <MyApp>
//like heroku container:release web -a net6heroku
for this demo, I have used net6heroku as MyApp
Top comments (2)
It seems that something has changed .. I have this error in the logs ,
State changed from crashed to starting
2022-07-23T11:55:41.622521+00:00 heroku[web.1]: Starting process with command
/bin/sh -c ASPNETCORE_URLS\=http://\*:\42902\ dotnet\ WebApi.API.dll
2022-07-23T11:55:42.743639+00:00 heroku[web.1]: State changed from starting to crashed
Haven't you faced with something similar ?
I assume , it can be connected with a slash before the port number, I do not know why it is created there, investigating