Best practices for Dockerfile¶
-
Уменьшить контекст, чтобы меньше тащить в образ: добавить node_modules в .gitignore или собирать не через точку в конце'.' а указать диру где только нужные для образа исходники
-
Используем alpine или distroless, фиксируем версии образов
-
Multistage образы
- сначала билдим
-
затем подключаем только cбилденный dist (через nginx например)
-
Порядок слоев важен для эффективности кэша
если RUN npm ci ставит зависимости и перед ней добавляются файл через COPY, то так как исходники проекта меняются, то npm ci будет запускаться, чтобы этого не было поднять инстал зависимостей выше.
-
Настройка кэша в CI\CD
-
Предварительное создание образа
-
Запуск не из под root на контейнерах с пользовательскими приложениями
Examples:¶
Dockerfile - image 1.4 Gb
FROM node:16-alpine
WORKDIR /app
COPY . .
RUN npm install shelljs && npm install
EXPOSE 3000
CMD["npm", "start"]
Dockerfile - image 45 Mb