Вы можете использовать комбинацию базовых образов и многоступенчатых сборок для ускорения ваших сборок.
Базовый образ с предустановленными пакетами / зависимостями
Вещи, подобные установке python3, pip, google-chrome, awscli et c не нужно выполнять каждую сборку. Эти слои могут кэшироваться, если вы собираете на одной машине, но если у вас несколько сборочных машин или вы очищаете кеш, вы будете без необходимости перестраивать эти слои. Вы можете создать базовый образ, в котором уже есть этот материал, и использовать этот новый образ в качестве основы для своего приложения.
Многоступенчатые сборки
Вы копируете свой исходный код, а затем выполняете npm install
. Даже если package.json
не изменился, слой будет перестроен, если любой другой файл в исходном коде мог измениться.
Вы можете создать многоэтапный файл Docker, в который вы просто копируете пакет. json на первом этапе и запустить npm install
и другие подобные команды. Этот слой будет перестроен только в случае изменения пакета. json.
На втором этапе вы можете просто скопировать кэш npm с первого этапа.
FROM node:lts as dev-builder
WORKDIR /cache/
COPY package.json .
RUN npm install
RUN npm run build-dev
FROM NEW_BASE_IMAGE_WITH_CHROME_ETC_DEPENDENCIES
COPY --from=node_cache /cache/ .
COPY . .
<snip>
Определите любые другие подобные оптимизации, которые вы можете сделать.