Назад к гайдам

Docker и Docker Compose: Контейнеризация приложений

DevOps Средний DevOps Docker Linux
5 мин чтения 28 просмотров

# 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 - незаменимые инструменты для современной разработки. Они упрощают развертывание и обеспечивают консистентность окружений.