Инструкция Dockerfile COPY позволяет на этапе сборки контейнера скопировать в него с локальной машины любые файлы. Чаще всего это файлы приложения, конфигурационные файлы, скрипты, статическое содержимое: файлы стилей, изображения.
В Dockerfile определяется рабочий каталог контейнера.
WORKDIR /usr/app
Он нужен чтобы случайно не перезаписать стандартные для контейнера файлы в корне своими.
Любая сборка осуществляется из какого-то образа, он может предполагать наличие файлов в корне.
С WORKDIR файлы приложения будут отправляться не в корень, а в указанный каталог.
Каталог создается автоматически на этапе сборки.
Копирование затем выполняется инструкцией COPY с указанием каталога на хосте и каталога в контейнере.
COPY ./ ./
При копировании можно изменять пользователя и права доступа передавая нужные значения с помощью флагов chown и chmod. Флаги опциональны.
Пример копирования файлов в контейнер при сборке со сменой владельца и прав доступа:
COPY--
chmod=644--chown
=55:mygroup files* /somedir/
На файлы, скопированные в каталог somedir, будут выставлены права 644, разрешающие владельцу читать и редактировать файлы, группе владельца и остальным пользователям только читать. Для файлов установится владелец 55 и группа mygroup.
Пример взят из блока про инструкцию COPY официальной документации Docker
Готовый Dockerfile с инструкцией COPY можно посмотреть по ссылке.
В материале приводятся настройки для сборки в 2 этапа, на первом за счет COPY копируются файлы в промежуточный контейнер. На втором за счет той же инструкции копируются файлы из промежуточного контейнера в контейнер используемый в production.
В этом случае появляется дополнительный флаг --
from=builder
При сборке контейнеров всегда рекомендуется использовать тэги
docker build -t name/project .