puppet docker

puppet - ¿Cómo agregar elementos a.dockerignore?



(6)

El formato de .dockerignore debe ser igual al de .gitignore . Vea un archivo de muestra y la documentation la ventana acoplable.

El archivo debe ser una lista de patrones de exclusión (relativos a la ruta del archivo .dockerignore ) separados por una nueva línea.

Así que deberías probar el siguiente .dockerignore :

modules/*

El / al principio puede haber sido el error, ya que solo será válido para el directorio raíz del archivo (pero no para los subdirectorios, por lo que quizás la versión recursiva sin el / haga un mejor trabajo).

No puedo encontrar muchos ejemplos de cómo debería ser un archivo .dockerignore.

El uso de Puppet para instalar algunos paquetes en un contenedor de la ventana acoplable hace que la imagen explote de 600 MB a 3 GB. Estoy tratando de usar un archivo .dockerignore para mantener el tamaño a un mínimo

$ 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

Si ejecuto docker images --tree puede ver que la imagen crece instantáneamente en varios 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

Creo que la razón por la que la imagen crece tan grande es porque librarian-puppet clona un módulo títere a /modules que rompe el caché de compilación

He intentado los siguientes archivos .dockerignore sin suerte.

$ cat .dockerignore /modules /modules/ /modules/*

¿Es esta la sintaxis correcta para un archivo .dockerignore ?
¿Hay otras formas de evitar que estos contenedores crezcan tan grandes?

Información Adicional:

http://kartar.net/2013/12/building-puppet-apps-inside-docker/
http://danielmartins.ninja/posts/a-week-of-docker.html


La optimización del tamaño de la imagen del contenedor es el objetivo principal detrás de .dockerignore, ya que cumple un propósito similar al de su .gitignore, ya que reduce la latencia y el tiempo de respuesta al tiempo que proporciona servicios. Es cierto para la automatización de la implementación, como Puppet, SaltStack o Ansible. La marca de tiempo definida para la implementación de la ejecución del servicio puede fallar debido al mayor tamaño de la imagen y el bajo ancho de banda de la red. Así que .dockerignore ayuda a que el tamaño de la imagen sea lo más pequeño posible.

Podría colocarlo en el directorio de contexto de compilación que especificamos al final de un comando de compilación de la ventana acoplable. El archivo sigue el patrón glob de los archivos y directorios para excluirlos de la imagen de compilación final.

Supongamos que tengo un directorio. img / en mi contexto de compilación, y quiero excluirlo mientras construyo la imagen, simplemente agregaré la siguiente línea en el archivo .dockerignore,

.img

Y, si quiero excluir todos los archivos comienza con. entonces simplemente, agregue la línea,

.*

(Nota: No confunda el patrón global de Unix es diferente a las expresiones regulares)

Además, excluiré algunos más de mis archivos de mi contexto de compilación,

.* docs my-stack.dab docker-compose.overrride.yml test* *.md !README.md

Aquí, la línea * .md excluye todos los archivos markdown (tengo muchos archivos markdown en mi proyecto). Pero, quiero incluir README.md y ningún otro archivo de rebajas. Como nuestra última línea anterior, hemos agregado README.md con ! o exclúyalo mientras excluye todos los demás archivos de rebajas.

Por lo tanto, con esto podemos reducir la sobrecarga de su imagen de construcción con la ayuda de .dockerignore y aprovechar para reducir el tamaño de la imagen.


Ninguno:

modules/*

ni

modules

no funcionaría para mí, la ventana acoplable continuó contaminando la imagen con archivos innecesarios hasta que la configuré así:

**/modules

También trabaja con:

**/modules/*.py



http://docs.docker.com/articles/dockerfile_best-practices/

Me parece que su enfoque es al revés (de acuerdo con @csanchez), y que debería estar generando su contenedor docker desde Puppet, no ejecutando Puppet en el contenedor ...

Además, debe && las líneas instalar / aplicar / limpiar juntas ... cada comando de la ventana acoplable crea una imagen incremental ... Si hay archivos temporales / de recursos que forman parte de los comandos centos yum , también debe hacer lo mismo.

FROM centos:centos6 # Add your needed files first # maybe you could use a baseimage and make this a volume mount point? Add Puppetfile / # combine multiple commands with cleanup of cache/temporary # space in the same run sequence to reduce wasted diff image space. #Work around selinux problem on cent images RUN yum install -y --enablerepo=centosplus libselinux-devel && / yum install -y wget git tar openssh-server; yum -y clean all && / librarian-puppet install && / puppet apply --modulepath=/modules -e "class { ''buildslave'': jenkins_slave => true,}" && / librarian-puppet clean

Yo sugeriría REALMENTE evitar el SELINUX en un contenedor, ya que no le da nada dentro de un contenedor. Sin mencionar que, dependiendo de lo que estés tratando de crear, hay lugares más pequeños para comenzar que centos6. Creo que ubuntu es más pequeño, debian: wheezy aun más pequeño, o incluso alpino para un pequeño punto de inicio.

Vale la pena señalar que el tamaño de su archivo, si está utilizando un sistema de archivos que admite montajes virtuales, puede reutilizar la misma imagen base para varias instancias, por lo que no crecerá más.


.dockerignore es para evitar que los archivos se agreguen al contexto de compilación inicial que se envía al demonio de la ventana acoplable cuando realiza la docker build , no crea una regla global para excluir la creación de archivos en todas las imágenes generadas por un Dockerfile.

Es importante tener en cuenta que cada instrucción RUN generará una nueva imagen, con el padre de esa imagen como la imagen generada por la declaración Dockerfile sobre ella. Intente colapsar sus instrucciones RUN en una sola para reducir el tamaño de la imagen:

RUN librarian-puppet install &&/ puppet apply --modulepath=/modules -e "class { ''buildslave'': jenkins_slave => true,}" &&/ librarian-puppet clean