← Назад ко всем вопросам

Что такое Dockerfile и как по нему собирается образ

1️⃣ Как кратко ответить

Dockerfile — это текстовый файл, содержащий инструкции для автоматизации сборки Docker-образа. Он определяет, какие базовые образы использовать, какие файлы копировать, какие команды выполнять и какие порты открывать. Docker-образ создается путем последовательного выполнения инструкций из Dockerfile с помощью команды docker build.

2️⃣ Подробное объяснение темы

Dockerfile — это сценарий, который описывает, как создать Docker-образ. Он содержит последовательность инструкций, которые Docker Engine выполняет для сборки образа. Dockerfile позволяет автоматизировать процесс создания образов, что делает его воспроизводимым и управляемым.

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

  1. FROM: Указывает базовый образ, с которого начинается сборка. Это обязательная инструкция. Например, FROM ubuntu:20.04 означает, что сборка начинается с образа Ubuntu версии 20.04.

  2. COPY или ADD: Копирует файлы и директории из контекста сборки на образ. Например, COPY . /app копирует все файлы из текущей директории в директорию /app внутри образа.

  3. RUN: Выполняет команды в контейнере на этапе сборки. Например, RUN apt-get update && apt-get install -y python3 обновляет пакетный менеджер и устанавливает Python 3.

  4. CMD: Задает команду, которая будет выполнена при запуске контейнера. Например, CMD ["python3", "app.py"] запускает app.py с помощью Python 3.

  5. EXPOSE: Указывает, какие порты будут открыты для доступа извне. Например, EXPOSE 80 открывает порт 80.

  6. ENV: Устанавливает переменные окружения. Например, ENV APP_ENV=production задает переменную APP_ENV со значением production.

  7. 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"]: Указываем команду для запуска приложения при старте контейнера.

Как собирается образ

  1. Создание контекста сборки: Docker собирает все файлы и директории, указанные в контексте сборки (обычно это текущая директория).

  2. Выполнение инструкций Dockerfile: Docker Engine последовательно выполняет инструкции из Dockerfile. Каждая инструкция создает новый слой в образе.

  3. Кэширование слоев: Docker кэширует слои, чтобы ускорить последующие сборки. Если инструкция и контекст не изменились, Docker использует кэшированный слой.

  4. Создание финального образа: После выполнения всех инструкций создается финальный Docker-образ, который можно использовать для запуска контейнеров.

Dockerfile позволяет стандартизировать и автоматизировать процесс создания образов, что упрощает развертывание и масштабирование приложений в контейнеризированной среде.

Тема: Docker/Kubernetes
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки