导航仪企业网站源码,wordpress采集插件 免费,深圳物流公司哪家便宜又好,自己怎么建立公司网站在这容器化的世界里#xff0c;我们已经很少直接通过文件发布来运行asp.net core程序了。现在大多数情况下#xff0c;我们都会使用docker来运行程序。在使用docker之前#xff0c;我们往往需要打包我们的应用程序。asp.net core程序的镜像打包#xff0c;网上有很多教程我们已经很少直接通过文件发布来运行asp.net core程序了。现在大多数情况下我们都会使用docker来运行程序。在使用docker之前我们往往需要打包我们的应用程序。asp.net core程序的镜像打包网上有很多教程其中大多数是使用sdk这个镜像来直接打包。打出来的包有好几百MB3.1 SDK打出来的包甚至超过了1GB。那么有什么办法来缩小我们打出来的镜像吗最小能缩小到多少呢这篇文章就来介绍下如何缩小asp.net core 打包出来镜像的大小。新建asp.net core 程序新建一个asp.net core应用程序用来演示打包。首先我们演示下如果使用dotnet sdk5.0来打包 docker 镜像。sdk:5.0FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /app
COPY /. /app
RUN dotnet restore -s https://nuget.cdn.azure.cn/v3/index.json
WORKDIR /app/CoreDockerImageSizeTest
RUN dotnet publish -o ./out -c Release
EXPOSE 5000
ENTRYPOINT [dotnet, out/CoreDockerImageSizeTest.dll]
在项目根目录下新建一个Dockerfile文件文件内容如上。这个Dockerfile比较简单使用dotnet sdk:5.0最为底层包来构建这也是最傻瓜的打包方式。那么看看这个镜像打出来有多大吧。docker build . -t coredockerimagesizetest_0.1
使用docker build命令进行打包。REPOSITORY TAG IMAGE ID CREATED SIZE
coredockerimagesizetest_0.1 latest 14aea8e0c1d5 5 seconds ago 643MB
使用docker images命令来查看镜像列表我们发现我们打出来的镜像居然有643MB真的很大。如果是内网还好一点如果在镜像存在docker hub等第三方仓库这得下半天。显然这个镜像太大了接下来看我们如何进行优化。sdk:5.0-buster-slim最新的VisualStudio内置了docker工具可以自动为我们生成Dockerfile文件。我们来看看它生成的镜像文件有多大。右键解决方案添加Docker支持Linux 。选择完成后VS会为我们自动添加一个Dockerfile在根目录。FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 5000
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY [CoreDockerImageSizeTest/CoreDockerImageSizeTest.csproj, CoreDockerImageSizeTest/]
RUN dotnet restore CoreDockerImageSizeTest/CoreDockerImageSizeTest.csproj
COPY . .
WORKDIR /src/CoreDockerImageSizeTest
RUN dotnet build CoreDockerImageSizeTest.csproj -c Release -o /app/build
FROM build AS publish
RUN dotnet publish CoreDockerImageSizeTest.csproj -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --frompublish /app/publish .
ENTRYPOINT [dotnet, CoreDockerImageSizeTest.dll]
这个自动生成的Dockerfile使用了sdk:5.0-buster-slim这个镜像进行build跟publish使用aspnet:5.0-buster-slim这个runtime级别的镜像做为final底包。从名字来看很明显slim代表着轻量。让我们试试这个Dockerfile打出来的包有多大。REPOSITORY TAG IMAGE ID CREATED SIZE
coredockerimagesizetest_0.2 latest 0a24618f6ece 11 seconds ago 210MB
使用docker build命令进行打包。使用docker images命令查看镜像的大小这个镜像的大小为210MB。果然比上面的镜像小了很多。那么是否还能继续缩小镜像的大小呢继续往下看。5.0-alpine除了使用buster-slim镜像我们还可以选择更加小巧的alpine镜像来打包。alpine镜像是继续alpine linux创建的镜像所以它更加轻量级更加小巧。关于alpine linux可以查看这篇Alpine Linux 与 CentOS 有什么区别。FROM mcr.microsoft.com/dotnet/aspnet:5.0-alpine AS base
WORKDIR /app
EXPOSE 5000
FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine AS build
WORKDIR /src
COPY [CoreDockerImageSizeTest/CoreDockerImageSizeTest.csproj, CoreDockerImageSizeTest/]
RUN dotnet restore CoreDockerImageSizeTest/CoreDockerImageSizeTest.csproj
COPY . .
WORKDIR /src/CoreDockerImageSizeTest
RUN dotnet build CoreDockerImageSizeTest.csproj -c Release -o /app/build
FROM build AS publish
RUN dotnet publish CoreDockerImageSizeTest.csproj -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --frompublish /app/publish .
ENTRYPOINT [dotnet, CoreDockerImageSizeTest.dll]
修改Dockerfile使用aspnet:5.0-alpine及sdk:5.0-alpine来构建这个镜像。REPOSITORY TAG IMAGE ID CREATED SIZE
coredockerimagesizetest_0.3 latest db34d613e21a 12 seconds ago 108MB
使用docker build命令进行打包。使用docker images命令查看镜像的大小这个镜像的大小为108MB。现在这个镜像已经比我们第一次打包减少了500多MB了。那么还能更小吗请往下看。runtime-deps:5.0-alpine最新的.net core程序支持自宿主及单文件发布。如果采用以上发布形式那么我们可以选择使用runtime-deps:5.0-alpine做为最终底包来打包我们的镜像。FROM mcr.microsoft.com/dotnet/aspnet:5.0-alpine AS base
WORKDIR /app
EXPOSE 5000
FROM mcr.microsoft.com/dotnet/sdk:5.0-alpine AS build
WORKDIR /src
COPY [CoreDockerImageSizeTest/CoreDockerImageSizeTest.csproj, CoreDockerImageSizeTest/]
RUN dotnet restore CoreDockerImageSizeTest/CoreDockerImageSizeTest.csproj
COPY . .
WORKDIR /src/CoreDockerImageSizeTest
RUN dotnet build CoreDockerImageSizeTest.csproj -c Release -o /app/build
FROM build AS publish
RUN dotnet publish CoreDockerImageSizeTest.csproj -c Release -o /app/publish \--runtime alpine-x64 \--self-contained true \/p:PublishTrimmedtrue \/p:PublishSingleFiletrue
FROM mcr.microsoft.com/dotnet/runtime-deps:5.0-alpine AS final
WORKDIR /app
COPY --frompublish /app/publish .
ENTRYPOINT [./CoreDockerImageSizeTest]
修改Dockerfile使用/runtime-deps:5.0-alpine做为final镜像。REPOSITORY TAG IMAGE ID CREATED SIZE
coredockerimagesizetest_0.5 latest dab1289626f9 6 seconds ago 54.6MB
使用docker build命令进行打包。使用docker images命令查看镜像的大小这个镜像的大小为54.6MB。总结通过以上演示我们的镜像大小从一开始的600多MB缩小到了54MB。一般生产我主要选择buster-slim这个镜像来打包。如果选择runtime-deps打包打出来的包是最小的虽然演示项目是可以运行的但是本人没有在生产使用过还请谨慎使用。代码在这CoreDockerImageSizeTest关注我的公众号一起玩转技术