Что такое Dockerfile и как по нему собирается образ
1️⃣ Как кратко ответить
Dockerfile — это текстовый файл, содержащий инструкции для автоматизации сборки Docker-образа. Он определяет, какие базовые образы использовать, какие файлы копировать, какие команды выполнять и какие порты открывать. Docker-образ создается путем последовательного выполнения инструкций из Dockerfile с помощью команды docker build.
2️⃣ Подробное объяснение темы
Dockerfile — это сценарий, который описывает, как создать Docker-образ. Он содержит последовательность инструкций, которые Docker Engine выполняет для сборки образа. Dockerfile позволяет автоматизировать процесс создания образов, что делает его воспроизводимым и управляемым.
Основные инструкции Dockerfile
-
FROM: Указывает базовый образ, с которого начинается сборка. Это обязательная инструкция. Например,
FROM ubuntu:20.04означает, что сборка начинается с образа Ubuntu версии 20.04. -
COPY или ADD: Копирует файлы и директории из контекста сборки на образ. Например,
COPY . /appкопирует все файлы из текущей директории в директорию/appвнутри образа. -
RUN: Выполняет команды в контейнере на этапе сборки. Например,
RUN apt-get update && apt-get install -y python3обновляет пакетный менеджер и устанавливает Python 3. -
CMD: Задает команду, которая будет выполнена при запуске контейнера. Например,
CMD ["python3", "app.py"]запускаетapp.pyс помощью Python 3. -
EXPOSE: Указывает, какие порты будут открыты для доступа извне. Например,
EXPOSE 80открывает порт 80. -
ENV: Устанавливает переменные окружения. Например,
ENV APP_ENV=productionзадает переменнуюAPP_ENVсо значениемproduction. -
ENTRYPOINT: Определяет команду, которая будет выполняться при запуске контейнера, и позволяет передавать дополнительные аргументы. Например,
ENTRYPOINT ["python3", "app.py"].
Пример Dockerfile
# Используем базовый образ Python 3.8
FROM python:3.8-slim
# Устанавливаем рабочую директорию
WORKDIR /app
# Копируем файлы приложения в контейнер
COPY . /app
# Устанавливаем зависимости
RUN pip install --no-cache-dir -r requirements.txt
# Открываем порт 5000
EXPOSE 5000
# Определяем команду для запуска приложения
CMD ["python", "app.py"]
Пояснение к примеру
FROM python:3.8-slim: Начинаем с легковесного образа Python 3.8.WORKDIR /app: Устанавливаем рабочую директорию внутри контейнера, куда будут копироваться файлы.COPY . /app: Копируем все файлы из текущей директории на хосте в директорию/appвнутри контейнера.RUN pip install --no-cache-dir -r requirements.txt: Устанавливаем зависимости, указанные вrequirements.txt, без использования кэша для уменьшения размера образа.EXPOSE 5000: Открываем порт 5000 для доступа к приложению.CMD ["python", "app.py"]: Указываем команду для запуска приложения при старте контейнера.
Как собирается образ
-
Создание контекста сборки: Docker собирает все файлы и директории, указанные в контексте сборки (обычно это текущая директория).
-
Выполнение инструкций Dockerfile: Docker Engine последовательно выполняет инструкции из Dockerfile. Каждая инструкция создает новый слой в образе.
-
Кэширование слоев: Docker кэширует слои, чтобы ускорить последующие сборки. Если инструкция и контекст не изменились, Docker использует кэшированный слой.
-
Создание финального образа: После выполнения всех инструкций создается финальный Docker-образ, который можно использовать для запуска контейнеров.
Dockerfile позволяет стандартизировать и автоматизировать процесс создания образов, что упрощает развертывание и масштабирование приложений в контейнеризированной среде.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться