優化Docker鏡像大小方案 2017年12月10日 17:54:46 閱讀數:1774 標

優化Docker鏡像大小方案

2017年12月10日 17:54:46 閱讀數:1774 標籤: Docker 更多html

我的分類: Docker&Kubernetesjava

所屬專欄: Docker/Kubernetes技術分享linux

版權聲明:本文爲博主原創文章,歡迎分享到其它技術社區,分享請標明出處: https://blog.csdn.net/CHENYUFENG1991/article/details/78766123apache

       咱們若是使用Dockerfile來構建Docker鏡像,若是一不當心就會致使鏡像大小超過1G,這是很是恐怖的。通常也都是好幾百兆。較大的鏡像每每會致使移植,遷移緩慢。Dockerfile就像代碼同樣須要持續去進行優化。使用下面的4個優化方案,能夠大幅度的減少鏡像的大小。ubuntu

 

  • 最重要的因素是減小鏡像的層數,這樣能大大減少鏡像的大小;

使用鏈式代碼「&&」把多行指令結合成一行。centos

 

該方式建立的鏡像大小爲:837.6M緩存

FROM centos:6.7tomcat

MAINTAINER chenyufeng "yufengcode@gmail.com"cookie

 

# 設置當前工具目錄oracle

# 該命令不會新增鏡像層

WORKDIR /home

 

# 安裝必要的工具

RUN yum install -y wget && rpm --rebuilddb && yum install -y tar

 

# 從jdk官網下載壓縮包

RUN wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz && tar -xvzf jdk-8u131-linux-x64.tar.gz

 

# 從tomcat官網下載壓縮包

RUN wget http://mirrors.shuosc.org/apache/tomcat/tomcat-8/v8.0.47/bin/apache-tomcat-8.0.47.tar.gz && tar -xvzf apache-tomcat-8.0.47.tar.gz && mv apache-tomcat-8.0.47/ tomcat

 

# 設置環境變量

ENV JAVA_HOME /home/jdk1.8.0_131

ENV CATALINA_HOME /home/tomcat

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

 

# 暴露tomcat 8080端口

EXPOSE 8080

 

ENTRYPOINT /home/tomcat/bin/startup.sh && tail -f /home/tomcat/logs/catalina.out

 

# 建立容器啓動tomcat

CMD ["/home/tomcat/bin/startup.sh","run"]

 

 

其實在不影響閱讀的狀況下,能夠只寫成一行RUN代碼,用「&&」,「\」進行鏈接。可是構建過程會比多個RUN時更慢。

 

該方式建立的鏡像大小爲:837.6M【結果仍是同樣的】

FROM centos:6.7

MAINTAINER chenyufeng "yufengcode@gmail.com"

 

# 設置當前工具目錄

# 該命令不會新增鏡像層

WORKDIR /home

 

# 安裝必要的工具

RUN yum install -y wget && \

    rpm --rebuilddb && \

    yum install -y tar && \

    wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz && \

    tar -xvzf jdk-8u131-linux-x64.tar.gz && \

    wget http://mirrors.shuosc.org/apache/tomcat/tomcat-8/v8.0.47/bin/apache-tomcat-8.0.47.tar.gz && \

    tar -xvzf apache-tomcat-8.0.47.tar.gz && \

    mv apache-tomcat-8.0.47/ tomcat

 

# 設置環境變量

ENV JAVA_HOME /home/jdk1.8.0_131

ENV CATALINA_HOME /home/tomcat

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

 

# 暴露tomcat 8080端口

EXPOSE 8080

 

ENTRYPOINT /home/tomcat/bin/startup.sh && tail -f /home/tomcat/logs/catalina.out

 

# 建立容器啓動tomcat

CMD ["/home/tomcat/bin/startup.sh","run"]

 

能夠根據實際的需求和測試結果,選擇須要幾個RUN。

 

 

  • 清除yum緩存

在Dockerfile中咱們可能會使用yum命令下載一些東西,可是會有yum會把下載的軟件包和header存儲在緩存中,而不會自動刪除。

在每一層均可以執行該步驟,也就是每一層均可以去清除yum緩存,而不是說一個Dockerfile文件只要一個yun clean all便可,應該是一個鏡像層須要一個yun clean all。

 

# 清除header

yum clean headers

 

 

# 清除下載的rpm包

yum clean packages

 

 

# 所有清除

yun clean all

 

 

優化的Dockerfile,構建出來的鏡像大小爲788.1M:

FROM centos:6.7

