因應 Heroku 免費方案取消,紀錄部屬到 Cloud Run 需要調整的設定
- Dockerfile
VS自動產生的即可,但須移動到上一層資料夾(同.sln),並修改line 8,改為 :COPY . ./
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY . ./
RUN dotnet restore "project/project.csproj"
COPY . .
WORKDIR "/src/project"
RUN dotnet build "project.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "project.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "project.dll"]
- Program.cs
Release 時要抓環境變數設定 Port
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
#if DEBUG
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
#endif
#if !DEBUG
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.ConfigureKestrel(options =>
{
var port = Convert.ToInt32(Environment.GetEnvironmentVariable("PORT") ?? "8080");
options.Listen(IPAddress.Any, port);
});
});
#endif
}
}
- 執行指令
編譯並上傳到 GCP 的 Docker image 管理平台 Container Registry
docker build -t project -f Dockerfile .
gcloud builds submit --tag asia.gcr.io/project/project
參考資料
https://blog.cloud-ace.tw/application-modernization/serverless/cloud-run-api-server/
https://www.minwt.com/website/server/22839.html
https://blog.darkthread.net/blog/aspnetcore-docker-with-cli/