Learning Platform
Глоссарий Troubleshooting
Урок 04.03 · 18 мин
Начальный
dockerinstallmacoslinuxwsl

Установка на mac, Linux, Windows + WSL2

Этот урок — практический. Цель — установить рабочий рантайм и проверить, что он работает. Дальше в курсе все команды будут предполагать, что у тебя есть docker в терминале.

Установку рассмотрим для трёх сценариев: macOS, Linux (Ubuntu/Debian), Windows + WSL2. На каждом — короткий чек-лист, типичные грабли, проверка.


macOS

На mac рекомендуемые варианты — OrbStack или Docker Desktop. Оба ставятся через brew.

macOS: установка OrbStack или Docker Desktop
brew --versionПроверь, что Homebrew установлен. Если нет: /bin/bash -c '$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)'
brew install --cask orbstackУстановка OrbStack. Альтернатива: brew install --cask docker (для Docker Desktop)
open -a OrbStackЗапусти приложение. При первом запуске оно настроит symlinks для docker CLI

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. Различия важны.

Linux: docker.io vs docker-ce
docker.ioПакет из репозитория дистрибутива. Обновляется с релизом дистрибутива (раз в полгода-год). Версия может быть старой. Для серьёзного DE-стека обычно не подходит
docker-ceCommunity Edition из официального Docker репозитория. Последняя версия. Включает Docker Compose v2 как плагин. Рекомендуемый путь

Установка 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.

WARNING

Группа 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, который медленный.

Шаги

  1. Установить WSL2 и Ubuntu:
# В Powershell от админа:
wsl --install

Это поставит WSL2 и Ubuntu по умолчанию. Перезагрузка, потом WSL предложит создать пользователя в Ubuntu.

  1. Поставить Docker Desktop или Rancher Desktop:
  1. Включить WSL integration: в настройках Docker Desktop -> Resources -> WSL Integration -> включи свой Ubuntu-дистрибутив.

  2. Открыть 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'))"

Это выдаст ключевые параметры в одну строку.


Проверка знанийKnowledge check
Почему на Linux рекомендуется ставить docker-ce из официального репозитория Docker, а не docker.io из репозитория дистрибутива? И зачем добавлять пользователя в группу docker?
ОтветAnswer
docker-ce из официального репозитория обновляется регулярно (раз в несколько недель), там всегда последняя стабильная версия Docker Engine с современным Compose v2 как плагин и BuildKit. Пакет docker.io из репозитория дистрибутива привязан к релизному циклу самого дистрибутива — раз в полгода или год. Это значит, что в Ubuntu 24.04 LTS будет версия Docker, которая была актуальна на момент релиза LTS, и она может отставать на год-полтора. Для серьёзного DE-стека (например, BuildKit v0.26, который нужен для cache mounts) это критично. Группа docker нужна для того, чтобы не писать sudo перед каждой командой docker: членство в группе даёт право на доступ к /var/run/docker.sock. Важный nuance: формально это эквивалент root-доступу к хосту, потому что контейнер, запущенный с -v /:/host от пользователя в группе docker, может писать куда угодно в файловой системе. На dev-машине это нормально, на shared production server — учитывай security implications.

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 5. Почему на Linux рекомендуется ставить docker-ce из официального репозитория Docker, а не docker.io из репозитория дистрибутива?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4