Docker镜像压缩

一.Dockerfile合理分层

Dockerfile的写法不合理,有时候会导致镜像膨胀,由于Docker是分层设计,而在Dockerfile中,每一条指令都拥有自己的context,而执行到下一条指令时,则会将下一层的构建层叠加到上一层上。因此,假如你在上一层指令做了一些包下载操作安装操作,然后在下一层再做清理,其实没什么用,只能说明你下一层引入的diff是0而已。

可以实验一下:

对照组A:下载清理操作全在同一层

FROM centos
MAINTAINER **

RUN yum -y update
RUN yum -y install wget

RUN wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.tar.gz" -O /tmp/jdk8_x64.tar.gz && gunzip /tmp/jdk8_x64.tar.gz && tar -C /opt -xf /tmp/jdk8_x64.tar && ln -s /opt/jdk1.8.0_121 /opt/jdk && yum clean all && rm -fr /tmp/*

对照组B:下载清理操作放在不同层

FROM centos
MAINTAINER **

RUN yum -y update
RUN yum -y install wget

RUN wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u121-b13/e9e7ea248e2c4826b92b3f075a80e441/jdk-8u121-linux-x64.tar.gz" -O /tmp/jdk8_x64.tar.gz && gunzip /tmp/jdk8_x64.tar.gz && tar -C /opt -xf /tmp/jdk8_x64.tar && ln -s /opt/jdk1.8.0_121 /opt/jdk
RUN yum clean all
RUN rm -fr /tmp/*

分别执行构建操作,得到的镜像差异很大,其中test1为对照组A的构建结果,test2为对照组B的构建结果,两者相差400M.

[email protected]:~/workspace/docker_project$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test2               latest              a65c6cced43b        13 minutes ago      1.1 GB
test1               latest              67897397b053        14 minutes ago      729 MB
时间: 2024-10-09 06:18:17

Docker镜像压缩的相关文章

深刻理解Docker镜像大小

都说容器大法好,可是假设没有Docker镜像,Docker该是多无趣啊. 是否还记得第一个接触Docker的时候,你从Docker Hub下拉的那个镜像呢?在那个处女镜像的基础上.你执行了容器生涯的处女容器.镜像的基石作用已经非常明显.在Docker的世界里,能够说是:No Image,No Container. 再进一步思考Docker镜像,大家可能非常快就会联想到下面几类镜像: 1.系统级镜像:如Ubuntu镜像.CentOS镜像以及Debian容器等: 2.工具栈镜像:如Golang镜像.

理解Docker(2):Docker 镜像

对于每个软件,除了它自身的代码以外,它的运行还需要有一个运行环境和依赖.不管这个软件是象往常一样运行在物理机或者虚机之中,还是运行在现在的容器之中,这些都是不变的.在传统环境中,软件在运行之前也需要经过 代码开发->运行环境准备 -> 安装软件 -> 运行软件 等环节,在容器环境中,中间的两个环节被镜像制作过程替代了.也就是说,镜像的制作也包括运行环境准备和安装软件等两个主要环节,以及一些其他环节.因此,Docker 容器镜像其实并没有什么新的理论,只是这过程有了新的方式而已. 镜像(i

docker镜像创建

关于docker镜像的构建有四种形式:     官方下载    dockerfile创建    yum安装    容器commit生成 作为比较核心的东西,镜像的好坏直接影响docker的使用体验 首先说下四种方式的区别: ①官方下载就是docker pull 自己需要的镜像,当然这个是按照镜像的名字去下载,这里就有一个问题,别人写的镜像跟自己的需求不一定是完全吻合的. ②然后是dockerfile写镜像,这个是在官方镜像的基础上去添加自己想要的东西,构成自己的镜像,个人感觉是一种折中的方案.但

docker镜像基本操作一

获取镜像 首先说明一下如何从Docker hub中获取高质量的镜像,从Docker镜像库获取镜像的命令是docker pull .其命令格式为: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] 具体的选项可以通过docker pull --help命令看到,下面我们说一下镜像名称的格式: docker镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号] .默认地址是 DockerHub. 仓库名:仓库名是两段式名称,即<用户

Docker学习笔记(2)-docker镜像操作

本节将会涉及Docker的镜像操作. 1. 获取镜像 如何获取Docker Hub上的镜像?可通过docker pull命令获取,其格式为: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签],具体可通过docker pull --help命令查看. Docker镜像仓库地址的格式一般为<域名/IP>[:端口号],仓库名一般为两段式名称,即<用户名>/<软件名>,对于Docker Hub,默认的用户名为library

使用Docker镜像

什么是Docker镜像? Docer的镜像是一个只读的文件系统,除了提供容器(进程)运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷.环境变量.用户等).镜像不包含任何动态数据,其内容在构建之后也不会改变. 获取镜像 Docker Hub上有大量的高质量的镜像可以用,从Docker镜像仓库获取镜像的命令是docker pull,其命令格式为 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] 镜像名称

Docker镜像构建的优化总结

Docker镜像构建的优化总结 随着我们对docker镜像的持续使用,在此过程中如果不加以注意并且优化,镜像的体积会越来越多.很多时候我们在使用docker部署应用时,会发现镜像的体积至少有1G以上.镜像体积的增大,不单单会增加磁盘资源与网络资源的开销,也会影响应用的部署效率,使得应用的部署时间会越来越长.因此我们需要减少部署镜像的体积以加快部署效率,降低资源的开销.而对于镜像的优化,可以通过对dockerfile的优化来实现. 一.镜像最小化 1.选择最精简的基础镜像 选择体积最小的基础镜像可

Docker 镜像添加模块

Docker 镜像添加模块 1. 使用root用户进入一个新容器,不要用 --rm .否则退出容器的时候,容器没有了 docker run --user 0 -it --name superman testdockerfilebox/test_cpu:latest bash 2. 在容器中添加你要的功能,然后退出容器 apt install ... npm install -g n pip3 install ... 3. commit 刚才操作的容器成 image (testdockerfile

Docker 镜像加速器

Docker 镜像加速器 我们使用Docker的第一步,应该是获取一个官方的镜像,例如mysql.wordpress,基于这些基础镜像我们可以开发自己个性化的应用.我们可以使用Docker命令行工具来下载官方镜像.但是因为网络原因,我们下载一个300M的镜像需要很长的时间,甚至下载失败.因为这个原因,阿里云容器Hub服务提供了官方的镜像站点加速官方镜像的下载速度. 使用镜像加速器 在不同的系统下面,配置加速器的方式有一些不同,所以我们介绍主要的几个操作系统的配置方法.关于加速器的地址,你只需要登