Docker系列之八:在Dockerfile中使用多段构建Muti-stage build

系列链接

Docker系列之一:Docker介绍及在Ubuntu上安装

Docker系列之二:Docker 入门

Docker系列之三:使用Docker镜像和仓库

Docker系列之四:Dockerfile的使用

Docker系列之五:Volume 卷的使用——以Redis为例

Docker系列之六:Volume 卷的使用——在Dockerfile中的用法

Docker系列之七:Docker 网络(内部网络、容器之间的连接)

Docker系列之八:在Dockerfile中使用多段构建Muti-stage build

Docker系列之九:Docker用于持续集成,构建Jenkins和Docker服务器

Docker系列之十:Docker Compose的使用

简介

构建镜像的一个很有挑战性的事情是保持镜像的小体积。Dockerfile 中的每条指令都会为镜像添加一个层,并且需要你记得在进行到下一层之前清理所有不需要的文件。为了编写高效的 Dockerfile,通常需要使用 shell 技巧和其他逻辑来尽可能地减小层,并确保每个层都从上一层获取且仅仅获取需要的文件。

在Visual Studio中创建一个部署在Linux容器中的DotNetCore应用程序时,它自动创建了一个Dockerfile,内容如下:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

#第一步:使用此SDK进行build
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["Backend1Demo/Backend1Demo.csproj", "Backend1Demo/"]
#加载所需要的nuget依赖包
RUN dotnet restore "Backend1Demo/Backend1Demo.csproj"
#将代码COPY到此镜像的daemon中
COPY . .
WORKDIR "/src/Backend1Demo"
#执行build
RUN dotnet build "Backend1Demo.csproj" -c Release -o /app

#第二步:将build镜像继续作为publish镜像,最终生成的文件放在/app中。
FROM build AS publish
RUN dotnet publish "Backend1Demo.csproj" -c Release -o /app

#第三步:在运行dotnetcore程序的时候,只需要一个runtime镜像就可以了,让镜像的体积足够小
FROM base AS final
WORKDIR /app
#由于每个镜像的文件系统都是互相独立的,build镜像和publish镜像是同一个镜像,所以不用加--from,但publish镜像和runtime镜像是不同的镜像,所以需要从publish镜像将部署文件COPY过来
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Backend1Demo.dll"]

写到这里,如果你不会dotnetcore,看不懂的话,这里还有另一Dockerfile文件。

这是一个基于angular前端代码所使用的Dockerfile文件,首先它基于node镜像进行build,将build过后的文件放到nginx中运行,如下:

FROM node AS stage
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build:prod

FROM nginx
WORKDIR /usr/share/nginx/html
COPY --from=stage /app/dist/frontendDemo .
EXPOSE 80

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值