我找不到.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/

10-11 08:41