Установка на mac, Linux, Windows + WSL2
Этот урок — практический. Цель — установить рабочий рантайм и проверить, что он работает. Дальше в курсе все команды будут предполагать, что у тебя есть docker в терминале.
Установку рассмотрим для трёх сценариев: macOS, Linux (Ubuntu/Debian), Windows + WSL2. На каждом — короткий чек-лист, типичные грабли, проверка.
macOS
На mac рекомендуемые варианты — OrbStack или Docker Desktop. Оба ставятся через brew.
OrbStack на mac
brew install --cask orbstack
open -a OrbStack
После первого запуска OrbStack попросит разрешение на установку virtualization-фреймворка. Соглашайся. После этого docker должен работать:
docker version
docker run --rm hello-world
Docker Desktop на mac
brew install --cask docker
open -a Docker
При первом запуске Docker Desktop попросит pass для установки helper-tools. Дальше будет показано меню в menubar с настройками.
Что выбрать
Если ты на M-серии и хочешь быстрый старт — OrbStack. Если на Intel mac (старые модели) или нужна именно Docker Desktop по компании — Docker Desktop. Оба работают, разница в скорости и потреблении памяти.
Грабли на mac
- OrbStack и Docker Desktop одновременно. Конкурируют за
/var/run/docker.sock. Если оба запущены —dockerбудет работать с тем, кто захватил socket. Лучше держать один активный. - Apple Silicon vs Intel images. На M-серии mac по умолчанию все образы тянутся в
arm64. Если нуженamd64(legacy сервисы), указывай--platform linux/amd64. OrbStack и Docker Desktop обычно сами это эмулируют через Rosetta, но не всегда плавно.
Linux (Ubuntu / Debian)
На Linux есть два пути: пакет docker.io из стандартного репозитория дистрибутива, или docker-ce (community edition) из официального репозитория Docker. Различия важны.
Установка docker-ce на Ubuntu / Debian (рекомендуется)
Официальная инструкция Docker устанавливает через apt-репозиторий:
# 1. Удалить старые версии (если есть)
sudo apt remove docker docker-engine docker.io containerd runc
# 2. Поставить пререквизиты
sudo apt update
sudo apt install -y ca-certificates curl gnupg
# 3. Добавить ключ Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 4. Добавить репозиторий
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list
# 5. Установить
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
На Debian — те же шаги, только ubuntu в URL замени на debian.
Добавление пользователя в группу docker
По умолчанию docker команды требуют sudo. Чтобы не писать sudo каждый раз, добавляешь себя в группу docker:
sudo usermod -aG docker $USER
# выйди из сессии и зайди снова, или:
newgrp docker
После этого docker run hello-world должен работать без sudo.
Группа docker даёт фактически root-доступ к хосту: контейнер, запущенный с -v /:/host под пользователем в этой группе, может писать в любую часть файловой системы хоста. На общедоступных серверах — учитывай это.
Проверка
docker version
docker run --rm hello-world
sudo systemctl status docker
Если systemctl показывает active (running) — daemon работает.
Грабли на Linux
- Старый kernel. Docker требует kernel 5.10+ для полноценной работы (для overlayfs, cgroup v2). На совсем старых Ubuntu 18.04 или Debian 10 могут быть проблемы.
- iptables конфликты. Если ты используешь
ufwилиfirewalld, Docker может конфликтовать с правилами. Часто решается переключением Docker наiptables-nftв/etc/docker/daemon.json. docker.ioпакет. Не путать сdocker-ce. Если в системе осталсяdocker.ioпосле удаления — могут быть конфликты.
Windows + WSL2
На Windows контейнеры работают через WSL2 (Windows Subsystem for Linux 2). Это лёгкая Linux VM, интегрированная в Windows. Без WSL2 даже не пытайся ставить Docker — это устаревший Hyper-V backend, который медленный.
Шаги
- Установить WSL2 и Ubuntu:
# В Powershell от админа:
wsl --install
Это поставит WSL2 и Ubuntu по умолчанию. Перезагрузка, потом WSL предложит создать пользователя в Ubuntu.
- Поставить Docker Desktop или Rancher Desktop:
- Docker Desktop: https://docs.docker.com/desktop/install/windows-install/, установщик автоматически интегрируется с WSL2.
- Rancher Desktop: https://rancherdesktop.io, тоже работает через WSL2.
-
Включить WSL integration: в настройках Docker Desktop -> Resources -> WSL Integration -> включи свой Ubuntu-дистрибутив.
-
Открыть Ubuntu terminal и проверить:
docker version
docker run --rm hello-world
Где запускать команды на Windows
Есть выбор: PowerShell на хосте, или bash в WSL2. Для DE-работы (Python, скрипты, git) — строго в WSL2. PowerShell для администрирования Windows, но не для daily DE-работы.
Файлы лучше держать в WSL2 файловой системе (/home/user/...), а не в Windows (/mnt/c/...). Bind mount из Windows в контейнер через /mnt/c/... сильно медленнее.
Грабли на Windows
- Без WSL2 не пытайся. Старый Hyper-V backend в Docker Desktop deprecated.
- WSL1 vs WSL2. Проверь, что у тебя WSL2:
wsl -l -v. Если WSL1 —wsl --set-version Ubuntu 2. - Память. WSL2 может агрессивно жрать память. В
%UserProfile%\.wslconfigможно ограничить:
[wsl2]
memory=8GB
processors=4
Универсальная проверка
После любой установки выполни три команды:
docker version
docker info
docker run --rm hello-world
docker versionпокажет CLI и Server версии. Обе должны быть >= 24 (а лучше 28 как мы используем в курсе).docker infoпокажет storage driver (overlay2обычно), cgroup version (2), runtime, число образов/контейнеров.docker run --rm hello-worldскачает тестовый образ и запустит. Если получишь «Hello from Docker!» — всё работает.
Если что-то падает с permission denied while trying to connect to the Docker daemon socket — ты не в группе docker (Linux) или daemon не запущен (mac/Win).
Попробуй сам
После того как установка завершилась, выполни:
docker version
docker info | head -30
docker run --rm hello-world
docker context ls
И последняя команда:
docker info --format '{{json .}}' | python3 -c "import sys,json; d=json.load(sys.stdin); print('Version:', d.get('ServerVersion')); print('Storage:', d.get('Driver')); print('Cgroup:', d.get('CgroupVersion')); print('OS:', d.get('OperatingSystem'))"
Это выдаст ключевые параметры в одну строку.