Docker: что это, где применяется и как освоить
Docker — инструмент, который упаковывает программу вместе со всем, что ей нужно для запуска: версией языка, библиотеками, настройками. Такую упаковку называют образом, а запущенную из него копию — контейнером. Разработчик с помощью Docker поднимает базу данных и свой сервис одной командой, тестировщик разворачивает нужную версию приложения для проверки, аналитик запускает PostgreSQL или Jupyter, ничего не устанавливая в систему. Чтобы начать, достаточно основ терминала. Дальше осваивают запуск готовых образов, Dockerfile, тома, сеть и Docker Compose.
Содержание

Главная польза Docker — воспроизводимость. Фраза «у меня работает» перестаёт быть оправданием: если сервис запускается из одного и того же образа, у разработчика, на тестовом стенде и на ноутбуке аналитика внутри будут те же версии и те же файлы. Отличаться могут только настройки, переданные снаружи, и данные.
Кому нужен Docker, если вы не DevOps-инженер
Бэкенд-разработчик поднимает в контейнерах базу, очередь сообщений и кеш, а не ставит их в систему: если двум проектам нужны PostgreSQL 14 и 16, это два контейнера, которые не мешают друг другу. Он же пишет Dockerfile, по которому конвейер собирает образ для сервера.
Тестировщик сам поднимает нужную версию приложения, чтобы воспроизвести ошибку, и запускает автотесты в том же окружении, что и конвейер. Аналитик и студент получают инструменты без долгой установки: образ с Jupyter или учебную базу, которую можно удалить и развернуть заново за минуту.
Если вы не запускаете ничего своего, а работаете только в облачных сервисах, Docker может и не понадобиться. О пути кода от коммита до сервера у нас есть статья о DevOps-практиках, о запуске контейнеров на многих серверах — статья о Kubernetes. Здесь речь о более раннем шаге: как упаковать и запустить своё окружение.
Образ и контейнер: в чём разница
Образ — неизменяемый шаблон. Его собирают по Dockerfile, текстовому рецепту из инструкций: взять за основу Python 3.12, скопировать файлы проекта, установить зависимости, указать команду запуска. Каждая инструкция добавляет слой, и неизменившиеся слои при пересборке берутся из кеша. Образы хранят в реестре, например в Docker Hub.
Контейнер — запущенный экземпляр образа со своим слоем для записи. Всё, что программа записала внутри, исчезнет вместе с контейнером после docker rm. Поэтому данные базы хранят в томе — отдельном хранилище, которое переживает пересоздание контейнера. Новички теряют данные именно здесь: удалили контейнер PostgreSQL и обнаружили пустую базу.
Чем Docker не является
Docker — не виртуальная машина. В документации Docker контейнер описан как изолированный процесс со всеми нужными ему файлами, причём все контейнеры на машине используют одно ядро операционной системы. У виртуальной машины своё ядро и драйверы. Поэтому контейнеры лёгкие, но Linux-контейнер на Windows или macOS работает внутри служебной виртуальной машины Docker Desktop.
Docker — и не средство защиты по умолчанию. Изоляция процессов не отменяет настроек, которые вы сами делаете небезопасными. Опубликованный порт по умолчанию открыт на всех сетевых интерфейсах: руководство по публикации портов предупреждает, что к приложению сможет обратиться любой, чей трафик доходит до машины, и советует писать -p 127.0.0.1:5432:5432, если база нужна только вам. На Linux опубликованные порты обходят правила ufw, а членство в группе docker, как сказано в инструкции после установки, даёт пользователю права уровня root.
Учебный пример: стенд из трёх сервисов одной командой
Ситуация учебная. Команда делает сервис заявок на ремонт оборудования: приложение на Python, PostgreSQL 16 и Redis для очереди уведомлений. Инструкция по запуску занимала две страницы, и новый тестировщик потратил на неё полдня, а всё равно получил другую версию Redis.
Разработчик пишет Dockerfile для приложения и файл compose.yaml с тремя сервисами. У базы — том для данных и порт, опубликованный только на 127.0.0.1. У приложения — переменные окружения с адресом базы и зависимость от неё. Теперь запуск выглядит так: git clone, затем docker compose up -d. Команда docker compose ps показывает три работающих контейнера, docker compose logs app — журнал приложения.
Тестировщику прислали ошибку из версии 1.8.2. Он указывает в файле тег образа 1.8.2 вместо текущего, поднимает стенд и воспроизводит проблему на той же версии, что у пользователя. Аналитик подключается к базе через DBeaver по адресу localhost:5432 и проверяет запросы к отчёту на тестовых данных. Если данные испорчены, docker compose down -v удаляет контейнеры вместе с томами, и следующий запуск начинается с чистой базы.
В современных версиях команда пишется через пробел, docker compose. В старых руководствах встречаются docker-compose через дефис и строка version: в начале файла; по справочнику формата Compose это поле теперь только информационное и вызывает предупреждение об устаревании.
Лимиты Docker Hub: почему сборка вдруг перестаёт работать
Многие считают, что публичные образы на Docker Hub можно скачивать без ограничений. Это не так. По странице о лимитах Docker Hub пользователь без входа в аккаунт может сделать 100 загрузок за 6 часов, причём лимит считается на IPv4-адрес или на IPv6-подсеть /64, а не на человека. Бесплатная учётная запись Personal получает 200 загрузок за 6 часов, платные тарифы Pro, Team и Business — без ограничения частоты.
Для одного ноутбука это много. Проблемы начинаются, когда десятки людей выходят в интернет через один адрес: офис, учебный класс, общий сервер сборки. Docker предупреждает, что сторонние платформы могут скачивать образы для многих пользователей с одного адреса, и тогда срабатывает защита от злоупотреблений даже после входа в аккаунт. Конвейер, который в каждом задании заново скачивает базовый образ, исчерпывает лимит быстрее всего.
На практике это значит: выполнить docker login на машинах сборки, закрепить версии образов вместо latest, настроить кеш или зеркало реестра и не скачивать заново то, что уже есть на машине. При превышении лимита Docker Hub возвращает длинное сообщение со ссылкой на документацию, а защита от злоупотреблений — короткий ответ 429 Too Many Requests.
С чего начать и в каком порядке осваивать
Порядок здесь задаёт сама логика инструмента. Сначала нужно уметь пользоваться чужими образами, потом собирать свои, и только затем объединять несколько сервисов в Compose. Если перескочить к Compose, файл придётся копировать из интернета, не понимая, почему пропала база или не открывается порт.
- Терминал: навигация по папкам, переменные окружения, просмотр процессов и логов.
- Установка и запуск готовых образов:
docker run,docker ps,docker logs,docker exec, публикация порта, остановка и удаление. - Тома и переменные окружения на примере PostgreSQL: как сохранить данные при пересоздании контейнера.
- Свой Dockerfile для небольшого скрипта или сервиса, порядок инструкций и кеш слоёв, файл
.dockerignore. - Docker Compose: несколько сервисов, сеть между ними, зависимости, запуск и удаление одной командой.
На Windows и macOS обычно ставят Docker Desktop, на Linux — Docker Engine. В компании проверьте условия: по лицензионной справке Docker Desktop бесплатен для личных и учебных задач и для организаций, где меньше 250 сотрудников и выручка меньше 10 млн долларов в год; остальным нужна подписка.
Первые шаги можно пройти по официальному руководству Docker или на бесплатном онлайн-курсе Karpov.Courses «Docker с нуля». В нём 10 модулей: от первого контейнера и сборки образа через переменные окружения, логи, порты и сеть к docker-compose. Курс адресован аналитикам и начинающим разработчикам; длительность и число заданий в обзоре не указаны, куратора нет.
Упражнения и частые ошибки
Лучшие упражнения — те, где вы специально что-то ломаете. Запустите PostgreSQL без тома, создайте таблицу, удалите контейнер и убедитесь, что таблицы нет, затем повторите с томом. Соберите образ, поменяйте одну строку кода и посмотрите, какие слои пересобрались. Поменяйте в Dockerfile порядок: скопируйте весь проект до установки зависимостей — и сборка станет заметно медленнее при каждой правке.
Частые ошибки новичков: тег latest, из-за которого через месяц непонятно, какая версия работает; пароли в Dockerfile, откуда они попадают в слои образа; порт базы, открытый на всех интерфейсах. Проверить себя можно так: отдайте свой репозиторий другому человеку. Если он поднимает проект одной командой, ничего не спрашивая, навык работает.
Пройти тему системно, с проектами, можно на онлайн-курсе Skillbox «Docker с нуля»: 3 месяца, 64 часа практики и 8 часов теории. Программа идёт от Dockerfile с оптимизацией слоёв через сети, тома и Compose к Docker Swarm, итоговый проект — микросервисное приложение, всего три работы в портфолио. От учащегося ждут знакомства с Linux и устройством веб-приложений.
Как Docker влияет на доход
Отдельной надбавки «за Docker» почти не бывает, навык стал базовым. По опросу разработчиков Stack Overflow 2025 года (49 044 ответа со всего мира, вопрос об инструментах задавали половине участников) Docker используют 71,1 % всех респондентов и 73,8 % профессиональных разработчиков, за год — плюс 17 пунктов. Это данные об использовании, а не о зарплатах, и прибавку к доходу из них не вывести.
Бэкенд-разработчику и инженеру по автоматизации тестирования Docker нужен, чтобы пройти отбор. Тестировщику и аналитику он расширяет круг задач: поднять стенд, упаковать ночной расчёт, воспроизвести ошибку без разработчика. Чтобы оценить вес навыка на своей позиции, сравните вакансии одной должности, вашего уровня и региона с упоминанием Docker и без него, смотрите на медиану вилки и различайте суммы до вычета налога и на руки.
Как выбрать обучение
При выборе онлайн-курса проверьте, работаете ли вы с Docker на своём компьютере или только смотрите видео, разбирают ли тома, сеть и Compose, есть ли ревью Dockerfile и учат ли читать логи, когда контейнер не стартует.
Отдельное направление для тех, кто уже уверенно работает с Docker и Compose, — безопасность контейнеров. На онлайн-курсе TeachMeSkills «DevSecOps» два месяца вечерних занятий: защита Docker и Kubernetes, сканеры уязвимостей, OWASP Top 10 и проверки в GitLab CI, итог — конвейер со встроенными проверками безопасности. Курс продвинутый: нужны опыт CI/CD, программирование и уверенный терминал.
Прежде чем платить, пройдите упражнения из этой статьи сами: если застряли на терминале, начните с него.
Сравнить школы по цене, формату и поддержке поможет рейтинг онлайн-школ с обучением Docker. Школ в нём немного, поэтому программу и условия выбранного курса сверяйте на странице самой школы.