系列链接

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相关推荐

  1. Docker系列之二:基于容器的自动构建

    自动构建系统是从美团的自动部署系统发展出来的一个新功能.每当开发人员提交代码到仓库后,系统会自动根据开发人员定制的构建配置,启动新的Docker容器,在其中对源代码进行构建(build),包括编译(如 ...

  2. 小丸子学Docker系列之——实战Dockerfile

     这次研究下Docker的Dockerfile,通过Dockerfile来定制化和自动build自己的image,本次要实现的需求是定制一个包含Mysql,Mongodb,Redis三种数据库服务的镜 ...

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

    系列链接 Docker系列之一:Docker介绍及在Ubuntu上安装 Docker系列之二:Docker 入门 Docker系列之三:使用Docker镜像和仓库 Docker系列之四:Dockerf ...

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

    系列链接 Docker系列之一:Docker介绍及在Ubuntu上安装 Docker系列之二:Docker 入门 Docker系列之三:使用Docker镜像和仓库 Docker系列之四:Dockerf ...

  5. 【Docker系列教程之一】docker入门

    我们在理解 docker 之前,首先我们得先区分清楚两个概念,容器和虚拟机. 我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系 ...

  6. Docker 的数据管理(Dockerfile的概述和构建)

    文章目录 1 Docker 的数据管理 1.1 数据卷 1.2 数据卷容器 2 端口映射(2:31) 3 容器互联(使用 centos 镜像) 4 Docker 镜像的创建 4.1 基于现有镜像创建 ...

  7. Dockerfile中的指令与使用教程

    一.概述 Dockerfile是Docker用来构建镜像的文本文件,包括自定义的指令和格式.可以通过docker build命令从Dockerfile中构建镜像.用户可以通过统一的语法命令来根据需求进 ...

  8. Docker系列07—Dockerfile 详解

    Docker系列07-Dockerfile 详解 1.认识Dockerfile 1.1 镜像的生成途径 基于容器制作  dockerfile,docker build 基于容器制作镜像,已经在上篇Do ...

  9. docker run 挂载卷_如何在构建期间将主机卷挂载到Dockerfile中的Docker容器中

    首先,回答"为什么不起作用VOLUME?" VOLUME在Dockerfile中定义a 时,只能定义目标,而不能定义卷的源.在构建期间,您将仅从中获得一个匿名卷.该匿名卷将在每个R ...

最新文章

  1. Python学习:使用Python解释器
  2. 48session的生命周期
  3. python创建虚拟环境命令_python 创建虚拟环境
  4. linux网络编程之-----基础理论篇
  5. weka的java环境配置_Linux(ubuntu)环境下配置weka
  6. 为了自动驾驶,沃尔沃包养了激光雷达公司Luminar
  7. 【接口自动化测试】使用Fitness实现接口自动化测试
  8. 老板说:明天来加班写个FCM消息推送功能......
  9. mysql encode 函数_MySQL常用函数
  10. 计算机vfp实验小结,vfp实验1报告心得体会
  11. 君则A3服务器地址异常信息,a3服务器端操作指南.doc
  12. 标准为先、产业当道,这次大会“探云”深刻……
  13. mcs-51单片机CPU的内部结构及工作原理
  14. win7网络无法连接其他计算机,Win7局域网不能访问如何解决?
  15. DTU有什么用?工业级DTU的特点是啥?
  16. 向量的内积(点积)、叉积(向量积)
  17. 奥斯汀大学计算机专业怎么样,德克萨斯大学奥斯汀分校计算机工程排名
  18. 安装部署 Kubernetes 仪表板(Dashboard)
  19. 在字节跳动“混”了2年软件测试岗,被辞之后我承认我后悔了...
  20. iOS 初中级工程师简历指北

热门文章

  1. 团队作业——Alpha冲刺 8/12
  2. AIC,AIB,同德显卡五兄弟,
  3. 微信开发者工具 缓存目录
  4. 刺客信条奥德赛ce修改技能点_刺客信条奥德赛特长加点
  5. Day10安卓 专高 day10 ContentProvider内容提供者
  6. 电脑屏幕亮度,细说电脑屏幕亮度怎么调
  7. 学成在线-第13天-讲义-在线学习 HLS
  8. [渝粤教育] 长安大学 互换性与技术测量 参考 资料
  9. 网易MUMU模拟器怎么设置不卡?
  10. 必考面试题:浏览器怎么渲染页面的