[HttpGet(Name = "GetDemo")]
public ActionResult Get()
{
return this.Ok("OK~");
}
加入 Dockerfile
由 Rider 產生出來的 Dockerfile 內容如下
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["Lab.TestContainers.WebApi/Lab.TestContainers.WebApi.csproj", "Lab.TestContainers.WebApi/"]
RUN dotnet restore "Lab.TestContainers.WebApi/Lab.TestContainers.WebApi.csproj"
COPY . .
WORKDIR "/src/Lab.TestContainers.WebApi"
RUN dotnet build "Lab.TestContainers.WebApi.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Lab.TestContainers.WebApi.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Lab.TestContainers.WebApi.dll"]
var solutionDirectory = CommonDirectoryPath.GetSolutionDirectory();
var dockerFilePath = "Lab.TestContainers.WebApi/Dockerfile";
var imageBuilder = new ImageFromDockerfileBuilder()
.WithDockerfileDirectory(solutionDirectory, string.Empty)
.WithDockerfile(dockerFilePath)
.WithName("my.aspnet.core.7")
.Build();
await imageBuilder.CreateAsync()
.ConfigureAwait(false);
啟動 Container
var container = new ContainerBuilder()
.WithImage("my.aspnet.core.7")
.WithName("my.aspnet.core.7")
.WithPortBinding(80)
.Build()
;
await container.StartAsync()
.ConfigureAwait(false);
;
打端點,回傳 "OK~"
var scheme = "http";
var host = "localhost";
var port = container.GetMappedPublicPort(80);
var url = "demo";
var httpClient = new HttpClient();
var requestUri = new UriBuilder(scheme, host, port, url).Uri;
var actual = await httpClient.GetStringAsync(requestUri);
Assert.AreEqual("OK~", actual);