web-dev-qa-db-fra.com

Comment ajouter tous les fichiers / répertoires sauf un répertoire caché comme .git dans Dockerfile

Une des choses que nous faisons souvent consiste à empaqueter tout le code source dans Dockerfile lorsque nous construisons une image Docker.

ADD . /app

Comment pouvons-nous éviter d'inclure le .git répertoire de manière simple?

J'ai essayé la façon Unix de gérer cela en utilisant ADD [^.]* /app/

Échantillon complet:

 docker @ boot2docker:/mnt/sda1/tmp/abc $ find. 
. 
 ./ c 
 ./. git 
 ./ Dockerfile 
 ./ good 
 ./ good/a1 
 Docker @ boot2docker:/mnt/sda1/tmp/abc $ cat Dockerfile 
 DE ubuntu 
 
 AJOUTER [^.] * /App/
docker@boot2docker:/mnt/sda1/tmp/abc$ docker build -t abc. 
 Envoi du contexte de construction au démon Docker 4,096 kB 
 Envoi du contexte de construction au démon Docker 
 Étape 0: DE ubuntu 
 ---> 04c5d3b7b065 
 Étape 1: AJOUTER [^.] */App/
 d ---> 5d67603f108b 
 Supprimer le conteneur intermédiaire 60159dee6ac8 
 Construit avec succès 5d67603f108b 
 docker @ boot2docker:/mnt/sda1/tmp/abc $ docker run -it abc 
 root @ 1b1705dd66a2:/# ls -l app 
 total 4 
 - rw-r - r-- 1 1000 membres du personnel 30 janvier 22 01:18 Dockerfile 
 - rw-r - r-- 1 racine racine 0 22 janvier 01:03 a1 
 - rw-r - r-- 1 racine racine 0 22 janvier 01 00:10 c 
 

Et deuxièmement, il perdra la structure de répertoires, puisque good\a1 se change en a1.

Le code source associé dans Docker est https://github.com/docker/docker/blob/eaecf741f0e00a09782d5bcf16159cc8ea258b67/builder/internals.go#L115

47
Larry Cai

Vous pouvez exclure des fichiers indésirables à l’aide du fichier . Dockerignore

63
Mykola Gurov

Comment pouvons-nous éviter d'inclure le répertoire .git de manière simple?

Il suffit de créer un fichier nommé .dockerignore dans le dossier du contexte racine avec les lignes suivantes

**/.git
**/node_modules

Avec de telles lignes, Docker exclura les répertoires .git et node_modules de n’importe quel sous-répertoire, y compris root. Docker prend également en charge une chaîne générique spéciale ** qui correspond à n’importe quel nombre de répertoires (y compris zéro).

Et deuxièmement, il perdra la structure de répertoires, car bon\a1 sera changé en a1

Avec .dockerignore ce ne sera pas

$ docker run -it --rm sample tree /opt/
/opt/
├── Dockerfile
├── c
│   └── no_sslv2.patch
└── good
    └── a1
        └── README

3 directories, 3 files

Référence à la documentation officielle: . Dockerignore

21
ALex_hha

Ajoutez le fichier . Dockerignore dans votre répertoire racine (syntaxe similaire au fichier . Gitignore)

0
user6830821