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:prodFROM nginx
WORKDIR /usr/share/nginx/html
COPY --from=stage /app/dist/frontendDemo .
EXPOSE 80
Docker系列之八:在Dockerfile中使用多段构建Muti-stage build相关推荐
- Docker系列之二:基于容器的自动构建
自动构建系统是从美团的自动部署系统发展出来的一个新功能.每当开发人员提交代码到仓库后,系统会自动根据开发人员定制的构建配置,启动新的Docker容器,在其中对源代码进行构建(build),包括编译(如 ...
- 小丸子学Docker系列之——实战Dockerfile
这次研究下Docker的Dockerfile,通过Dockerfile来定制化和自动build自己的image,本次要实现的需求是定制一个包含Mysql,Mongodb,Redis三种数据库服务的镜 ...
- Docker系列之三:使用Docker镜像和仓库
系列链接 Docker系列之一:Docker介绍及在Ubuntu上安装 Docker系列之二:Docker 入门 Docker系列之三:使用Docker镜像和仓库 Docker系列之四:Dockerf ...
- Docker系列之五:Volume 卷的使用——以Redis为例
系列链接 Docker系列之一:Docker介绍及在Ubuntu上安装 Docker系列之二:Docker 入门 Docker系列之三:使用Docker镜像和仓库 Docker系列之四:Dockerf ...
- 【Docker系列教程之一】docker入门
我们在理解 docker 之前,首先我们得先区分清楚两个概念,容器和虚拟机. 我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系 ...
- Docker 的数据管理(Dockerfile的概述和构建)
文章目录 1 Docker 的数据管理 1.1 数据卷 1.2 数据卷容器 2 端口映射(2:31) 3 容器互联(使用 centos 镜像) 4 Docker 镜像的创建 4.1 基于现有镜像创建 ...
- Dockerfile中的指令与使用教程
一.概述 Dockerfile是Docker用来构建镜像的文本文件,包括自定义的指令和格式.可以通过docker build命令从Dockerfile中构建镜像.用户可以通过统一的语法命令来根据需求进 ...
- Docker系列07—Dockerfile 详解
Docker系列07-Dockerfile 详解 1.认识Dockerfile 1.1 镜像的生成途径 基于容器制作 dockerfile,docker build 基于容器制作镜像,已经在上篇Do ...
- docker run 挂载卷_如何在构建期间将主机卷挂载到Dockerfile中的Docker容器中
首先,回答"为什么不起作用VOLUME?" VOLUME在Dockerfile中定义a 时,只能定义目标,而不能定义卷的源.在构建期间,您将仅从中获得一个匿名卷.该匿名卷将在每个R ...
最新文章
- Python学习:使用Python解释器
- 48session的生命周期
- python创建虚拟环境命令_python 创建虚拟环境
- linux网络编程之-----基础理论篇
- weka的java环境配置_Linux(ubuntu)环境下配置weka
- 为了自动驾驶,沃尔沃包养了激光雷达公司Luminar
- 【接口自动化测试】使用Fitness实现接口自动化测试
- 老板说:明天来加班写个FCM消息推送功能......
- mysql encode 函数_MySQL常用函数
- 计算机vfp实验小结,vfp实验1报告心得体会
- 君则A3服务器地址异常信息,a3服务器端操作指南.doc
- 标准为先、产业当道,这次大会“探云”深刻……
- mcs-51单片机CPU的内部结构及工作原理
- win7网络无法连接其他计算机,Win7局域网不能访问如何解决?
- DTU有什么用?工业级DTU的特点是啥?
- 向量的内积(点积)、叉积(向量积)
- 奥斯汀大学计算机专业怎么样,德克萨斯大学奥斯汀分校计算机工程排名
- 安装部署 Kubernetes 仪表板(Dashboard)
- 在字节跳动“混”了2年软件测试岗,被辞之后我承认我后悔了...
- iOS 初中级工程师简历指北