Установка и использование Docker на Linux

Быстрые ссылки
- Установить Docker
- Использование Docker без sudo
- Проверка установки Docker
- Управление службой Docker
- Добавить Docker Compose
- Создание простого docker-compose.yml
- Контроль и откат
- Резюме
Docker предоставляет всё необходимое для сборки и запуска контейнеров на вашей Linux-системе. Контейнеры — это лёгкие изолированные среды, похожие на виртуальные машины, но использующие ядро хоста. Образы контейнеров переносимы и могут запускаться на x86/x64 и ARM платформах.
В этой статье рассматривается установка и базовая работа на системах с пакетным менеджером apt (Debian/Ubuntu). Для Fedora/CentOS указаны соответствующие команды. Инструкции, специфичные для других дистрибутивов, см. в официальной документации Docker.
Что такое Docker и Docker Compose — одно предложение
Docker — инструмент для упаковки приложений в контейнеры; Docker Compose — утилита для описания и запуска множественных связанных контейнеров через YAML-файл.
Установка Docker
Вы можете установить Docker через стандартный менеджер пакетов вашей системы. Обычно требуется добавить репозиторий Docker, установить ключ GPG и обновить списки пакетов.
Debian / Ubuntu
- Обновите индексы пакетов и установите зависимости для HTTPS-репозиториев:
sudo apt-get updatesudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release- Добавьте GPG-ключ Docker в систему ключей APT:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg- Добавьте репозиторий Docker с использованием ключа и обновите списки пакетов:
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/nullsudo apt-get update- Установите Docker Engine и сопутствующие пакеты:
sudo apt-get install docker-ce docker-ce-cli containerd.ioСоветы и пояснения:
- $(lsb_release -cs) подставляет codename вашей версии Ubuntu/Debian (например, focal, bionic).
- Если у вас ARM-платформа, измените arch=amd64 на нужную архитектуру или используйте официальные инструкции для ARM.
Fedora
- Установите плагины DNF и добавьте репозиторий Docker:
sudo dnf -y install dnf-plugins-coresudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo- Установите Docker:
sudo dnf install docker-ce docker-ce-cli containerd.ioCentOS
- Установите утилиты yum и добавьте репозиторий:
sudo yum -y install yum-utilssudo yum-config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo- Установите Docker:
sudo yum install docker-ce docker-ce-cli containerd.ioПримечание: для старых версий CentOS/RHEL может потребоваться включить репозитории EPEL и дополнительные шаги по зависимости.
Использование Docker без sudo
По умолчанию демон Docker работает от root. Чтобы не писать sudo перед каждой командой docker, добавьте своего пользователя в группу docker:
sudo usermod -aG docker $USERДалее выйдите из сессии и зайдите снова, либо выполните:
newgrp dockerВажно: добавление пользователя в группу docker даёт привилегии, близкие к root в контексте Docker — это удобство, но и риск с безопасностью. Оцените, подходит ли это в вашем окружении.
Проверка установки Docker
Проверьте работу Docker с помощью официального минимального образа hello-world:
docker run hello-world:latestDocker сначала проверит локальные образы, затем загрузит образ из Docker Hub и запустит контейнер, который выведет приветственное сообщение.

