Ставим Docker
Третий и последний инструмент нашего набора — Docker. Из всей тройки он самый «тяжёлый» по установке, так что не удивляйся, что шагов чуть больше. Зато после этого урока у тебя будет полноценное окружение junior-уровня, и мы это отпразднуем в следующем уроке.
Как и раньше: тебе пока не нужно уметь работать с Docker. Цель — поставить его, запустить тестовый контейнер hello-world и увидеть приветствие. Если увидишь — Docker работает.
Что такое Docker и контейнер в двух словах
Представь, что ты хочешь дать другу свою программу, но у него другой компьютер: другая система, другие версии всего. У тебя работает, у него нет — классическая беда «у меня же запускалось». Docker решает это так: он упаковывает программу вместе со всем её окружением в коробку, которая называется контейнер. Эта коробка запускается одинаково на любом компьютере, где есть Docker.
Docker упаковывает программу со всем окружением в контейнер, который запускается одинаково везде.
Почему это важно для дата-инженера? В реальной работе данные обрабатывают не «голыми» программами на твоём ноутбуке, а наборами сервисов: базы данных, очереди, инструменты обработки. Поднять их вручную — мучение: каждый требует своей установки, версий, настроек. Docker позволяет запустить любой такой сервис одной командой, не засоряя свой компьютер. Поэтому почти все современные junior-курсы по данным предполагают, что у тебя есть Docker: ты просто запускаешь готовый контейнер с базой данных и тренируешься, а потом так же легко его удаляешь, не оставляя следов в системе.
Этого достаточно на старте. Подробный курс по Docker дам ссылкой в конце урока. А сейчас — установка.
Предупреждение: Docker должен быть запущен
Сразу запомни важное. В отличие от Python и git, Docker состоит из двух частей: команды docker в терминале и фонового процесса, который называется демон (daemon). Команда docker сама по себе ничего не делает — она лишь передаёт твои просьбы демону. Если демон не запущен, любая команда упадёт с ошибкой про connect to the Docker daemon.
На macOS и Windows демон запускается, когда работает приложение Docker Desktop. Перед любой командой docker убедись, что Docker Desktop открыт и в его иконке нет надписи starting. На Linux демон обычно стартует сам как системная служба, но иногда его нужно запустить вручную (покажу ниже).
macOS
На Mac ставим Docker Desktop — это приложение, которое и поставит команду docker, и будет держать демон запущенным. Проще всего через Homebrew:
brew install --cask docker
open -a Docker
Команда open -a Docker запускает приложение. При первом запуске оно попросит пароль для установки служебных компонентов — это нормально, соглашайся. Дождись, пока иконка кита в верхней панели перестанет анимироваться: это значит, что демон готов.
Windows (Docker Desktop + WSL2)
На Windows тоже ставим Docker Desktop, и он работает в связке с WSL2 (его мы настроили в уроке про Python).
- Скачай Docker Desktop с официального сайта docker.com (раздел Download для Windows) и установи обычным двойным кликом по установщику.
- Запусти Docker Desktop. В его настройках открой Resources, затем WSL Integration, и включи свой дистрибутив Ubuntu.
- Дождись, пока Docker Desktop покажет статус Running.
Дальше все команды docker выполняй внутри окна Ubuntu — так же, как Python и git.
Linux (Docker Engine)
На Linux ставим не Desktop, а сам движок Docker Engine. Официальный быстрый способ — установочный скрипт Docker:
curl -fsSL https://get.docker.com | sudo sh
После установки добавь себя в группу docker, чтобы не писать sudo перед каждой командой:
sudo usermod -aG docker $USER
Чтобы это вступило в силу, выйди из сессии и зайди снова (или перезагрузись). Если демон не запущен, стартани его:
sudo systemctl start docker
Команда usermod добавляет тебя в группу docker, но новое членство применяется только в новой сессии терминала. Поэтому после неё обязательно перелогинься, иначе docker всё ещё будет требовать sudo.
Проверка: запускаем первый контейнер
На любой системе (на Windows — внутри Ubuntu) проверь установку двумя командами. Сначала версия:
docker --version
Ожидаемый вывод — строка с версией:
Docker version 28.0.1, build abc1234
Теперь главное — запусти тестовый контейнер:
docker run hello-world
Docker скачает крошечный учебный образ и запустит его. Ожидаемый вывод (сокращённо):
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
...
Hello from Docker!
This message shows that your installation appears to be working correctly.
Ключевая строка — Hello from Docker!. Если ты её видишь, значит Docker установлен, демон запущен и контейнеры работают. Первая строка про Unable to find image — это не ошибка, а нормальное поведение: образа ещё нет локально, и Docker его скачивает.
Что делать при ошибке
Самая частая ошибка новичка выглядит так:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Это не поломка. Docker буквально спрашивает: «а демон-то запущен?». Что делать:
- На macOS / Windows — открой Docker Desktop и дождись статуса Running, потом повтори команду.
- На Linux — выполни
sudo systemctl start docker, и если ругается на права, проверь, что перелогинился после добавления в группу docker.
Подробный курс по Docker
Здесь мы только поставили Docker и запустили первый контейнер. Что такое образы, как писать свои контейнеры, тома, сети — всё это отдельная большая тема, которой посвящён целый курс.
Docker подробно: контейнеры с нуляПопробуй сам
- Поставь Docker по шагам для своей системы.
- Убедись, что демон запущен (Docker Desktop в статусе Running, либо systemctl на Linux).
- Выполни
docker --version— строка должна начинаться сDocker version. - Выполни
docker run hello-worldи найди в выводе строкуHello from Docker!.
Если приветствие появилось — поздравляю, твоё окружение почти готово. Остался один контрольный урок.