hostprofi.ru
Подобрать хостинг
Термин·буква D

Dockerfile

краткое определение

Dockerfile — текстовый файл инструкций для сборки Docker-образа. Каждая строка (FROM, RUN, COPY, CMD и др.) создаёт слой в образе. Позволяет воспроизводимо упаковать приложение со всеми зависимостями в один переносимый образ.

Dockerfile — конфигурационный файл для сборки Docker-образа. Содержит последовательность инструкций, каждая из которых добавляет слой в итоговый образ. Образ собирается командой docker build -t myapp:1.0 .. Dockerfile обеспечивает воспроизводимость: один и тот же файл даёт одинаковый результат на любом хосте.

Основные инструкции

FROM ubuntu:22.04              # базовый образ

WORKDIR /app                   # рабочая директория

COPY requirements.txt .        # копирование файлов
RUN pip install -r requirements.txt  # выполнение команды

COPY . .                       # копирование кода

EXPOSE 8000                    # объявление порта

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

Как работает

Docker кэширует каждый слой. Если инструкция и её контекст не изменились, Docker использует кэш — это ускоряет повторные сборки. Поэтому зависимости (COPY requirements.txt + RUN pip install) должны идти до копирования кода (COPY . .): при изменении только кода зависимости не пересобираются.

Multi-stage build — сборка в несколько этапов для уменьшения итогового образа: в первом stage компилируется код, во втором — копируется только результат. Образ Go-приложения с multi-stage build: 10–20 МБ вместо 800 МБ.

История

Docker и формат Dockerfile появились в 2013 году (компания dotCloud, позже переименована в Docker Inc.). Формат Dockerfile заимствовал идеи из Chef, Puppet и shell-скриптов. OCI (Open Container Initiative) стандартизировала формат образов в 2016 году. Podman и BuildKit поддерживают Dockerfile-формат без Docker-демона.

Связь с хостингом

Dockerfile — основа CI/CD-пайплайнов. GitHub Actions, GitLab CI и Jenkins собирают образы из Dockerfile и публикуют в реестр (Docker Hub, GitHub Container Registry, Yandex Container Registry). На VPS образы разворачиваются через docker run или Docker Compose. В Kubernetes — через манифест Deployment с указанием image.

Инструкции Dockerfile

FROM — базовый образ. RUN — выполнить команду. COPY/ADD — скопировать файлы. WORKDIR — рабочая директория. EXPOSE — задокументировать порт (не открывает). ENV — переменные окружения. CMD/ENTRYPOINT — команда при запуске. ARG — аргументы сборки.

Best practices

Multi-stage build: отдельный build-контейнер + минимальный runtime-образ. COPY requirements.txt . перед COPY . . — кэш слоя зависимостей. .dockerignore — исключить node_modules, .git, *.log. Базовый образ: alpine (5 МБ) или distroless (без shell). Не запускать от root: USER appuser.

Dockerfile для типичных стеков

Node.js: FROM node:18-alpine → COPY package*.json → npm ci --production → COPY . . → CMD [""node"", ""server.js""]. Python: FROM python:3.11-slim → pip install → COPY app. Go: multi-stage FROM golang → build → FROM scratch → COPY binary. Финальный образ Go — 5–15 МБ.

Dockerfile Security Scanning

Trivy: trivy image myapp:latest — сканирование на CVE. Hadolint: линтер для Dockerfile. USER nonroot — запуск от непривилегированного пользователя. Distroless образы (Google): нет shell, минимальная поверхность атаки. COPY вместо ADD для файлов (ADD может разворачивать архивы неожиданно).

OCI и Buildah

Buildah: daemonless сборка OCI-образов без Docker daemon. Rootless сборка. Совместим с Dockerfile (buildah bud) и Shell API (buildah run). Kaniko: сборка в Kubernetes без privileged-доступа. Для CI/CD в Kubernetes: Kaniko или Buildah предпочтительнее Docker-in-Docker (DinD).

Dockerfile строит образы для запуска в Docker-контейнерах. Образы хранятся в container registry. CI/CD автоматизирует сборку. Kubernetes запускает контейнеры из образов. Nginx-образ — базовый для веб-серверов. Podman — альтернатива Docker без демона.

Другие термины