La Dockerfile
suivante contient quatre couches COPY
:
COPY README.md ./
COPY package.json ./
COPY gulpfile.js ./
COPY __BUILD_NUMBER ./
Comment copier ces fichiers en utilisant une couche à la place? Ce qui suit a été essayé:
COPY [
"__BUILD_NUMBER ./",
"README.md ./",
"gulpfile ./",
"another_file ./",
]
COPY README.md package.json gulpfile.js __BUILD_NUMBER ./
ou
COPY ["__BUILD_NUMBER", "README.md", "gulpfile", "another_file", "./"]
Vous pouvez également utiliser des caractères génériques dans la spécification du fichier source. Voir la documentation pour un peu plus de détails .
Les répertoires sont spéciaux! Si vous écrivez
COPY dir1 dir2 ./
cela fonctionne comme
COPY dir1/* dir2/* ./
Si vous souhaitez copier plusieurs répertoires (pas leur contenu) sous un répertoire de destination avec une seule commande, vous devez configurer le contexte de construction de sorte que vos répertoires source soient sous un parent commun, puis COPY
ce parent. .
COPY <all> <the> <things> <last-arg-is-destination>
Mais voici un extrait important de la documentation:
Si vous avez plusieurs étapes Dockerfile qui utilisent des fichiers différents de votre contexte, COPIEZ-les individuellement plutôt que tous en même temps. Cela garantit que le cache de construction de chaque étape n’est invalidé (ce qui oblige à réexécuter l’étape) si les fichiers spécifiquement requis changent.
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#add-or-copy
facile
COPY README.md package.json gulpfile.js __BUILD_NUMBER ./
depuis le doc
Si plusieurs ressources sont spécifiées, directement ou en raison de l'utilisation d'un caractère générique, doit être un répertoire et se terminer par une barre oblique /.
Il peut être intéressant de mentionner que vous pouvez également créer un fichier .dockerignore
pour exclure les fichiers que vous ne voulez pas copier:
https://docs.docker.com/engine/reference/builder/#dockerignore-file
Avant que la CLI de docker envoie le contexte au démon de docker, elle recherche un fichier nommé .dockerignore dans le répertoire racine du contexte. Si ce fichier existe, la CLI modifie le contexte pour exclure les fichiers et les répertoires correspondant aux modèles qu'il contient. Cela permet d'éviter d'envoyer inutilement des fichiers et des répertoires volumineux ou sensibles au démon et de les ajouter éventuellement aux images à l'aide de l'option ADD ou COPY.