Как установить и использовать Docker на Linux

Быстрые ссылки
Установка Docker
Использование Docker без sudo
Проверка установки Docker
Управление службой Docker
Добавление Docker Compose
Создание простого файла docker-compose.yml
Резюме
Введение
Docker даёт всё необходимое для сборки и запуска контейнеров на вашей системе Linux. Контейнеры — это лёгкие изолированные окружения, похожие на виртуальные машины, но использующие ядро хоста. Они позволяют создавать переносимые образы приложений, которые работают на ядре операционной системы хоста.
Docker доступен для Debian, Ubuntu, Fedora, CentOS и Raspbian; производные этих дистрибутивов также поддерживаются. Для большинства платформ Docker предлагает сборки для x86/x64 и ARM. В этом руководстве мы используем систему на базе Debian и менеджер пакетов apt. Инструкции для других дистрибутивов тоже приведены.
Compose — это отдельный инструмент, который помогает описать и запустить стек из нескольких контейнеров через YAML-файл. Compose распределяется отдельно от Docker, поэтому устанавливайте Docker перед Compose.
Important: если вы используете контейнеры в продакшн-среде, ознакомьтесь с разделом про безопасность ниже.
Установка Docker
Вы можете установить Docker через менеджер пакетов вашего дистрибутива. Общая последовательность: добавить ключ репозитория, добавить репозиторий Docker, обновить списки пакетов и установить пакеты docker-ce, docker-ce-cli и containerd.io.
Debian/Ubuntu
Начните с установки зависимостей, необходимых для добавления репозитория:
sudo apt-get updatesudo apt-get 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.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/nullsudo apt-get updateТеперь установите Docker:
sudo apt-get install docker-ce docker-ce-cli containerd.ioNotes: при установке следите за тем, чтобы репозиторий соответствовал вашей архитектуре (amd64, arm64 и т.д.) и версии дистрибутива.
Fedora
Добавьте репозиторий 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
Добавьте репозиторий Docker:
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.ioCompatibility note: на некоторых старых релизах CentOS/Red Hat потребуется дополнительная настройка kernel-опций или обновление пакетов зависимостей.
Использование Docker без sudo
Docker демон (dockerd) работает от root, поэтому по умолчанию команды docker требуют sudo. Чтобы запускать docker без sudo, добавьте пользователя в группу docker:
sudo usermod -aG docker $USERПосле этого выйдите из сессии и зайдите заново, либо выполните:
newgrp dockerТеперь docker-команды можно выполнять без префикса sudo. Important: добавление в группу docker даёт права, схожие с root для управления контейнерами и образами — используйте с осторожностью.
Проверка установки Docker
Проверьте установку с помощью минимального образа hello-world:
docker run hello-world:latestDocker сначала попытается найти образ локально. Если он отсутствует, образ будет загружен с Docker Hub, после чего контейнер запустится и выведет приветственное сообщение.

