多階段構建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

相關文章
相關標籤/搜索