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。
在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"]
在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"]