MAINTAINER chenyufeng "yufengcode@gmail.com"

 

# 設置當前工具目錄

# 該命令不會新增鏡像層

WORKDIR /home

 

# 安裝必要的工具

RUN yum install -y wget && \

    rpm --rebuilddb && \

    yum install -y tar && \

    wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz && \

    tar -xvzf jdk-8u131-linux-x64.tar.gz && \

    wget http://mirrors.shuosc.org/apache/tomcat/tomcat-8/v8.0.47/bin/apache-tomcat-8.0.47.tar.gz && \

    tar -xvzf apache-tomcat-8.0.47.tar.gz && \

    mv apache-tomcat-8.0.47/ tomcat && \

    yum clean all

 

# 設置環境變量

ENV JAVA_HOME /home/jdk1.8.0_131

ENV CATALINA_HOME /home/tomcat

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

 

# 暴露tomcat 8080端口

EXPOSE 8080

 

ENTRYPOINT /home/tomcat/bin/startup.sh && tail -f /home/tomcat/logs/catalina.out

 

# 建立容器啓動tomcat

CMD ["/home/tomcat/bin/startup.sh","run"]

 

 

  • 清除無用的tar.gz安裝包

在Dockerfile中可能會使用相似wget等命令下載多個tar.gz  , tar包,在使用完成後應該把它們刪除。同時最好結合」yum clean all」一塊兒使用。

 

此時構建的鏡像大小爲 593.2M   。瘦身效果很是明顯。

FROM centos:6.7

MAINTAINER chenyufeng "yufengcode@gmail.com"

 

# 設置當前工具目錄

# 該命令不會新增鏡像層

WORKDIR /home

 

# 安裝必要的工具

RUN yum install -y wget && \

    rpm --rebuilddb && \

    yum install -y tar && \

    wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz && \

    tar -xvzf jdk-8u131-linux-x64.tar.gz && \

    wget http://mirrors.shuosc.org/apache/tomcat/tomcat-8/v8.0.47/bin/apache-tomcat-8.0.47.tar.gz && \

    tar -xvzf apache-tomcat-8.0.47.tar.gz && \

    mv apache-tomcat-8.0.47/ tomcat && \

    rm -f jdk-8u131-linux-x64.tar.gz && \

    rm -f apache-tomcat-8.0.47.tar.gz && \

    yum clean all

 

# 設置環境變量

ENV JAVA_HOME /home/jdk1.8.0_131

ENV CATALINA_HOME /home/tomcat

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

 

# 暴露tomcat 8080端口

EXPOSE 8080

 

ENTRYPOINT /home/tomcat/bin/startup.sh && tail -f /home/tomcat/logs/catalina.out

 

# 建立容器啓動tomcat

CMD ["/home/tomcat/bin/startup.sh","run"]

 

 

 

 

  • 選擇更小的基礎鏡像

 

從源頭減少自定義鏡像的大小。

 

 

這裏以ubuntu16.04來對比上面的centos6.7,

 

下面構建出的鏡像爲:558.6M。 比centos的基礎鏡像減少很多。

FROM ubuntu:16.04

MAINTAINER chenyufeng "yufengcode@gmail.com"

 

# 設置當前工具目錄

# 該命令不會新增鏡像層

WORKDIR /home

 

# 安裝必要的工具

 

RUN apt-get update

RUN apt-get install wget --assume-yes

#RUN rpm --rebuilddb

RUN apt-get install tar --assume-yes

 

RUN wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz && \

    tar -xvzf jdk-8u131-linux-x64.tar.gz && \

    wget http://mirrors.shuosc.org/apache/tomcat/tomcat-8/v8.0.47/bin/apache-tomcat-8.0.47.tar.gz && \

    tar -xvzf apache-tomcat-8.0.47.tar.gz && \

    mv apache-tomcat-8.0.47/ tomcat && \

    rm -f jdk-8u131-linux-x64.tar.gz && \

    rm -f apache-tomcat-8.0.47.tar.gz

 

# 設置環境變量

ENV JAVA_HOME /home/jdk1.8.0_131

ENV CATALINA_HOME /home/tomcat

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

 

# 暴露tomcat 8080端口

EXPOSE 8080

 

ENTRYPOINT /home/tomcat/bin/startup.sh && tail -f /home/tomcat/logs/catalina.out

 

# 建立容器啓動tomcat

CMD ["/home/tomcat/bin/startup.sh","run"]

相關文章
相關標籤/搜索