Урок 02

Установка Docker и Docker Compose

Требования

Linux (Ubuntu 22.04+):

  • 64-bit
  • Kernel 5.10+
  • 2+ ГБ RAM

macOS:

  • macOS 12+
  • Docker Desktop

Windows:

  • Windows 10/11 Pro/Enterprise
  • WSL2
  • Docker Desktop

Установка на Ubuntu

Способ 1 — официальный скрипт (быстро)

curl -fsSL https://get.docker.com | sh

Что делает: скачивает и запускает официальный установочный скрипт.

Способ 2 — вручную (по шагам)

# 1. Утилиты
sudo apt update
sudo apt install -y ca-certificates curl gnupg

# 2. GPG-ключ
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

# 3. Репозиторий
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. Установка
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Проверка

docker --version
# Docker version 27.0.0

docker compose version
# Docker Compose version v2.28.0

sudo systemctl status docker
# active (running)

Группа docker

Проблема: без sudo команды Docker не работают.

docker ps
# permission denied

Решение: добавь себя в группу docker.

sudo usermod -aG docker $USER
newgrp docker

Или перелогинься.

Проверка:

docker ps
# CONTAINER ID   IMAGE   ...  (пусто, но работает)

⚠️ Группа docker = root-права. Член группы может монтировать файлы хоста в контейнеры и получать root-доступ. Доверяй только своим пользователям.

Автозапуск

Docker должен стартовать при загрузке:

sudo systemctl enable docker
sudo systemctl enable containerd

Проверка:

sudo systemctl is-enabled docker
# enabled

Установка на macOS

1. Скачай Docker Desktop: docker.com/products/docker-desktop

2. Установи DMG.

3. Запусти Docker Desktop. В трее появится иконка.

4. Проверь:

docker --version
docker compose version

Docker Desktop для Mac — включает Docker Engine, Compose, Kubernetes.

Альтернатива — Colima (open-source, через brew):

brew install colima
colima start

Легче, чем Docker Desktop, без GUI.

Установка на Windows

1. Установи WSL2:

wsl --install

2. Установи Docker Desktop: docker.com/products/docker-desktop

3. Включи интеграцию с WSL2 в настройках Docker Desktop.

4. Внутри WSL2 Docker работает как на Linux.

Первая проверка

docker run hello-world

Ожидаемый вывод:

Hello from Docker!
This message shows that your installation appears to be working correctly.

Что произошло:

  1. Docker проверил наличие образа hello-world локально
  2. Не нашёл → скачал из Docker Hub
  3. Создал контейнер
  4. Запустил → вывод → завершил

Проверь контейнеры:

docker ps -a
# CONTAINER ID   IMAGE         ...   hello-world

-a — включая остановленные.

Удали:

docker rm <container_id>

Полезные настройки

Настройки демона

/etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "default-address-pools": [
    {"base": "172.30.0.0/16", "size": 24}
  ]
}

Что даёт:

  • Логи контейнеров — макс 10 МБ × 3 файла
  • Свой пул подсетей (если 172.17.0.0/16 занят)

Применить:

sudo systemctl restart docker

Частые проблемы

permission denied

docker: permission denied while trying to connect to the Docker daemon socket

Решение: добавить пользователя в группу docker (см. выше).

Порт занят

docker: Error starting userland proxy: bind: address already in use

Причина: другой процесс слушает порт. Проверь:

sudo ss -tlnp | grep :80

Решение: поменять порт в конфиге контейнера.

Не хватает места

no space left on device

Проверь:

docker system df

Очисти:

docker system prune -a

⚠️ Удаляет ВСЁ, что не используется. Включая образы.

Docker не стартует

docker: Cannot connect to the Docker daemon

Проверь:

sudo systemctl status docker
sudo journalctl -u docker -n 50

Перезапусти:

sudo systemctl restart docker

Проверка установки

Финальный чек-лист:

docker --version           # OK
docker compose version     # OK
docker run hello-world     # Hello from Docker!
docker ps                  # без sudo
sudo systemctl is-enabled docker  # enabled

Итог

На Ubuntu:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

Проверь: docker --version и docker run hello-world.

Дальше — образы и контейнеры.