Ответ
Образ Docker — это многослойный, неизменяемый шаблон, содержащий все зависимости и конфигурацию для запуска приложения. Его структура определяется инструкциями в Dockerfile.
Основные компоненты образа:
- Базовый образ (Base Image): Первый слой, обычно минимальная ОС (например,
alpine,ubuntu) или среда выполнения (например,node:18,python:3.11-slim). - Слои зависимостей: Каждая инструкция
RUN,COPY,ADDсоздает новый слой.RUN apt-get update && apt-get install -y nginxдобавляет слой с установленными пакетами.COPY ./app /appдобавляет слой с кодом приложения.
- Метаданные и конфигурация: Инструкции, которые не создают слои файловой системы, но определяют поведение контейнера:
ENV— переменные окружения.EXPOSE— объявляет порты.WORKDIR— рабочая директория.USER— пользователь для запуска процессов.CMDилиENTRYPOINT— команда по умолчанию для запуска.
Пример Dockerfile и соответствующие слои:
FROM alpine:3.18
RUN apk add --no-cache python3 py3-pip
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . /app
WORKDIR /app
ENV NODE_ENV=production
EXPOSE 8000
CMD ["python3", "app.py"]
Ключевое преимущество слоев — кэширование. Docker кэширует каждый слой. При повторной сборке, если инструкция и ее контекст не изменились, Docker использует кэшированный слой, что значительно ускоряет процесс.