Docker и Docker Compose: Контейнеризация приложений
# Docker и Docker Compose: Контейнеризация приложений
## Введение
Docker позволяет упаковать приложение со всеми зависимостями в контейнер, что обеспечивает консистентность между окружениями.
## Основы Docker
### Dockerfile
Создайте Dockerfile для вашего приложения:
```dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
```
### Сборка и запуск
```bash
# Сборка образа
docker build -t myapp .
# Запуск контейнера
docker run -p 8000:8000 myapp
```
## Docker Compose
Docker Compose упрощает управление multi-container приложениями:
```yaml
version: '3.8'
services:
db:
image: postgres:15
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- db
volumes:
postgres_data:
```
## Лучшие практики
1. Используйте .dockerignore для исключения файлов
2. Кэшируйте слои правильно (менее изменяемые команды вверху)
3. Используйте multi-stage builds для уменьшения размера
4. Не запускайте контейнеры от root
5. Используйте health checks
## Оптимизация
Multi-stage build для уменьшения размера:
```dockerfile
# Stage 1: Build
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Stage 2: Production
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
```
## Заключение
Docker и Docker Compose - незаменимые инструменты для современной разработки. Они упрощают развертывание и обеспечивают консистентность окружений.