1 docker打包容器,commit之后变得非常大的问题

最近基于Ubuntu的镜像构建了一个容器用于在其中编译自己的一些C++项目,由于安装了很多的编译依赖,比如gcc、g++、cmake、ffmpeg、opencv等,在编译项目完成之后准备commit一个镜像发现居然有几十G。

后面才知道,docker的运行方式是以层的概念实现的,如果不是以Dockerfile的方式制作镜像,而是直接在容器里面进行命令操作,比如说apt-get install等操作,在容器中所作的所有操作都会在构建镜像的时候运行一遍,每一个操作所涉及控件都会称为镜像的一部分,这就会导致镜像变得非常大。

2 docker镜像瘦身的方法

解决上述问题最简单的方法就是只将容器内根目录下的文件打包,复制到宿主机,然后再import成镜像。

首先进入到容器中,执行以下命令对容器根目录下的文件打包

tar -cvf my_docker.tar --exclude=/proc --exclude=/sys --exclude=my_docker.tar /

然后将打包的压缩包拷贝到宿主机中

docker cp 容器ID:/my_docker.tar /docker_package/my_docker.tar

然后进入到宿主机的目录,执行以下命令生成镜像

cd /docker_package
cat my_docker.tar | sudo docker import - my_docker

执行完成之后,使用docker images命令查看,看是否新增了一个名为my_docker的镜像,并且体积相比之前有了大幅度减少。

参考