← Назад в «Блог»
41
Обновлено: 28 января 2025

Что такое Docker и как с ним работать

Часть 1: Docker — основы

Что такое Docker?

Docker — это платформа для контейнеризации приложений. Если объяснять простыми словами, Docker позволяет «упаковать» приложение со всеми его зависимостями в стандартизированный блок (контейнер), который будет работать одинаково на любом компьютере с установленным Docker.

Ключевые преимущества Docker:

  • Изоляция: каждое приложение работает в своей среде
  • Переносимость: работает одинаково везде
  • Легкость: потребляет меньше ресурсов, чем виртуальные машины
  • Скорость: быстрый запуск и остановка
  • Версионирование: легко откатиться к предыдущей версии

Образы vs Контейнеры: В чём разница?

Образ (Image):

  • Это шаблон, только для чтения
  • Содержит инструкции для создания контейнера
  • Можно сравнить с классом в программировании
  • Не может быть изменен после создания
  • Хранится в репозитории (например, Docker Hub)

Контейнер:

  • Это запущенный экземпляр образа
  • Можно изменять во время работы
  • Имеет свою файловую систему
  • Можно сравнить с объектом класса
  • Исчезает после удаления (если не сохранять данные в volumes)

Пример отношения образа к контейнеру:

Образ Ubuntu → Можно запустить 10 разных контейнеров
Образ Nginx → Можно запустить несколько веб-серверов на разных портах

Основные команды Docker с примерами использования

Сценарий 1: Развертывание веб-приложения

# Создаем образ веб-приложения
docker build -t mywebapp:v1 .

# Запускаем контейнер с проброской портов
docker run -d -p 80:80 --name webapp mywebapp:v1

# Проверяем логи
docker logs webapp

# Перезапускаем при необходимости
docker restart webapp

Сценарий 2: Работа с базой данных

# Запускаем PostgreSQL
docker run -d 
    --name my-postgres 
    -e POSTGRES_PASSWORD=mysecretpassword 
    -v postgres-data:/var/lib/postgresql/data 
    -p 5432:5432 
    postgres:13

# Подключаемся к базе
docker exec -it my-postgres psql -U postgres

Сценарий 3: Разработка с горячей перезагрузкой

# Запускаем контейнер с монтированием локальной директории
docker run -d 
    --name dev-env 
    -v $(pwd):/app 
    -p 3000:3000 
    node:14 
    npm run dev

Часть 2: Docker Compose

Что такое Docker Compose?

Docker Compose — это инструмент для определения и запуска многоконтейнерных приложений. Он использует YAML-файлы для конфигурации служб приложения и позволяет запускать все службы одной командой.

Основные возможности Docker Compose:

  • Управление несколькими контейнерами как единым приложением
  • Сохранение конфигурации в файле
  • Управление сетями и томами
  • Масштабирование служб

Практические сценарии использования Docker Compose

Сценарий 1: Веб-приложение с базой данных

# docker-compose.yml
version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/dbname

  db:
    image: postgres:13
    volumes:
      - postgres-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=dbname

volumes:
  postgres-data:

Сценарий 2: Микросервисная архитектура

# docker-compose.yml
version: '3.8'
services:
  frontend:
    build: ./frontend
    ports:
      - "80:80"

  backend:
    build: ./backend
    ports:
      - "8080:8080"
    depends_on:
      - db
      - redis

  db:
    image: mysql:8
    volumes:
      - db-data:/var/lib/mysql

  redis:
    image: redis:6
    volumes:
      - redis-data:/data

volumes:
  db-data:
  redis-data:

Сценарий 3: Разработческое окружение

# docker-compose.yml
version: '3.8'
services:
  dev:
    build: 
      context: .
      dockerfile: Dockerfile.dev
    volumes:
      - .:/app
      - /app/node_modules
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
    command: npm run dev

Команды Docker Compose с пояснениями

# Запуск всех сервисов в фоновом режиме
docker-compose up -d

# Просмотр логов конкретного сервиса
docker-compose logs backend

# Остановка всех сервисов с удалением контейнеров
docker-compose down

# Пересборка и запуск определенного сервиса
docker-compose up -d --build frontend

# Масштабирование сервиса
docker-compose up -d --scale backend=3

Типичные сценарии отладки

Проверка состояния сервисов

# Статус всех сервисов
docker-compose ps

# Использование ресурсов
docker-compose top

Доступ к контейнерам

# Выполнение команды в контейнере
docker-compose exec backend bash

# Просмотр логов в реальном времени
docker-compose logs -f

Полезно
1
Непонятно
Поделиться
Отправить
Линкануть
Вотсапнуть

Канал Дани в телеграме

В канале показываю, как разрабатываю продукты: нейронки, боты, пет-проекты, бизнес. Делюсь фишками о разработке и дизайне. Без рекламы.

Подписаться
← Назад в «Блог»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Контакты