首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最佳实践网络核心Api和码头

最佳实践网络核心Api和码头
EN

Stack Overflow用户
提问于 2020-12-12 16:04:36
回答 1查看 576关注 0票数 0

我试图在网络上找到如何正确地管理Dockerfile,以使尽可能最好的形象,但不幸的是,没有好的方式出现在我面前。所以我才在这里问。

这是我的背景:

  • 我正在开发NetCore3webAPI
  • 我在使用VS2019
  • 的模板,我使用的是原始DockerFile,并对

进行了一些修改

这是我的Dockerfile:

代码语言:javascript
运行
复制
#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/core/aspnet:3.1-buster-slim AS base
RUN apt-get update;apt-get install libfontconfig1 -y
WORKDIR /app
EXPOSE 80
EXPOSE 443

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

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "API.dll"]

这是我的解决方案结构:

代码语言:javascript
运行
复制
.
|   .dockerignore
|   mySolution.sln
+---Docs
+---Src
|   \---API
|       |   API.csproj
|       |   API.csproj.user
|       |   appsettings.Development.json
|       |   appsettings.json
|       |   appsettings.Staging.json
|       |   Dockerfile
|       |   Dockerfile.original
|       |   Program.cs
|       |   Startup.cs
|       +---.config
|       |       dotnet-tools.json 
|       +---bin
|       +---Controllers (source files)
|       +---Data (source files)
|       +---Database (source files)
|       +---Dtos (source files)
|       +---Helpers (source files)
|       +---Mail (source files)
|       +---Migrations (EF source files)
|       +---Models (source files)
|       +---obj              
|       +---PDF (source files)
|       +---Properties
|       |   |   launchSettings.json
|       +---Services (source files)
|       \---wwwroot
|           +---Templates
|           \---uploads
\---Tests

如您所见,如果我想构建没有VS2019的映像,就必须将Dockerfile放到根目录( .sln文件所在的位置)。

现在,如果我使用这个Dockerfile,Docker将从Src目录中复制所有文件/目录,包括bin / obj目录和wwwroot目录,后者可以包含我上传测试中的一些文件。

如果我在Visual中签入容器中的文件结构:

你可以看到,我不需要所有的文件,只有我的资源,以建立和部署我的应用程序。

如何才能升级我的Dockerfile,以创建最合适的映像?

EN

回答 1

Stack Overflow用户

发布于 2020-12-12 16:12:01

一些小贴士:

  • 在安全性/可移植性方面使用高寒而不是最终图像中的buster
  • ,在最终图像中使用“用户无人”作为非根用户运行Dockerfile。需要使用1024.

以上端口的

为了构建目的,可以使用'-f‘来控制当前上下文,这样就可以将Dockerfile留在内部,但是可以从解决方案根目录中使用上下文,即使您有CI/CD pipelines.

  • Run,在最后一个阶段之前,您的单元测试也会在Dockerfile中进行,所以如果失败,它就会停止。

  • 会考虑机密,这取决于您将在哪里运行容器,因为AppConfigs不是AppConfigs。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65267020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档