Как скопировать несколько файлов в один слой с помощью Dockerfile?
следующее Dockerfile
четыре COPY
слоев:
COPY README.md ./
COPY package.json ./
COPY gulpfile.js ./
COPY __BUILD_NUMBER ./
Как скопировать эти файлы, а не через один слой? Было опробовано следующее:
COPY [
"__BUILD_NUMBER ./",
"README.md ./",
"gulpfile ./",
"another_file ./",
]
3 ответа:
COPY README.md package.json gulpfile.js __BUILD_NUMBER ./
или
COPY ["__BUILD_NUMBER", "README.md", "gulpfile", "another_file", "./"]
вы также можете использовать подстановочные знаки в спецификации файле. см. документы для немного более подробной информации.
каталоги-это специальные! если вы пишите
COPY dir1 dir2 ./
что на самом деле работает как
COPY dir1/* dir2/* ./
если вы хотите скопировать несколько каталогов (а не их содержимое) в целевой каталог в одной команде, вам нужно настроить контекст сборки, чтобы ваш исходные каталоги находятся под общим родителем, а затем
COPY
этого родителя.
COPY <all> <the> <things> <last-arg-is-destination>
но вот важный отрывок из документов:
Если у вас есть несколько шагов Dockerfile, которые используют разные файлы из ваш контекст, скопируйте их по отдельности, а не все сразу. Этот гарантирует, что кэш сборки каждого шага будет только недействительным (принудительно шаг для повторного запуска) если специально необходимые файлы изменение.
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#add-or-copy
простой
COPY README.md package.json gulpfile.js __BUILD_NUMBER ./
С doc
если указано несколько ресурсов, либо напрямую, либо из-за по шаблону, то должен быть каталог, и он должен конец с косой чертой /.