← Назад к вопросам

Для чего используется Docker?

1.0 Junior🔥 231 комментариев
#DevOps и инфраструктура

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Для чего используется Docker

Определение и назначение

Docker — это платформа для контейнеризации (упаковки) приложений вместе со всеми зависимостями в изолированную среду, которая работает одинаково на любой машине (dev, staging, production).

Основная идея: "Если это работает в контейнере на моей машине, оно будет работать везде."

Главные цели использования Docker

1. Изолирование окружения

Проблема без Docker:

  • На машине разработчика: Node.js 18, PostgreSQL 13
  • На staging сервере: Node.js 16, PostgreSQL 12
  • Код работает на одной машине, ломается на другой ("на моей машине работает!")
# Без Docker — разные версии везде
dev:         Node.js 18.2, PostgreSQL 13, Redis 6.2
staging:     Node.js 16.1, PostgreSQL 12, Redis 5.0
production:  Node.js 20.1, PostgreSQL 14, Redis 7.0
# Хаос!

С Docker:

FROM node:20-alpine
FROM postgres:16

Все разработчики и серверы используют одинаковые версии.

2. Консистентность между средами

# docker-compose.yml определяет точное окружение
version: '3.8'
services:
  app:
    image: node:20-alpine
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_PASSWORD: password123
  cache:
    image: redis:7-alpine

Результат: одна команда docker-compose up и все сервисы запущены с правильными версиями.

3. Упрощение deployment

Без Docker:

# На production сервере
ssh user@server
cd /app
git pull
npm install
npm run build
pm2 restart app

# Нужно вручную:
# 1. Установить Node.js
# 2. Установить PostgreSQL
# 3. Настроить окружение
# 4. Управлять процессами
# = Много ошибок, много ручной работы

С Docker:

# На production сервере
docker pull myregistry/myapp:latest
docker-compose up -d

# Всё уже включено в образ, ничего не нужно устанавливать

4. Масштабирование

Нужно запустить 3 копии приложения для load balancing:

services:
  app:
    image: myapp:latest
    replicas: 3  # Kubernetes
    # или
    # docker run -d myapp:latest  (запуск 3 раза)

Каждая копия в отдельном контейнере, они не конфликтуют друг с другом.

5. Упрощение локальной разработки

Без Docker, новому разработчику нужно:

  1. Установить Node.js
  2. Установить PostgreSQL
  3. Установить Redis
  4. Установить RabbitMQ
  5. Настроить все сервисы
  6. Создать базы данных
  7. = Несколько часов настройки

С Docker:

git clone repo
docker-compose up -d
# ✅ Готово! Всё запущено за 2 минуты

Практические примеры использования

Пример 1: Node.js приложение

# Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
# Сборка образа
docker build -t myapp:1.0 .

# Запуск контейнера
docker run -p 3000:3000 myapp:1.0

Результат: приложение работает в изолированной среде.

Пример 2: Полный stack с docker-compose

version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://user:pass@db:5432/mydb
      REDIS_URL: redis://cache:6379
    depends_on:
      - db
      - cache

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_PASSWORD: password123
      POSTGRES_DB: mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data

  cache:
    image: redis:7-alpine
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:
docker-compose up
# API: http://localhost:3000
# PostgreSQL: db:5432
# Redis: cache:6379

Пример 3: CI/CD пайплайн

# .github/workflows/deploy.yml
name: Deploy
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Build Docker image
        run: docker build -t myapp:${{ github.sha }} .
      
      - name: Push to registry
        run: docker push myapp:${{ github.sha }}
      
      - name: Deploy to production
        run: |
          ssh deploy@server \
            docker pull myapp:${{ github.sha }} && \
            docker run -d -p 3000:3000 myapp:${{ github.sha }}

Результат: автоматический deploy при каждом push в main.

Основные команды Docker

# Сборка образа
docker build -t myapp:1.0 .

# Запуск контейнера
docker run -p 3000:3000 myapp:1.0
docker run -d -p 3000:3000 myapp:1.0  # В фоне

# Просмотр контейнеров
docker ps         # Запущенные
docker ps -a      # Все

# Остановка
docker stop container_id
docker rm container_id

# Логи
docker logs container_id
docker logs -f container_id  # Follow (стрим)

# Вход в контейнер
docker exec -it container_id bash

Docker vs виртуальная машина

DockerVM
Размер10-100 MB1-5 GB
СкоростьСекМинуты
РесурсыМинимумМного
ИзоляцияНа уровне ОСНа уровне гипервизора
ИспользованиеПриложенияПолная ОС

Docker намного легче — это не полная виртуальная машина, а контейнер на уровне ОС.

Когда использовать Docker

Используй Docker когда:

  • Разрабатываешь backend приложение
  • Нужны несколько сервисов (БД, кэш, очередь)
  • Работаешь в команде
  • Деплоишь на production
  • Используешь Kubernetes
  • Хочешь CI/CD автоматизацию

Docker может быть избыточным:

  • Одноразовые скрипты
  • Простые CLI утилиты
  • Serverless функции (AWS Lambda, Google Cloud Functions)
  • Быстрые прототипы

Выводы

Docker решает три основные проблемы:

  1. Консистентность — одно и то же окружение везде
  2. Простота deployment — одна команда вместо многих
  3. Масштабируемость — легко запустить несколько копий

В 2024-2025 годах Docker стал индустриальным стандартом для разработки и deployment приложений. Без Docker сложно найти серьёзный backend проект.

Для чего используется Docker? | PrepBro