Опишите базовый процесс контейнеризации и запуска приложения в Docker

«Опишите базовый процесс контейнеризации и запуска приложения в Docker» — вопрос из категории Devops, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Развертывание приложения с помощью Docker — это процесс его "упаковки" в изолированный контейнер, который можно запустить на любой машине с установленным Docker. Процесс включает следующие основные шаги.

Шаг 1: Создание Dockerfile

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

Пример Dockerfile для Python-приложения:

# Используем официальный базовый образ Python
FROM python:3.9-slim

# Устанавливаем рабочую директорию внутри контейнера
WORKDIR /app

# Копируем файл зависимостей и устанавливаем их
# Этот шаг выполняется до копирования кода для эффективного кеширования
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Копируем остальной код приложения
COPY . .

# Указываем порт, который будет слушать приложение
EXPOSE 8000

# Команда для запуска приложения при старте контейнера
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "my_app.wsgi:application"]

Шаг 2: Сборка Docker-образа

Находясь в директории с Dockerfile, выполните команду сборки:

# -t (tag) задает имя и тег образа в формате <имя>:<тег>
# . указывает, что контекст сборки - текущая директория
docker build -t my-python-app:latest .

Шаг 3: Запуск контейнера

После успешной сборки образа из него можно запустить контейнер:

# -d (detach): запустить контейнер в фоновом режиме
# -p (publish): пробросить порт 8000 хоста на порт 8000 контейнера
# --name: задать имя контейнеру для удобства управления
docker run -d -p 8000:8000 --name my-running-app my-python-app:latest

Теперь ваше приложение доступно по адресу http://localhost:8000.

Основные команды для управления

  • docker ps: Показать запущенные контейнеры.
  • docker logs my-running-app: Посмотреть логи контейнера.
  • docker stop my-running-app: Остановить контейнер.
  • docker rm my-running-app: Удалить остановленный контейнер.

Для управления сложными приложениями, состоящими из нескольких сервисов (например, веб-сервер + база данных), используется Docker Compose.