Ожидаемый результат: сообщение с подтверждением успешного запуска контейнера. Если видите ошибки сети или 403/401 при pull, проверьте доступ к интернету и прокси/файрвол.
Критерии приёмки:
- Команда docker –version возвращает версию клиента.
- docker run hello-world выполняется без ошибок и показывает сообщение.
- Служба docker активна (см. ниже).
Управление службой Docker
Docker состоит из двух ключевых компонентов: сервиса docker (демон Docker Engine) и containerd (контейнерный рантайм). Управлять ими можно через systemd.
Проверить статус:
sudo systemctl status docker.servicesudo systemctl status containerd.serviceЗапустить, остановить, перезапустить:
sudo systemctl start docker.service
sudo systemctl stop docker.service
sudo systemctl restart docker.serviceПолезные команды для отладки:
- journalctl -u docker.service –since “1 hour ago”
- sudo dockerd –debug (запуск демона в отладочном режиме для временной диагностики)
Если Docker не запускается, проверьте:
- совместимость версии kernel и cgroup (для некоторых старых систем требуется cgroup v1)
- наличие конфликтующих процессов на портах
- права на /var/lib/docker
Добавление Docker Compose
Docker Compose — отдельный исполняемый файл. Пакеты дистрибутива могут включать устаревшие версии, поэтому часто лучше скачать бинарник прямо из релизов GitHub.
- На странице релизов Compose найдите актуальную версию. Подставьте её в команду ниже вместо 1.29.0:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose- Сделайте файл исполняемым:
sudo chmod +x /usr/local/bin/docker-composeПроверьте версию:
docker-compose --versionАльтернативы:
- Для современных стеков рекомендованы встроенный docker compose (плагин) или инструмент docker-compose v2, распространяемый как плагин под именем docker-compose в пакете Docker.
Создание простого docker-compose.yml
Создайте файл docker-compose.yml в каталоге проекта. Ниже — корректный и выверенный пример для PHP+Apache и MySQL:
version: "3.8"
services:
app:
image: php:8.0-apache
environment:
MYSQL_SERVER: mysql
MYSQL_USERNAME: root
MYSQL_PASSWORD: example
ports:
- "${PORT:-80}:80"
restart: unless-stopped
depends_on:
- mysql
mysql:
image: mysql:8.0
expose:
- "3306"
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- mysql-data:/var/lib/mysql
restart: unless-stopped
volumes:
mysql-data:Ключевые моменты:
- services — определяет контейнеры стека.
- image — имя образа, которое будет подтянуто из Docker Hub или локального реестра.
- окружение задаётся в разделе environment.
- порты можно задавать как “HOST:CONTAINER”; используется синтаксис с переменной окружения ${PORT:-80}, где 80 — значение по умолчанию.
- volumes обеспечивают персистентность данных.
Запуск и управление:
- docker-compose up -d — запуск в фоне.
- docker-compose ps — список контейнеров стека.
- docker-compose stop — остановка.
- docker-compose down — остановка и удаление контейнеров (с флагом -v удаляются тома).
Критерии приёмки для docker-compose:
- docker-compose up -d завершает процесс без ошибок.
- Приложение отвечает по заданному порту.
- Данные MySQL сохраняются в томе после перезапуска.
Полезные шаблоны и чек-листы
Чек-лист для разработчика:
- docker –version показал ожидаемую версию.
- docker run hello-world выполнился.
- Добавлен dockerignore и Dockerfile в проект.
- docker-compose.yml корректно указан и проверен локально.
Чек-лист для оператора (DevOps):
- Службы docker и containerd работают на node.
- Мониторинг контейнеров и логов настроен.
- Резервные копии томов критичных сервисов присутствуют.
- Политика обновлений образов и автоперезапуска определена.
Шаблон уведомления об обновлении Docker (короткий):
- Цель: обновление Docker Engine до версии X.
- Время простоя: Y минут.
- План отката: возврат пакета к версии Z и перезапуск сервисов.
Когда Docker может не подойти
Контейнеризация не всегда оптимальна:
- Для полноценных виртуальных машин с изолированными ядрами и разными ОС лучше использовать VM.
- Для очень простых скриптов с редкой эксплуатацией накладные расходы от образов могут быть избыточны.
- Если в приложении используются специфические возможности ядра или нестандартные модули, контейнеры могут быть ограничены.
Альтернативы:
- Podman — демон без постоянного root-дэмена, совместимая замена Docker CLI в большинстве задач.
- LXC/LXD — для более «унифицированных» системных контейнеров.
- Виртуальные машины (KVM, VirtualBox) — для полной изоляции ОС.
Безопасность и рекомендации
- Обновляйте Docker Engine и containerd по мере выхода критических исправлений.
- Минимизируйте количество привилегий в контейнерах (avoid: –privileged).
- Обновляйте образы базовых слоёв и проверяйте цифровые подписи, если доступно.
- Не запускайте неизвестные образы из непроверенных источников в production.
Руководство по откату и инцидентный план
Короткий план отката после проблемной установки или обновления:
- Остановите приложение: sudo systemctl stop docker.service
- Сохраните текущие логи: journalctl -u docker.service -b > /tmp/docker-log.txt
- Верните пакет Docker к предыдущей версии через пакетный менеджер или из резервной копии.
- Перезапустите службу и проверьте работоспособность контейнеров.
- При необходимости восстановите данные из томов или резервных копий.
Диагностика распространённых ошибок
- Проблема: «permission denied» при docker run — проверьте группу docker и права на сокет /var/run/docker.sock.
- Проблема: «Cannot connect to the Docker daemon» — проверьте, работает ли systemctl status docker.
- Проблема: невозможность скачать образ — проверьте настройки прокси и доступ к Docker Hub.
Decision tree для выбора способа установки
flowchart TD
A[Нужен Docker на сервере?] -->|Да| B{Система поддерживает apt?
}
B -->|Да| C[Использовать официальные репозитории Docker для apt]
B -->|Нет| D{Использует dnf/yum?}
D -->|dnf| E[Добавить репо Docker для Fedora и установить]
D -->|yum| F[Добавить репо Docker для CentOS и установить]
A -->|Нет| G[Не устанавливать Docker]Полезные команды-«шпаргалки”
- Просмотреть контейнеры: docker ps -a
- Удалить все остановленные контейнеры: docker container prune
- Удалить неиспользуемые образы: docker image prune -a
- Просмотреть логи контейнера: docker logs
- Подключиться к работающему контейнеру: docker exec -it
/bin/bash
Совместимость и миграция
- При миграции между машинами учитывайте версии Docker Engine и формат томов.
- Для переносимости используйте docker save / docker load для образов и дампы баз данных для данных.
Резюме
Docker даёт простой путь к упаковке и запуску приложений в изолированных контейнерах. Для большинства случаев достаточно установить docker-ce, cli и containerd, добавить пользователя в группу docker, проверить работу командой hello-world и при желании добавить docker-compose для управления стеком. Помните про безопасность, резервное копирование томов и механизм отката при обновлениях.
Important: перед развёртыванием в production протестируйте конфигурации, убедитесь в политике обновлений и наличии резервного копирования.
Контрольные выводы:
- Установка: добавить репозиторий, установить пакеты.
- Проверка: docker run hello-world.
- Оркестровка: docker-compose для многоконтейнерных стеков.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone