Запуск установки composer, а затем копирование файлов проекта в проекте Docker - PullRequest
0 голосов
/ 30 сентября 2018

Попытка понять этот бит Dockerfile, который я нашел в проекте PHP.

COPY composer.json composer.lock ./
RUN set -eux; \
    composer install --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress --no-suggest; \
    composer clear-cache

COPY . ./

Строки 1 и 2 копируют файлы определения композитора и запускают установку композитора, пока что все хорошо.

Но сразу же может показаться, что все файлы проекта (включая вышеупомянутые файлы определений композитора) копируются в одно и то же место назначения.

Что получается, если не запустить composer install после COPY . ./ шаг?Если на хосте composer install уже запущен, не перезаписать ли это работу, проделанную в первых двух строках?

1 Ответ

0 голосов
/ 30 сентября 2018

Вы пользуетесь кешем докера, когда пытаетесь снова создать образ докера.Допустим, у вас есть это:

COPY . ./

RUN set -eux; \
    composer install --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress --no-suggest; \
    composer clear-cache

Это нормально, и конечный результат будет таким же.Разница в том, что если вы измените какой-либо файл в вашем хранилище, то все инструкции из COPY будут выполнены снова.Это означает, что если вы что-то измените (может быть, вы добавили изображение, изменили файл CSS или удалили файл php), вы переустановите все зависимости, даже если вам это не нужно.И composer install также займет свое (долгое) время.Время, которое вы можете сэкономить.

Теперь возьмем ваш пример:

COPY composer.json composer.lock ./
RUN set -eux; \
    composer install --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress --no-suggest; \
    composer clear-cache

COPY . ./

Теперь единственное время, когда вам нужно повторно установить ваши пакеты, - это когда composer.json или composer.lock меняется.Вы не запускаете его каждый раз.

...