2019独角兽企业重金招聘Python工程师标准>>>

优化Docker镜像大小方案

2017年12月10日 17:54:46 阅读数:1774 标签: Docker 更多

个人分类: Docker&Kubernetes

所属专栏: Docker/Kubernetes技术分享

版权声明:本文为博主原创文章,欢迎分享到其它技术社区,分享请标明出处: https://blog.csdn.net/CHENYUFENG1991/article/details/78766123

我们如果使用Dockerfile来构建Docker镜像,如果一不小心就会导致镜像大小超过1G,这是非常恐怖的。一般也都是好几百兆。较大的镜像往往会导致移植,迁移缓慢。Dockerfile就像代码一样需要持续去进行优化。使用下面的4个优化方案,可以大幅度的减小镜像的大小。

  • 最重要的因素是减少镜像的层数,这样能大大减小镜像的大小;

使用链式代码“&&”把多行指令结合成一行。

该方式创建的镜像大小为:837.6M

FROM centos:6.7

MAINTAINER chenyufeng "yufengcode@gmail.com"

# 设置当前工具目录

# 该命令不会新增镜像层

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

转载于:https://my.oschina.net/u/3367404/blog/1935870

优化Docker镜像大小方案 2017年12月10日 17:54:46 阅读数:1774 标相关推荐

  1. eNSP使用介绍,VRP基础配置(2017年12月18日 17:43:53)

    pwd:查看所处路径 Idx:索引 drw:d--direc 代表这不是一个文件,是一个子文件夹    没有d的就是个具体的文件.r:可读  w:可以修改 直接dir只能查看所在的目录的文件.看其他的 ...

  2. 2017年12月5日 17:14:03

    通过开会了解了公司的基本规定, 自主配置了java环境,并进行了简单语句的输出.

  3. 12月10日周日下午广州Linuxer聚会(4大演讲主题+蜗窝大侠郭健主持)

    12月10日周日下午广州Linuxer聚会,四大主题演讲,加蜗窝大侠郭健主持.活动自发组织,就Linux论道,人人畅所欲言.欢迎报名. 相关活动: 已成最美好的回忆:北京Linuxer第一次线下交流研 ...

  4. 京东发力金融AI,欲再招50位金融AI顶级科学家 转载 2017年12月04日 00:00:00 42 12月1日,京东金融AI实验室在美国硅谷正式投入运营。亦在同一天,京东金融宣布,美国伊利诺伊大

    京东发力金融AI,欲再招50位金融AI顶级科学家 转载 2017年12月04日 00:00:00 42 12月1日,京东金融AI实验室在美国硅谷正式投入运营.亦在同一天,京东金融宣布,美国伊利诺伊大学 ...

  5. 从重采样到数据合成:如何处理机器学习中的不平衡分类问题? 转载 2017年08月01日 17:09:03 标签: 机器学习 / 数据 719 转自:http://www.sohu.com/a/12

    从重采样到数据合成:如何处理机器学习中的不平衡分类问题? 转载 2017年08月01日 17:09:03 标签: 机器学习 / 数据 719 转自:http://www.sohu.com/a/1293 ...

  6. 实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型 转载 2017年12月27日 00:00:00 109 翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 DeepCogn

    实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型 转载 2017年12月27日 00:00:00 标签: 109 编辑 删除 翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 ...

  7. 手游问道服务器维护到几点,问道手游2017年12月14日更新什么内容?维护到几点开机?...

    问道手游2017年12月14日更新什么内容?维护到几点开机? 各位亲爱的道友: 为保证服务器的运行稳定和服务质量,<问道>手游所有公测服务器(内测专区除外)将于2017年12月14日04: ...

  8. 梦想世界 2014年8月14日服务器维护公告,2017年12月14日更新公告

    2017年12月14日更新公告 发布时间:2017-12-14 [新增内容] 1.冰火大作战:每周六下午15:00-16:00,变身两大阵营的战士,在地图场景上用技能进行对抗,提前在花好月圆服务器开放 ...

  9. 2017年度盘点:15个最流行的GitHub机器学习项目 By 机器之心2017年12月21日 15:23 在本文中,作者列出了 2017 年 GitHub 平台上最为热门的知识库,囊括了数据科学、机

    2017年度盘点:15个最流行的GitHub机器学习项目 By 机器之心2017年12月21日 15:23 在本文中,作者列出了 2017 年 GitHub 平台上最为热门的知识库,囊括了数据科学.机 ...

最新文章

  1. UOJ #274. 【清华集训2016】温暖会指引我们前行 [lct]
  2. javascript数组的操作
  3. JAVA面试题总汇(含答案)
  4. linux系统在虚拟机中迁移的技术难点
  5. 【GWT系列】 Speed Tracer 入门
  6. linux vi 块操作、多窗口
  7. Leetcode(二):Add Two Numbers
  8. java winform 工具,重拾JAVA之WinForm实战之(六)
  9. 大厂P5、P6、P7级程序员的简历长什么样?
  10. 2.安装Clouda框架
  11. Cat源码分析(三):10种分析器
  12. Android 活用RecyclerView分割线
  13. Excel无法完全显示超过11位数的数字?超简单方法1秒教给你!
  14. qq登陆inc.php,JTBC(php) 版 QQ 一键登录实现过程
  15. 警惕:这本期刊已被剔除,EI期刊目录更新
  16. Windows8内核模式下开发NDIS应用-NDIS Filter讲解
  17. Centos--时间/日历/计算器
  18. keep 虚拟路线修改器_二次元出圈搞综艺,杨颖、虞书欣、小鬼打造二次元虚拟偶像...
  19. Veri2. VCS behavioral analysis for the un-driven port
  20. 韦尔奇经典的一次演讲:2001年夏,在股东年会上的讲话(中英文)

热门文章

  1. Excel 防止一列重复输入
  2. 区块链金融中的python应用--LSM定价
  3. oracle 10 dbca第12步,第10步:DBCA创建实例
  4. 网站收录查询方法,网站收录减少的原因
  5. 小狗钱钱 的读书笔记
  6. 【小狗钱钱】—— 送人生一份理财
  7. 如何将电脑的无线网通过有线分享给其他设备
  8. 计算机辅助绘图 选修,计算机辅助绘图(CAD)教学大纲.doc
  9. matlab图形黎曼几何,张思容
  10. 5+App使用UniPush发送消息,App在线、离线均能收到消息推送,并在通知栏进行提醒,苹果、华为、小米手机均测试通过