Какие основные файлы конфигурации используются в Docker и Docker Compose

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

Ответ

В экосистеме Docker используются два основных конфигурационных файла для разных целей: Dockerfile для сборки образов и docker-compose.yml для управления многоконтейнерными приложениями.

1. Dockerfile

Это текстовый файл, содержащий набор инструкций для автоматической сборки образа Docker. Он описывает среду внутри одного контейнера: базовую ОС, зависимости, исходный код, переменные окружения и команду для запуска.

Ключевая команда: docker build

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

# 1. Устанавливаем базовый образ
FROM python:3.9-slim

# 2. Задаем рабочую директорию внутри контейнера
WORKDIR /app

# 3. Копируем файл зависимостей и устанавливаем их
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

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

# 5. Команда, которая будет выполняться при запуске контейнера
CMD ["python", "./main.py"]

2. docker-compose.yml

Это YAML-файл для определения и запуска многоконтейнерных приложений. Он описывает сервисы (контейнеры), сети для их взаимодействия, тома для хранения данных и другие параметры их совместной работы.

Ключевая команда: docker-compose up

Пример docker-compose.yml для веб-приложения и базы данных:

# Версия синтаксиса
version: '3.8'

# Определение сервисов (контейнеров)
services:
  # Сервис веб-приложения
  web:
    # Собрать образ из Dockerfile в текущей директории
    build: .
    # Пробросить порт 8000 хоста на порт 80 контейнера
    ports:
      - "8000:80"

  # Сервис базы данных
  db:
    # Использовать готовый образ PostgreSQL
    image: postgres:13
    # Переменные окружения для настройки базы данных
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

Сводка

Критерий Dockerfile docker-compose.yml
Назначение Сборка одного образа Управление несколькими контейнерами (сервисами)
Синтаксис Набор инструкций YAML
Команда docker build docker-compose up