Если вы видите сообщение “Hello from Docker!”, значит установка работает.
Управление службой Docker
Docker состоит из двух ключевых компонентов — службы docker (Docker Engine) и runtime containerd. На системах с systemd их удобно проверять и управлять ими через systemctl.
Проверка статуса:
sudo systemctl status docker.servicesudo systemctl status containerd.serviceОстановка Docker (освобождение ресурсов, временная приостановка работы):
sudo systemctl stop docker.serviceЗапуск/перезапуск:
sudo systemctl start docker.service
sudo systemctl restart docker.serviceЕсли Docker не стартует, смотрите журналы:
sudo journalctl -u docker.service --no-pagerTroubleshooting: если служба падает из-за проблем с cgroup или конфликтов с другими контейнерными рантаймами, проверьте конфигурацию /etc/docker/daemon.json и настройки kernel.
Добавление Docker Compose
docker-compose — отдельный исполняемый файл. Пакетные менеджеры дистрибутивов могут содержать старые версии, поэтому часто удобнее скачивать бинарник напрямую с релизов GitHub.
Перейдите на страницу релизов Docker Compose и запомните номер последней версии. Подставьте актуальную версию вместо примера ниже:
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 --versionAlternative: на системах с Python вы можете установить docker-compose через pip, но это не всегда рекомендуется для продакшна.
Создание простого docker-compose.yml
Файл docker-compose.yml описывает контейнеры, сети и тома вашего стека. Контейнеры, объявленные в одном файле, автоматически оказываются в одной сети и могут обращаться друг к другу по имени сервиса.
Пример простого файла stack, запускающего 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:/var/lib/mysql
restart: unless-stopped
volumes:
mysql:Запуск стека в фоне:
docker-compose up -dОстановка:
docker-compose stopУдаление контейнеров и сети стека:
docker-compose downКлючевые моменты: services — контейнеры стека; image — образ; environment — переменные окружения; ports — привязки портов; volumes — постоянные тома; depends_on — порядок старта.
Примеры и шаблоны
Мини-шаблон Dockerfile для простого PHP-приложения:
FROM php:8.0-apache
COPY . /var/www/html/
RUN chown -R www-data:www-data /var/www/html
EXPOSE 80
CMD ["apache2-foreground"]Cheat sheet основных команд:
- docker build -t my-app:latest . — собрать образ
- docker run -d –name my-app -p 80:80 my-app:latest — запустить контейнер
- docker ps — список запущенных контейнеров
- docker images — списки образов
- docker rm, docker rmi — удалить контейнер/образ
Безопасность и лучшие практики
- Ограничьте количество пользователей в группе docker — она даёт практически root-права на систему через контейнеры.
- Запускайте критические контейнеры в ограниченных пользовательских пространствах (non-root внутри контейнера), избегайте запуска служб от root, когда это возможно.
- Подписывайте и проверяйте образы (Content Trust) для продакшн.
- Ограничивайте ресурсы контейнеров: cpu_shares, cpus и memory.
- Используйте минимальные базовые образы (alpine, distroless) для уменьшения поверхности атак.
- Храните секреты вне docker-compose.yml, используйте Secret менеджеры или Docker Secrets (в swarm/stack).
Security hardening checklist:
- Включить автоматические обновления хоста
- Минимизировать набор установленных пакетов в образах
- Настроить SELinux/AppArmor профили
- Использовать readonly root filesystem там, где возможно
Альтернативы и когда Docker не подходит
- Podman: без демона, совместим с большинством образов Docker; подойдёт, когда важна модель rootless.
- systemd-nspawn: полезен для контейнеризации системных служб и образов, близких к дистрибутиву.
- Kubernetes: когда требуется оркестрация на уровне кластера, масштабирование и самовосстановление.
Когда Docker не подойдёт:
- Нужна полная виртуализация (с собственной версией ядра) — выбирайте VM.
- Жёсткие требования к производительности на пользовательское пространство, где overhead контейнеризации неприемлем.
Роль‑ориентированные чек‑листы
Для разработчика:
- Собрать локальный образ
- Запустить контейнер с пробросом портов
- Проверить логи: docker logs
- Написать Dockerfile и docker-compose.yml
Для системного администратора:
- Убедиться в наличии политик бэкапа томов
- Настроить мониторинг контейнеров и ресурсов
- Настроить ротацию логов
- Настроить firewall и политики доступа к сокету docker
Для DevOps-инженера:
- CI/CD: сборка образов в контейнерном окружении
- Сканы безопасности образов
- Автоматическое развёртывание в staging/production
Инцидентный план и откат
Если контейнеры некорректно работают после обновления образов:
- Остановите проблемный сервис: docker-compose stop
- Перекатите на предыдущий образ: docker pull my-app:previous && docker-compose up -d
- Если проблема на уровне данных — переключитесь на резервный том или откат бэкапа.
- Проанализируйте логи и внесите исправления в CI-процесс.
Критерии приёмки
- Контейнеры успешно запускаются на чистой машине с установленным Docker
- Приложение отвечает по ожидаемым портам
- Том для данных сохраняется после перезапуска контейнера
- Логи приложений доступны и не загрязнены системными ошибками
Совместимость и миграция
- Образы x86 не будут работать на ARM и наоборот — используйте мультиархивные образы (multi-arch).
- При миграции на новую версию Docker проверяйте совместимость API и форматов конфигурации.
Compatibility matrix (кратко):
- Debian/Ubuntu: официально поддерживаются
- Fedora/CentOS/RHEL: поддерживаются с соответствующими репозиториями
- Raspbian/ARM: доступны сборки для ARM
Мини-методология: как безопасно обновлять стек
- Соберите и протестируйте образ в локальном окружении
- Прогоните интеграционные тесты в staging
- Поднимите canary-версию в production
- Мониторьте метрики и логи, выполните откат при аномалиях
Частые ошибки и как их исправить
- Ошибка: “permission denied” при доступе к /var/run/docker.sock — проверьте группу docker и права сокета.
- Проблема: контейнеры падают на старте — проверьте переменные окружения, зависимости и тома.
- Сеть недоступна между сервисами — проверьте имена сервисов и сеть docker-compose.
Небольшая галерея крайних случаев
- Rootless Docker/Podman полезен на shared-хостингах.
- Ограничение памяти на контейнер может предотвратить OOM и падение хоста.
- Некорректные тома при монтировании хост-путей приводят к пересмешению прав и владения.
Словарь в одну строку
- Контейнер: изолированный процесс с собственной файловой системой и сетью.
- Образ: неизменяемый шаблон, из которого создаются контейнеры.
- Docker Daemon: фоновая служба, управляющая контейнерами.
- Docker Compose: инструмент для описания и запуска multi-container приложений.
FAQ
Q: Нужно ли удалять старые образы? A: Да, время от времени используйте docker image prune или docker system prune для очистки дискового пространства.
Q: Можно ли запускать Docker без systemd? A: Да, но точные шаги зависят от init-системы; большинство современных дистрибутивов используют systemd.
Q: Как передавать секреты в Compose? A: Используйте Docker Secrets (в swarm) или внешний секрет-менеджер; не храните секреты в git.
Краткое резюме
- Docker предлагает лёгкую контейнеризацию приложений и совместим с большинством дистрибутивов Linux.
- Установка требует добавления репозитория и установки пакетов docker-ce, docker-ce-cli, containerd.io.
- Docker Compose упрощает запуск мультиконтейнерных стеков через YAML-файл.
- Соблюдайте практики безопасности: минимальные образы, управление доступом и мониторинг.
Social preview suggestion: Установка и базовое использование Docker на Linux — быстрое руководство для разработчиков и админов.
Похожие материалы
Как внести чек через телефон — пошаговое руководство
Включить Microsoft Defender Antivirus в Windows 10
Установка Connect в Windows 10
Синхронизация браузеров: перенос закладок и паролей
Трансляция Prime Video на Discord