Установка Docker на Ubuntu 20.04 (Focal Fossa)
Docker упрощает развёртывание и локальную разработку. В этой инструкции шаг за шагом показано, как добавить репозиторий Docker, установить Docker Engine на Ubuntu 20.04, запустить тестовый контейнер, настроить запуск без sudo и удалить Docker при необходимости. Включены советы по безопасности, отладке и альтернативы для продакшена.

Почему Docker полезен
Docker — это открытая платформа для упаковки приложений в контейнеры. Контейнеры изолируют приложение и его зависимости, но не требуют полной виртуализации ОС, поэтому они легче по ресурсам, чем виртуальные машины.
Преимущества Docker кратко:
- Простота использования и обучения.
- Единообразные окружения между разработкой, тестами и продакшеном.
- Хорошо сочетается с микросервисной архитектурой.
- Низкая нагрузка на ресурсы по сравнению с виртуальными машинами.
Важно: контейнеры не заменяют виртуальные машины во всех сценариях. Они дают изоляцию на уровне процесса и ядра ОС.
Кому это руководство
Кратко:
- Разработчикам, желающим локально запускать сервисы в контейнерах.
- DevOps-инженерам, настраивающим Docker в Ubuntu 20.04.
- Тем, кто хочет понять базовую безопасность и управление Docker.
Если вы на ARM-устройстве (например, Raspberry Pi), читайте раздел про архитектуры ниже.
Подготовка: обновление списков пакетов
Перед установкой хорошая практика — обновить индексы пакетов:
sudo apt updateЭто гарантирует, что apt увидит добавленный вами репозиторий Docker.
Добавление репозитория Docker
Мы будем устанавливать Docker из официального репозитория Docker. Это позволяет проще получать обновления и устанавливать конкретные версии.
- Установите зависимости для работы репозиториев по HTTPS:
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release- Добавьте официальный GPG-ключ Docker в хранилище ключей:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgGPG (или GnuPG) — это реализация стандарта PGP для подтверждения подписи пакетов.
- Подключите стабильный репозиторий Docker. Команда использует кодовое имя вашей Ubuntu (lsb_release -cs).
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullПримечание: если у вас ARM-архитектура, замените arch=amd64 на arch=arm64 или arch=armhf.
Важно: внимательно проверяйте синтаксис команды echo — кавычки и путь к keyring обязательны.
Установка Docker Engine
- Обновите индексы пакетов после добавления репозитория:
sudo apt update- Установите Docker Engine и сопутствующие пакеты:
sudo apt-get install docker-ce docker-ce-cli containerd.ioЭта команда по умолчанию поставит последнюю стабильную версию.
Если нужен конкретный релиз, сначала посмотрите доступные версии:
apt-cache madison docker-ce
Затем установите нужную версию явно, например:
sudo apt-get install docker-ce=5:20.10.6~3-0~ubuntu-focal docker-ce-cli=5:20.10.6~3-0~ubuntu-focal containerd.ioСовет: фиксируйте версии в production-скриптах, чтобы избежать неожиданных изменений после обновлений.
Подтверждение установки
Проверьте версию Docker:
docker -vСлужба Docker обычно автоматически запускается при загрузке системы в Ubuntu и других Debian-подобных дистрибутивах.
Протестируйте установку, запустив официальный тестовый образ hello-world. Он загрузится из Docker Hub и выполнит небольшую проверку:
sudo docker run hello-world
Если вывод сообщает, что контейнер успешно запущен, установка прошла корректно.
Запуск Docker без sudo (не-root пользователь)
По умолчанию Docker требует root-доступа. Чтобы запускать Docker от имени обычного пользователя, добавьте пользователя в группу docker:
sudo groupadd dockersudo usermod -aG docker $USERАктивируйте изменения группы в текущем сеансе:
newgrp dockerВыйдите из сеанса и зайдите снова или перезагрузите систему, чтобы изменения вступили в силу. На рабочем столе GNOME можно выйти через графический интерфейс:
gnome-session-quit
Если после повторного входа docker команды всё ещё требуют sudo, попробуйте перезагрузить систему.
Безопасность: добавление пользователя в группу docker даёт ему фактически root-права в контексте Docker. Думайте об этом при предоставлении доступа коллегам.
Удаление Docker
Чтобы удалить пакеты Docker:
sudo apt remove docker docker-engine docker.io containerd runcЭто удалит пакеты, но не данные (образы, контейнеры, тома). Чтобы удалить все данные Docker вручную:
sudo rm -rf /var/lib/dockersudo rm -rf /var/lib/containerdПеред удалением данных проверьте, нужны ли вам резервные копии или экспорт образов.
Практические рекомендации и лучшие практики
- Используйте docker-compose или Kubernetes для оркестрации нескольких сервисов.
- В продакшене рассмотрите запуск контейнеров под минимальными привилегиями и с ограничением ресурсов (cgroups).
- Храните образы в частном реестре (Harbor, AWS ECR, GCR) для контроля версий и безопасности.
- Регулярно обновляйте контейнеры и зависимости, тестируя изменения в staging.
Безопасность Docker — минимальный чеклист
- Не запускайте контейнеры с флагом –privileged без крайней необходимости.
- Используйте официальные или проверенные базовые образы.
- Сканируйте образы на уязвимости (например, Trivy, Clair).
- Ограничивайте доступ к Docker сокету (/var/run/docker.sock).
- Применяйте механизмы контроля доступа в реестре образов.
Отладка: что делать, если что-то пошло не так
- Docker не запускается: проверьте статус службы
systemctl status docker- Процесс контейнера упал: смотрите логи контейнера
docker logs - Проблемы с сетью: проверьте docker network ls и docker network inspect.
- Ошибка доступа к сокету: проверьте группу docker и права на /var/run/docker.sock.
Когда Docker не подходит (контрпримеры)
- Если нужно полное разделение ядра и ОС — используйте виртуальные машины.
- На Windows с GUI-интенсивными приложениями контейнеры не всегда подходят.
- Если требуется сильная изоляция по безопасности на уровне гипервизора, контейнеры будут недостаточны.
Альтернативы и их плюсы/минусы
- Podman: демонструет совместимость с командами Docker CLI, работает без демона и по умолчанию безопаснее для rootless-сценариев.
- LXC/LXD: ближе к системе и даёт больше контроля над окружением, но сложнее в упаковке приложений.
- Vagrant + VM: полезно для воспроизводимости окружений, когда контейнеры не покрывают все требования.
Рекомендация: для локальной разработки и большинства CI задач Docker остаётся наиболее удобным выбором.
Советы для ARM-устройств (Raspberry Pi и т.п.)
- Используйте arch=arm64 или arch=armhf при добавлении репозитория.
- Проверяйте совместимость образов — многие образы предоставляют multi-arch теги.
- На слабых устройствах контролируйте лимиты памяти и CPU.
Критерии приёмки (как проверить корректность установки)
- docker -v возвращает ожидаемую версию.
- sudo docker run hello-world успешно выполняется и завершает работу.
- Обычный пользователь (в группе docker) может запускать docker ps без sudo.
- Служба docker стартует автоматически после перезагрузки.
Короткий SOP для установки (шпаргалка)
- sudo apt update
- sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- echo “deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable” | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- sudo apt update
- sudo apt-get install docker-ce docker-ce-cli containerd.io
- sudo groupadd docker && sudo usermod -aG docker $USER && newgrp docker
Роль‑ориентированные чек-листы
Разработчик:
- Установил Docker локально.
- Запустил приложение в контейнере и проверил логи.
- Создал Dockerfile и локально собрал образ.
DevOps:
- Настроил CI для сборки и пуша образов в приватный реестр.
- Ограничил ресурсы контейнеров и настроил мониторинг.
SRE:
- Настроил оркестрацию (Kubernetes) и политики безопасности.
- Обеспечил резервное копирование контейнерных данных.
Мини-глоссарий (1 строка на термин)
- Контейнер: изолированный процесс с зависимостями приложения.
- Docker Engine: основной компонент, управляющий контейнерами.
- Docker Hub: публичный реестр образов.
- GPG: механизм подписи пакетов для проверки подлинности.
Совместимость и миграция
- Для перехода с Docker на Podman обычно достаточно заменить CLI-утилиты и проверить CI-пайплайны.
- При миграции на Kubernetes потребуется описать сервисы в манифестах (Deployment, Service, ConfigMap).
Риски и смягчения
- Риск: компрометация /var/run/docker.sock даёт привилегии. Смягчение: ограничьте доступ и используйте механизмы RBAC.
- Риск: уязвимый базовый образ. Смягчение: сканируйте образы и подписывайте их.
Заключение
Это подробное руководство поможет быстро и безопасно установить Docker на Ubuntu 20.04, понять его базовые составляющие и организовать рабочий процесс. Docker ускоряет разработку и делает развёртывание воспроизводимым, но требует внимания к безопасности и управлению версиями образов.
Краткая инструкция:
- Добавьте репозиторий Docker и GPG-ключ.
- Установите docker-ce, docker-ce-cli и containerd.io.
- Проверьте установку и настройте запуск без sudo.
Если нужно, используйте альтернативы (Podman) или оркестрацию (Kubernetes) для продакшен-окружений.
Примечание: всегда проверяйте официальную документацию Docker при возникновении сомнений или при работе с другими версиями Ubuntu.
Похожие материалы
KDE Connect: связать Android и Linux
Как перейти от новичка к фотографу среднего уровня
Уведомления о камере в Windows 11
Ускорение передачи данных на внешние диски
Родительский контроль Xbox: настройка через Family Settings