Comment ajoutez-vous des éléments à .dockerignore?
Je ne suis pas en mesure de trouver de nombreux exemples de ce qu'un .dockerignore fichier devrait ressembler.
À l'aide de marionnettes pour installer quelques paquets sur un panneau contenant les causes de l'image à exploser à partir de 600 MO à 3 go. Je suis en train d'utiliser un .dockerignore
fichier pour garder la taille d'un minimum
$ 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 je lance docker images --tree
je peux voir que l'image instantlly pousse par plusieurs GO
$ 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
Je crois que la raison que l'image devient tellement importante, c'est parce que librarian-puppet
clones une marionnette module de /modules
qui casse la compilation cache
J'ai essayé les .dockerignore
fichiers avec pas de chance.
$ cat .dockerignore
/modules
/modules/
/modules/*
Est-ce la syntaxe correcte pour une .dockerignore
fichier?
Existe-il d'autres moyens de prévenir ces conteneurs de croissance si grand?
Informations supplémentaires:
http://kartar.net/2013/12/building-puppet-apps-inside-docker/
http://danielmartins.ninja/posts/a-week-of-docker.html
source d'informationauteur spuder
Vous devez vous connecter pour publier un commentaire.
.dockerignore
est que les fichiers ne soient ajoutés à la construction initiale du contexte qui est envoyé à l'docker démon lorsque vous nedocker build
il ne crée pas de règle globale pour exclure des fichiers en cours de création dans toutes les images générées par un Dockerfile.Il est important de noter que chaque
RUN
déclaration de générer une nouvelle image, avec le parent de l'image l'image générée par le Dockerfile déclaration ci-dessus. Essayer de s'effondrer votreRUN
consolidés en un seul afin de réduire la taille de l'image:Le format de la
.dockerignore
doit être égal à celui de.gitignore
. Voir un exemple de fichier et le docker la documentation.Le fichier doit être une liste de motifs d'exclusion (par rapport à la trajectoire de la
.dockerignore
fichier) séparés par un saut de ligne.Ainsi, vous devriez essayer le suivant
.dockerignore
:La
/
au début peut-être été l'erreur, elle ne sera valable que pour le répertoire racine du fichier (mais pas pour les sous-répertoires, alors peut-être une version récursive sans/
feront un meilleur travail à la place).Une autre manière de faire, la création d'une image plus petite, est à exécuter le bibliothécaire de la marionnette dans l'hôtepas dans le Panneau, de sorte que vous ne finissent pas avec le bibliothécaire, le rubis, pierres précieuses,... installé dans l'image.
J'ai fini avec un 622MB image pour jenkins esclave à l'aide de Marionnetteset 480 MO image sans la Marionnette.
Ni:
ni
ne serait pas travailler pour moi, docker gardé de polluer l'image avec les fichiers inutiles jusqu'à ce que je l'ai mis comme ceci:
fonctionne également avec:
http://docs.docker.com/articles/dockerfile_best-practices/
Il me semble que votre approche est à l'envers (d'accord avec @csanchez), et que vous devez être de la génération de votre conteneur docker de marionnettes, ne fonctionne pas de la marionnette dans le conteneur...
Aussi, vous devriez
&&
l'installation/appliquer/propre ensemble de lignes de... chaque panneau de commande crée une image incrémentielle... Si il y a temporaire/fichiers de ressources qui font partie de la centosyum
commandes, vous devez également faire la même chose.J'avais VRAIMENT suggérons d'éviter de SELINUX dans un conteneur, il ne vous donne pas rien à l'intérieur d'un conteneur. Pour ne pas mentionner, en fonction de ce que vous essayez de créer, il y a des petits endroits pour commencer à partir de centos6. Je crois qu'ubuntu est plus petit, debian:wheezy encore plus petit, ou même alpin pour les petits point de départ.
Il est intéressant de noter que la taille de votre fichier, si vous utilisez un système de fichiers virtuel qui prend en charge les supports, pouvez réutiliser la même image de base pour plusieurs instances, afin de ne pas augmenté plus
L'optimisation de conteneur de la taille de l'image est l'objectif principal derrière la .dockerignore comme il répondre à un objectif similaire à votre .gitignorecar elle réduit le temps de latence et le temps de réponse tout en fournissant des services. C'est vrai pour le déploiement d'automatisation tels que des Marionnettes, SaltStack ou Ansible. Timestamp défini pour l'exécution du service de déploiement peut être échoué en raison d'une plus grande taille de l'image et de la faible bande passante du réseau. .dockerignore contribue à faire de la taille de l'image aussi petite que possible.
Vous pourriez le placer dans le construire contexte répertoire qui nous préciser à la fin de docker commande de construction. Le fichier suit glob modèle pour les fichiers et les répertoires à exclure ceux de la version finale de l'image.
Supposons que j'ai un répertoire .img/ dans mon construire contexte, et je tiens à exclure lors de la création de l'image, je vais simplement ajouter la ligne suivante dans .dockerignore fichier,
Et, si je veux exclure tous les fichiers commence . alors tout simplement, ajoutez la ligne,
(Note: Ne pas confondre les Unix glob modèle est différent de celui des expressions Régulières)
En outre, je vais exclure peu plus de mes fichiers de mon build contexte,
Ici, *.md ligne exclut tous les fichiers markdown(j'ai de nombreux fichiers markdown dans mon projet). Mais, je veux inclure README.md et pas d'autres fichiers markdown. Comme notre dernière ligne ci-dessus, nous avons ajouté README.md avec ! ou de l'exclure, tout en excluant tous les autres fichiers markdown.
Donc, avec cela, nous pouvons réduire les frais généraux de votre construction de l'image avec l'aide de .dockerignore et l'effet de levier pour faire une image de plus petite taille.