Ответ
Dockerfile и Docker Compose — это взаимодополняющие инструменты, которые решают задачи на разных этапах работы с контейнерами.
Dockerfile — это текстовый скрипт с инструкциями для сборки одного Docker-образа. Он определяет, что находится внутри контейнера.
Docker Compose — это инструмент для определения и запуска мультиконтейнерных приложений. Файл docker-compose.yml описывает, как несколько контейнеров взаимодействуют друг с другом.
Пример Dockerfile (создает образ веб-приложения):
# Шаг 1: Базовый образ
FROM python:3.9-slim
# Шаг 2: Установка зависимостей
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Шаг 3: Копирование кода приложения
COPY . .
# Шаг 4: Определение точки входа
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"]
Пример docker-compose.yml (оркестрирует приложение с базой данных и кэшем):
version: '3.8'
services:
web:
build: . # Использует Dockerfile из текущей директории
ports:
- "8000:8000"
depends_on:
- db
- redis
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
- REDIS_URL=redis://redis:6379
db:
image: postgres:14
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: pass
POSTGRES_USER: user
POSTGRES_DB: mydb
redis:
image: redis:7-alpine
volumes:
postgres_data:
Итог:
docker build -f Dockerfile .создает образ.docker-compose upзапускает целое приложение из нескольких связанных контейнеров (web, db, redis), создавая при необходимости общие сети и тома. Это идеально для локальной разработки и тестирования сложных стэков.