我找不到.dockerignore文件的外观的许多示例。
使用puppet在Docker容器上安装一些软件包会导致镜像从600MB爆炸到3GB。我正在尝试使用.dockerignore
文件将大小保持为最小值
$ cat Dockerfile
FROM centos:centos6
#Work around selinux problem on cent images
RUN yum install -y --enablerepo=centosplus libselinux-devel
RUN yum install -y wget git tar openssh-server; yum -y clean all
Add Puppetfile /
RUN librarian-puppet install
RUN puppet apply --modulepath=/modules -e "class { 'buildslave': jenkins_slave => true,}"
RUN librarian-puppet clean
如果我运行
docker images --tree
,我可以看到图像立即增长了几GB$ docker images --tree
├─e289570b5555 Virtual Size: 387.7 MB
│ └─a7646acf90d0 Virtual Size: 442.5 MB
│ └─d7bc6e1fbe43 Virtual Size: 442.5 MB
│ └─772e6b204e3b Virtual Size: 627.5 MB
│ └─599a7b5226f4 Virtual Size: 627.5 MB
│ └─9fbffccda8bd Virtual Size: 2.943 GB
│ └─ee46af013f6b Virtual Size: 2.943 GB
│ └─3e4fe065fd07 Virtual Size: 2.943 GB
│ └─de9ec3eba39e Virtual Size: 2.943 GB
│ └─31cba2716a12 Virtual Size: 2.943 GB
│ └─52cbc742d3c4 Virtual Size: 2.943 GB
│ └─9a857380258c Virtual Size: 2.943 GB
│ └─c6d87a343807 Virtual Size: 2.964 GB
│ └─f664124e0080 Virtual Size: 2.964 GB
│ └─e6cc212038b9 Virtual Size: 2.964 GB Tags: foo/jenkins-centos6-buildslave:latest
我相信图像变大的原因是因为
librarian-puppet
将 puppet 模块克隆到/modules
中,这破坏了构建缓存我尝试了以下
.dockerignore
文件,但没有成功。$ cat .dockerignore
/modules
/modules/
/modules/*
这是
.dockerignore
文件的正确语法吗?还有其他方法可以防止这些容器变大吗?
附加信息:
http://kartar.net/2013/12/building-puppet-apps-inside-docker/
http://danielmartins.ninja/posts/a-week-of-docker.html
最佳答案
.dockerignore
是为了防止将文件添加到执行docker build
时发送到docker守护程序的初始构建上下文中,它不会创建全局规则以排除在Dockerfile生成的所有镜像中创建文件。
重要的是要注意,每个RUN
语句将生成一个新镜像,该镜像的父级是其上方Dockerfile语句生成的镜像。尝试将RUN
语句折叠为一个语句以减小图像大小:
RUN librarian-puppet install &&\
puppet apply --modulepath=/modules -e "class { 'buildslave': jenkins_slave => true,}" &&\
librarian-puppet clean
关于puppet - 如何将项目添加到.dockerignore?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25490911/