多阶段构建Docker镜像

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

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

多阶段构建

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

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

项目目录:ui

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

该镜像生成后:code

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

相关文章
相关标签/搜索