Ответ
Docker image (образ) — это неизменяемый шаблон, содержащий всё необходимое для запуска приложения: код, среду выполнения, системные библиотеки, переменные окружения и конфигурационные файлы. Образ — это основа для создания контейнеров.
Основные цели Docker image:
- Стандартизация и повторяемость: Образ гарантирует, что приложение будет запускаться идентично в любом месте (на ноутбуке разработчика, CI-сервере, продакшн-хосте), устраняя проблему "у меня работает".
- Инкапсуляция зависимостей: Все зависимости (например, конкретная версия Python, системные пакеты, pip-библиотеки) упакованы внутрь образа. Нет необходимости устанавливать что-либо на хост-систему.
- Эффективное использование ресурсов: В отличие от полноценной виртуальной машины, контейнеры, созданные из образов, используют ядро хоста, что делает их легковесными и быстрыми в запуске.
- Слоистая структура и кэширование: Образ состоит из слоев (read-only). Каждая инструкция в
Dockerfileсоздает новый слой. Это позволяет эффективно кэшировать слои и повторно использовать их между разными образами, ускоряя сборку.
Пример простого Dockerfile для Python-приложения:
# Базовый слой с Python
FROM python:3.11-slim
# Установка рабочей директории внутри контейнера
WORKDIR /app
# Копирование файла зависимостей и их установка (это отдельный кэшируемый слой)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Копирование всего остального кода приложения
COPY . .
# Команда для запуска приложения при старте контейнера
CMD ["python", "app.py"]
Работа с образами:
- Сборка:
docker build -t my-app:latest .— создает образ изDockerfile. - Просмотр:
docker images— список локальных образов. - Запуск:
docker run -p 8000:8000 my-app:latest— создает и запускает контейнер из образа. - Публикация:
docker push my-registry.com/my-app:latest— отправляет образ в реестр (Docker Hub, GitLab Registry и др.).