Что такое Docker — объяснение простыми словами

Docker — инструмент для упаковки приложения вместе со всем необходимым окружением: зависимостями, конфигами, библиотеками — в изолированный контейнер. Контейнер запускается одинаково на любой машине: ноутбуке разработчика, тестовом сервере, продакшне.

Вся рубрика Docker: уроки, команды и практические сценарии

Проблема которую решает Docker

«Works on my machine» — классика. Разработчик написал код, у него всё работает. На сервере — падает. У тестировщика — нужно установить десяток пакетов. Причины всегда одни:

Разработчик: «У меня работает!»
Сервер:      «Ошибка: python 3.8 required, found 3.11»
Тестировщик: «Какой пакет мне нужно установить?»
DevOps:      «На staging всё ок, на prod — нет»
  • Разные версии Python/Node/Java на разных машинах
  • Разные версии библиотек
  • Разные ОС (Mac у разработчика, Ubuntu на сервере)
  • «Забытые» зависимости которые есть на машине разработчика, но не задокументированы
  • Разные переменные окружения и конфиги

Docker упаковывает приложение и всё его окружение в контейнер. Контейнер запускается везде одинаково — проблема исчезает.

Аналогия — транспортный контейнер

До появления стандартных грузовых контейнеров каждый груз перевозился по-своему: мешки навалом, ящики отдельно, жидкость в бочках. Каждый раз нужно было думать как разместить, какой транспорт подойдёт, как перегрузить.

Стандартный 20-футовый контейнер изменил логистику: не важно что внутри — любой кран, корабль, грузовик, поезд работает с ним одинаково. Содержимое изолировано, стандартизировано, легко перемещается.

Docker контейнер — то же самое, только для приложений. Не важно какое приложение внутри — любой сервер с Docker запустит его одинаково.

Ключевые понятия Docker

Образ (Image) — неизменяемый шаблон для создания контейнера. Как класс в ООП: описывает как должен выглядеть контейнер, но сам не запускается.

ubuntu:22.04       — образ ОС Ubuntu
python:3.12        — образ с Python 3.12
python:3.12-slim   — облегчённый образ Python
nginx:latest       — образ веб-сервера Nginx
postgres:16        — образ PostgreSQL
redis:7-alpine     — образ Redis на Alpine Linux

Контейнер (Container) — запущенный экземпляр образа. Как объект из класса. Из одного образа можно создать сотни контейнеров — каждый изолирован, не мешает другим.

Dockerfile — текстовый файл с инструкциями для сборки образа. Описывает: какой базовый образ взять, какие команды выполнить, какой код скопировать, какую команду запустить.

Docker Hub — публичный реестр образов. Как GitHub, но для Docker образов. Тысячи готовых образов: операционные системы, базы данных, веб-серверы, языки программирования.

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

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

Виртуальная машина:              Docker контейнер:

┌─────────────────────┐          ┌─────────────────────┐
│    Приложение       │          │    Приложение       │
│    Библиотеки       │          │    Библиотеки       │
│    Guest OS         │          └──────────┬──────────┘
│    (ядро Linux)     │                     │
│    Гипервизор       │          ┌──────────┴──────────┐
│    Host OS          │          │    Docker Engine     │
└─────────────────────┘          │    Host OS (ядро)   │
                                 └─────────────────────┘

Виртуальная машина эмулирует отдельный компьютер с полноценной ОС. Docker использует ядро хостовой ОС — контейнер содержит только само приложение и его зависимости.

Виртуальная машинаDocker
Размер образаГигабайты (5–20 ГБ)Мегабайты (50–500 МБ)
ЗапускМинутыСекунды
ИзоляцияПолная (отдельное ядро)Процессная (общее ядро)
Потребление RAMВысокоеНизкое
Производительность-10..30% накладные расходы~= нативная
Разные ОСДа (Windows на Linux)Нет (только Linux на Linux)

Первые шаги с Docker

# Убедиться что Docker установлен
docker --version
# Docker version 26.1.0, build ...

# Скачать образ и запустить тестовый контейнер
docker run hello-world
# Hello from Docker! ← всё работает

# Запустить Ubuntu в интерактивном режиме
docker run -it ubuntu bash
# root@abc123:/# ← ты внутри контейнера Ubuntu
# apt update && apt install -y python3
# exit

# Запустить Nginx веб-сервер
docker run -d -p 8080:80 --name my-nginx nginx
# Открыть: http://localhost:8080

# Посмотреть запущенные контейнеры
docker ps

# Остановить
docker stop my-nginx

Типичные сценарии использования Docker

  • Локальная разработка — запускать PostgreSQL, Redis, Elasticsearch без установки на систему. Снёс контейнер — ничего не осталось
  • Единое окружение команды — все разработчики работают в одинаковом окружении. «У меня работает» больше не аргумент
  • Деплой — одинаково на dev/staging/prod. Собрал образ один раз — деплоишь везде одно и то же
  • CI/CD — сборка и тесты в чистой изолированной среде. GitHub Actions, GitLab CI используют Docker контейнеры
  • Микросервисы — каждый сервис в своём контейнере, независимое обновление и масштабирование

Как Docker работает внутри

Docker использует два механизма ядра Linux для изоляции:

  • namespaces — изолируют процессы, сеть, файловую систему. Контейнер видит только свои процессы, не видит процессы хоста
  • cgroups — ограничивают ресурсы: CPU, RAM, дисковый ввод-вывод. Контейнер не может «съесть» все ресурсы сервера

Образ состоит из слоёв (layers). Каждая инструкция в Dockerfile — отдельный слой. Слои кэшируются: если поменял только код приложения — Docker не пересобирает слой с зависимостями.

Часто задаваемые вопросы

Docker — это язык программирования?

Нет. Docker — инструмент для контейнеризации приложений. Это набор программ: Docker Engine (демон), Docker CLI (командная строка) и Docker Desktop (GUI для Windows/Mac). Dockerfile — текстовый файл с инструкциями, не язык программирования. Писать код на Docker нельзя — им запускают код написанный на Python, Node.js, Go и других языках.

Docker бесплатный?

Docker Engine (CLI, для Linux-серверов) — полностью бесплатный и open source. Docker Desktop (GUI для Windows и Mac) — бесплатен для личного использования, студентов и небольших компаний (менее 250 сотрудников и $10М дохода). Для крупного бизнеса нужна платная подписка. Docker Hub (публичный реестр образов) — бесплатен для публичных репозиториев, платный для приватных.

Нужен ли Linux для Docker?

Docker контейнеры используют ядро Linux, поэтому нативно Docker работает только на Linux. На Windows и macOS Docker Desktop создаёт небольшую Linux виртуальную машину автоматически — пользователь этого не замечает. Для серверного деплоя используют Linux (Ubuntu, Debian, CentOS) — это стандарт. На Windows Server тоже можно запускать Docker, но только Windows-контейнеры.

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x