zoukankan      html  css  js  c++  java
  • 多阶段构建Docker镜像

    在Docker 17.05及更高的版本中支持支持一种全新的构建镜像模式:多阶段构建
      多阶段构建Docker镜像的最大好处是使构建出来的镜像变得更小;

      目前常见的两个构建镜像的方式为:
      1、直接使用某基础镜像,在此基础上安装环境构建应用、部署应用;
      2、构建应用和部署应用为不同镜像,使用某基础镜像构建应用,然后通过数据卷将应用共享给新镜像;
      第一种方式构建出来的镜像通常都非常大,而且还有许多构建应用时生成的飞运行应用所需要的问题,比如Maven就会生成不少依赖;
      第二种方式镜像稍有减小,做到了构建应与部署应用镜像的分离但又出现了新的问题,原本只需要一个Dockerfile现在分离后又多出来一个Dockerfile文件,管理Dockerfile与数据卷也都是麻烦的事情;

    多阶段构建

      下面再Dockerfile文件中使用多阶段构建;
      1、该Dockerfile中有两个FROM为两步构建,在Maven基础镜像中编译生成Jar、依赖,这阶段命名为:BUILD
      2、使用linx/alpine-jdk8:0.1作为基础镜像,设置环境、创建目录,更重要的是使用COPY --from把BUILD阶段生成的项目文件拷贝到镜像中;

     FROM maven:3.5-jdk-8 as BUILD
    
     COPY src /usr/app/src
     COPY pom.xml /usr/app
     COPY ./docker/start.sh /usr/app/
    
     RUN mvn -f /usr/app/pom.xml clean package  -U -Dmaven.test.skip=true
     RUN mvn -f /usr/app/pom.xml dependency:copy-dependencies
    
     FROM linx/alpine-jdk8:0.1
    
     # 设置locale
     ENV LANG en_US.UTF-8
     ENV LANGUAGE en_US:en
     ENV LC_ALL en_US.UTF-8
     ENV TZ=Asia/Shanghai
    
     RUN mkdir /app_home
    
     WORKDIR /app_home
    
     COPY --from=BUILD /usr/app/target/nettyDemo-1.0-SNAPSHOT.jar /app_home
     COPY --from=BUILD /usr/app/target/dependency /app_home/dependency
     COPY --from=BUILD /usr/app/start.sh /app_home
     COPY ./docker/start.sh /app_home/
     RUN chmod +x /app_home/start.sh
    
     CMD  /app_home/start.sh
    

    项目目录:

    执行:docker build -t demo . 使用该Dockerfile文件构建镜像;

    该镜像生成后:

    文章首发地址:Solinx
    http://www.solinx.co/archives/1111

  • 相关阅读:
    .NET 事件模型教程(一)
    [转帖]Predicate的用法
    MSBuild入门(续)
    浅析C# 中object sender与EventArgs e
    调用一个按钮的Click事件(利用反射)
    Delegate,Action,Func,匿名方法,匿名委托,事件
    投票系统如何防止一个用户多次投票
    如何发送表单
    SharePoint NLB选Unicast还是选Multicast?
    为SharePoint的多台WFE配置Windows自带的NLB遇到的一个问题
  • 原文地址:https://www.cnblogs.com/softlin/p/8138232.html
Copyright © 2011-2022 走看看