На главную

Контейнеры и CI/CD

Линтер Dockerfile

Проверяет Dockerfile на ошибки сборки, утечки секретов, лишние слои и сломанный кэш — прямо в браузере, файл никуда не уходит.

2

ошибок

7

предупреждений

4

слоёв

1

стадий

ENV API_TOKEN со значением попадает в docker history и виден всем, у кого есть образ.

стр. 3

Передавайте секрет в рантайме или через RUN --mount=type=secret.

DF-SECRET-ENV

apt-get install без -y повиснет на вопросе и сборка упадёт по таймауту.

стр. 4

Добавьте -y.

DF-APT-YES

Тег :latest делает сборку невоспроизводимой.

стр. 1

Укажите конкретную версию или дайджест @sha256:….

DF-LATEST

Контейнер запустится под root.

стр. 1

Добавьте USER с непривилегированным пользователем в финальную стадию.

DF-ROOT

MAINTAINER устарел с Docker 1.13.

стр. 2

Замените на LABEL org.opencontainers.image.authors="…".

DF-MAINTAINER

apt-get install без --no-install-recommends тянет десятки лишних пакетов.

стр. 4

Добавьте --no-install-recommends.

DF-APT-RECOMMENDS

Кэш apt остаётся в слое и раздувает образ.

стр. 4

В конце той же RUN: && rm -rf /var/lib/apt/lists/*

DF-APT-LISTS

COPY всего проекта стоит до установки зависимостей — любая правка кода сбрасывает кэш и переустанавливает всё заново.

стр. 5

Сначала COPY package*.json, затем установка, и только потом COPY остального.

DF-CACHE-ORDER

CMD в shell-форме запускается через /bin/sh -c — процесс не получит SIGTERM и контейнер будет убиваться по таймауту.

стр. 9

Используйте exec-форму: CMD ["исполняемый", "аргумент"].

DF-EXEC-FORM

Сборка идёт в том же слое, что и рантайм — компилятор и исходники поедут в прод-образ.

стр. 1

Разделите на стадии: FROM … AS build, затем FROM … и COPY --from=build.

DF-MULTISTAGE

Нет HEALTHCHECK — оркестратор не узнает, что процесс жив, но не отвечает.

стр. 1

HEALTHCHECK CMD curl -f http://localhost:3000/health || exit 1

DF-HEALTHCHECK

WORKDIR не задан — сборка идёт в корне файловой системы.

стр. 1

Добавьте WORKDIR /app.

DF-WORKDIR

Версии пакетов не зафиксированы — образ будет разным в разные дни.

стр. 4

Пишите пакет=версия, например curl=8.5.0-2ubuntu10.

DF-APT-PIN

npm install может обновить лок-файл прямо в сборке.

стр. 6

В образах используйте npm ci — он ставит ровно то, что в package-lock.json.

DF-NPM-CI