.Dockerignore ne fonctionne pas? Il est écrit différemment de .gitignore!

Cet article

.dockerignore et .gitignore ont des noms similaires et des styles d'écriture similaires, j'ai donc pensé que je devrais les écrire de la même manière, mais ils étaient différents. Nous examinerons les différences dans cet article.

Public cible

Les personnes qui ont écrit .gitignore mais qui n'ont pas beaucoup écrit .dockerignore

point

Les spécifications de .gitignore se trouvent dans la Page officielle de gitignore. En japonais, [Explication détaillée des spécifications .gitignore] de Qiita (https://qiita.com/anqooqie/items/110957797b3d5280c44f) est facile à comprendre.

Les spécifications de .dockerignore sont décrites dans docker build #dockerignore sur la page officielle.

Il existe trois règles principales.

--La règle Go language filepath.Match est utilisée pour la correspondance de modèles.

  • Prend en charge les chaînes de caractères génériques spéciales «**». Cela correspond à plusieurs répertoires (y compris zéro). --Si vous commencez à écrire le début d'une ligne avec un point d'exclamation !, Cela spécifiera une exception à l'exclusion.

Qu'est-ce que .dockerignore

Avant d'expliquer la différence entre .dockerignore et .gitignore, parlons du transfert de fichiers et du rôle de .dockerignore lors de la construction de docker.

Transfert de fichiers pendant la construction du docker

Lors de la création d'un Dockerfile, docker résume le contexte de construction et ci-dessous avec tar. Il s'agit de transférer le répertoire cible vers le démon docker. Ce tar contient également des fichiers qui ne sont pas COPY ou ADD. Il contient tous les fichiers sous le contexte de construction.

build_context.png

.dockerignore

Les fichiers qui ne sont pas nécessaires pour les builds de docker (que vous ne voulez pas mettre dans tar) doivent être répertoriés dans .dockerignore. La création d'un .dockerignore a pour effet de raccourcir le temps de construction, d'optimiser la taille de l'image du docker et d'éviter les fuites involontaires d'informations confidentielles (mots de passe, etc.).

Créer une racine de contexte

La racine du contexte de construction est le chemin utilisé par la construction du docker. (Pas l'emplacement du Dockerfile)

docker build -f path/to/Dockerfile myprj
                                   -----
↑ Le chemin spécifié dans l'argument de docker build est la racine du contexte de build ↑

Dans l'exemple ci-dessus, myprj est la racine du contexte de construction. Dans l'exemple ci-dessus, .dockerignore est placé dans le répertoire myprj.

Différence entre .dockerignore et .gitignore

Maintenant le sujet principal. .dockerignore et .gitignore sont similaires dans leur but et leur écriture, mais pas dans la même implémentation. Les spécifications sont également différentes.

Comment spécifier le chemin

.gitignore

Dans .gitignore, le nom du fichier ou du répertoire écrit est ignoré dans toute hiérarchie sous le fichier .gitignore.

Par exemple

.gitignore


target

Si vous écrivez

target
src/target
path/a/b/target

Etc. sont ignorés.

.dockerignore

Dans .dockerignore, tous les chemins sont relatifs au chemin où se trouve .dockerignore. [^ dockerignore_path]

[^ dockerignore_path]: Vous pouvez également préfixer le chemin avec / comme avec .gitignore.

Par exemple

.dockerignore


target

Si vous écrivez

target

Seulement ignoré,

src/target
path/a/b/target

N'est pas ignoré.

Si vous souhaitez cibler une hiérarchie comme .gitignore

dockerignore


**/target

Il est décrit comme.

Ignorer le fichier dans le sous-répertoire

.gitignore

Pour .gitignore, vous pouvez également placer .gitignore dans un sous-répertoire. Dans ce cas, la règle la plus proche du fichier cible a la priorité.

gitignore_directory.png

.dockerignore

.dockerignore charge uniquement .dockerignore dans la racine du contexte de construction. Le fichier .dcokerignore situé dans le sous-répertoire ne sera pas lu.

dockerignore_directory_2.png

Soyez prudent lorsque le répertoire Dockerfile et le contexte de construction sont différents. Au lieu de placer le .gitignore au même emplacement que le Dockerfile, placez le .dockerignore dans le contexte de construction.

Épilogue

Peut-être qu'il y a un peu plus de différence, mais jusqu'à présent, j'ai trouvé cette grande différence. Ayez une vie de docker confortable.

environnement

Lien matériel de référence

Recommended Posts

.Dockerignore ne fonctionne pas? Il est écrit différemment de .gitignore!
Le code écrit en Java-TeraPad à partir du débutant ne fonctionne pas en raison d'une erreur
La comparaison Java Integer (==) ne fonctionne pas correctement
le changement de largeur de tabulation d'éclipse ne fonctionne pas
La séquence d'échappement (\) ne fonctionne-t-elle pas? (pour Mac)
Lorsque @Transactional of Spring Boot ne fonctionne pas
@BeforeStep ne fonctionne pas avec le Tasklet Spring-batch