Установка Docker и Docker Compose на Linux
Оглавление
- Почему стоит использовать Docker в Linux
- Краткие определения терминов
- Установка Docker и Docker Compose на Ubuntu
- Установка Docker и Docker Compose на Debian
- Установка Docker и Docker Compose на Fedora
- Установка Docker и Docker Compose на Red Hat Enterprise Linux
- Установка Docker и Docker Compose на Arch Linux
- Развёртывание первого контейнера (Nginx)
- Использование Docker Compose — пример и расширенные опции
- Проверка установки и отладка
- Безопасность и жёсткая настройка
- Миграция, совместимость и альтернативы
- Критерии приёмки
- Резюме
Почему стоит использовать Docker в Linux
Docker — платформа контейнеризации, которая упрощает развёртывание приложений в переносимых и изолированных единицах (контейнерах). Контейнеры содержат все зависимости приложения и позволяют запускать сервисы одинаково в разных окружениях: на локальной машине, на сервере или в облаке.
Важные преимущества:
- Изоляция зависимостей: каждая служба работает в собственном окружении.
- Повторяемость: один и тот же образ даёт одинаковое поведение везде.
- Быстрые откаты и обновления: версии образов легко менять.
- Более простая миграция сервисов между хостами.
Важно: контейнеры — не виртуальные машины. Контейнеры используют ядро хост‑системы и значительно легче по ресурсам.
Краткие определения терминов
- Образ (image): снапшот файловой системы и метаданных, из которого создаётся контейнер.
- Контейнер (container): запускаемый экземпляр образа.
- Docker Daemon (dockerd): фоновый процесс, управляющий контейнерами.
- Docker CLI (docker): интерфейс командной строки для управления Docker.
- Docker Compose: инструмент для описания и запуска многоконтейнерных приложений через YAML‑файл.
Важные примечания
Важно: команды ниже проверены для типичных систем и архитектуры amd64. На ARM (raspi, some laptops) используйте соответствующие образы и указывайте arch в репозитории.
Примечание: многие команды требуют прав суперпользователя. Чтобы не вводить sudo перед каждой командой, добавьте пользователя в группу docker и перелогиньтесь (см. разделы ниже).
Установка Docker на Ubuntu
Ниже — надёжный рекомендуемый способ установки, с автоматическим определением кодового имени релиза. Команды исправляют распространённые опечатки в примерах и используют безопасное хранение GPG‑ключа.
- Проверка отпечатка ключа подписи Docker (фингерпринт может измениться — сравните с официальным сайтом):
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --show-keys --with-fingerprint- Сохраните ключ в /etc/apt/keyrings и установите права:
sudo mkdir -p /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- Добавьте репозиторий Docker. Рекомендуется автоматически подставлять кодовое имя релиза (lsb_release -cs):
echo "deb [arch=amd64 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- Обновите индекс пакетов и установите Docker и плагины (включая Docker Compose):
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin- Добавьте текущего пользователя в группу docker, чтобы запускать команды без sudo:
sudo usermod -aG docker $USERПерезайдите в сеанс (logout/login) или выполните команду newgrp docker для немедленных привилегий.
Проверка:
docker --version
docker run hello-worldУстановка Docker на Debian
Процесс похож на Ubuntu, с учётом репозитория для Debian. Если вы используете конкретную ветку (например, bookworm), можно указать её в репозитории.
- Сохраните ключ:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg- Добавьте репозиторий. Для Debian можно явно указывать кодовое имя, например bookworm или использовать $(lsb_release -cs):
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null- Обновите и установите пакеты:
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin- Добавьте пользователя в группу docker и перезапустите сеанс:
sudo usermod -aG docker YOUR_USERNAMEПроверьте работу:
docker --version
docker run hello-worldУстановка Docker на Fedora
Fedora использует dnf. Команды ниже подключают официальный репозиторий Docker и устанавливают пакеты.
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginПодтвердите при появлении запроса о ключе (отпечаток репозитория может меняться — сверяйте с официальной страницей).
Запустите и включите сервис:
sudo systemctl enable --now docker.service
sudo usermod -aG docker $USERПерелогиньтесь и проверьте:
docker run hello-worldУстановка Docker на Red Hat Enterprise Linux (RHEL)
RHEL близок к Fedora, но с долгосрочной поддержкой. Официальный репозиторий Docker доступен для RHEL:
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginЕсли нужно установить конкретную версию Docker, сначала просмотрите доступные пакеты:
sudo dnf list docker-ce --showduplicatesЗатем установите выбранную версию, подставив номер:
version=1:24.0.1-1
sudo dnf install -y docker-ce-${version} docker-ce-cli-${version} containerd.io docker-buildx-plugin docker-compose-plugin(Вместо примера версии укажите актуальное значение из вывода списка.)
Включите сервис и добавьте пользователя в группу docker:
sudo systemctl enable --now docker.service
sudo usermod -aG docker YOUR_USERNAMEПроверьте:
docker --version
docker run hello-worldУстановка Docker на Arch Linux
В Arch пакеты Docker находятся в официальных репозиториях community, поэтому установка самая простая:
sudo pacman -Syu --noconfirm docker docker-compose containerd docker-buildx
sudo usermod -aG docker $USER
sudo systemctl enable --now docker.serviceПерезапустите сеанс и проверьте docker run hello-world.
Развёртывание первого контейнера: Nginx статический сайт
Ниже — пошаговый пример, как собрать образ для простого статического сайта и запустить его локально.
- Создайте рабочую папку и скопируйте сайт:
mkdir -p ~/docker-nginx && cd ~/docker-nginx
cp -r ~/html-site ./html-site- Создайте Dockerfile:
# Dockerfile
FROM nginx
COPY html-site /usr/share/nginx/html- Постройте образ и запустите контейнер:
docker build -t static-nginx .
docker run --name my-nginx-website -p 8080:80 -d static-nginxОткройте http://localhost:8080 и проверьте страницу.
Использование Docker Compose для простого сайта
Создайте файл docker-compose.yml:
services:
nginx:
container_name: my-nginx-website
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:80"
restart: unless-stopped
volumes:
- ./html-site:/usr/share/nginx/html:roЗапустите сервис:
docker compose up -dCompose делает конфигурацию воспроизводимой и удобной для развития (особенно когда сервисов несколько).
Расширенные варианты Compose и шаблоны
Пример Compose с базовыми сервисами (Nginx + app + база данных):
services:
web:
build: ./web
ports:
- "8080:80"
restart: on-failure
depends_on:
- app
app:
image: my-app:latest
environment:
- DATABASE_URL=mysql://user:pass@db:3306/dbname
networks:
- backend
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
networks:
backend:Советы: используйте restart политики, тома для постоянных данных и отдельные сети для разграничения трафика.
Проверка установки и отладка
Полезные команды для диагностики:
systemctl status docker.service
journalctl -u docker.service --since "1 hour ago"
docker --version
docker info
docker ps -a
docker logs CONTAINER_ID
docker inspect CONTAINER_IDЕсли после добавления в группу docker команды всё ещё требуют sudo, выполните newgrp docker или перелогиньтесь. Для rootless Docker существуют отдельные инструкции в официальной документации.
Чеклист для роли: системный администратор / разработчик / начинающий
- Системный администратор:
- Настроить автоматический запуск systemd и мониторинг
- Ограничить доступ к сокету Docker (уменьшить число пользователей в группе docker)
- Включить SELinux/AppArmor и настроить профиль
- Разработчик:
- Писать Dockerfile с минимальным базовым образом
- Использовать многослойную сборку (multistage) для уменьшения размера
- Тестировать локально через docker compose
- Начинающий:
- Убедиться, что docker run hello-world работает
- Изучить команды: ps, images, logs, exec
Безопасность и жёсткая настройка
Рекомендации по безопасности (общие принципы, не зависят от дистрибутива):
- Не добавляйте лишних пользователей в группу docker: доступ к сокету Docker эквивалентен root.
- Сканируйте образы на уязвимости (docker scan или внешние инструменты).
- Запускайте контейнеры под непривилегированным пользователем внутри образа.
- Используйте политики seccomp и AppArmor/SELinux для ограничения syscalls.
- Настройте read‑only файловые системы для контейнеров, где это возможно.
- Храните секреты вне Dockerfile: используйте секреты Docker, Vault или переменные окружения через CI/CD.
- Применяйте обновления для host OS и контейнерных runtime.
Пример простого /etc/docker/daemon.json для базовой жёсткой настройки:
{
"userns-remap": "default",
"no-new-privileges": true,
"icc": false,
"live-restore": true
}(Корректируйте параметры под свои требования — некоторые опции меняют совместимость с существующими контейнерами.)
Миграция, совместимость и альтернативы
- Альтернатива: Podman — демон‑less runtime, совместимый с большинством CLI команд Docker; хорош для сред с повышенными требованиями безопасности.
- Для Kubernetes используйте контейнерные runtime, совместимые с CRI (containerd, cri-o).
- При переносе между хостами переносите тома и конфигурации: docker save / docker load для образов, rsync или tar для томов.
Критерии приёмки
- docker –version возвращает установленную версию Docker.
- docker run hello-world успешно запускается и выводит сообщение.
- docker compose up -d стартует описанные сервисы без ошибок.
- Сервис доступен на ожидаемом порту (например, http://localhost:8080 для Nginx).
- Пользователь, добавленный в группу docker, может управлять контейнерами без sudo после релогина.
Частые проблемы и варианты решения
- Проблема: команда требует sudo, хотя пользователь в группе docker — Решение: перелогиньтесь или выполните
newgrp docker. - Проблема: порт уже занят — Решение: проверьте
ss -tulpn | grep :8080, освободите порт или перенастройте Docker‑порт. - Проблема: образы не тянутся из Docker Hub — Решение: проверьте сетевой доступ, прокси и credentials (
docker login). - Проблема: контейнеры падают сразу после запуска — Решение:
docker logs CONTAINER_IDиdocker inspectдля поиска ошибок запуска.
Мини‑методология установки (короткий SOP)
- Проверить совместимость хоста (архитектура, ядро, версия ОС).
- Добавить официальный репозиторий и ключи GPG.
- Установить docker, docker-compose-plugin и buildx.
- Добавить пользователя в группу docker.
- Запустить и настроить systemd‑юнит.
- Запустить тестовый контейнер и проверить логи.
- Настроить мониторинг и политику безопасности.
Тестовые сценарии и приёмочные критерии
- TC1: Установка пакетов завершается без ошибок — критерий: код возврата 0, пакеты присутствуют.
- TC2: docker run hello-world завершён успешно — критерий: вывод подтверждающего сообщения.
- TC3: Приложение (Nginx) отвечает на HTTP — критерий: HTTP 200 на /.
- TC4: Перелогин после добавления в группу docker — критерий: команда docker ps выполняется без sudo.
Совместимость и заметки по версиям
- Docker регулярно обновляется: при использовании RHEL/CentOS обратите внимание на совместимость с системной версией kernel и glibc.
- Для production‑кластеров рассмотрите установку containerd напрямую и управление контейнерами через orchestration (Kubernetes).
Локальные рекомендации (Россия и СНГ)
- Если вы используете зеркала пакетов провайдера/организации, замените ссылки на официальные зеркала в конфигурации apt/dnf для ускорения загрузки.
- При работе в корпоративной сети проверьте требования к прокси и сертификатам.
Резюме
Docker делает развёртывание приложений в Linux повторяемым и контролируемым. Установка отличается по дистрибутивам, но основные шаги — добавить репозиторий, установить пакеты, запустить службу и проверить работу контейнеров — остаются прежними. Всегда проверяйте отпечатки GPG, разделяйте привилегии и применяйте меры безопасности.
Ключевые ссылки: официальная документация Docker (docker.com), Docker Hub для поиска образов.
Image credit: Mohammad Rahmani via Unsplash. Все изменения и скриншоты — Ramces Red.











Похожие материалы
Как скачать и установить Windows 8.1 и Windows 10 бесплатно
Bluetooth между Arduino и Windows 8.1/10
Windows 10 KB3201845: сбой мыши и клавиатуры
Безопасный обмен файлами и хранение с Sync
Гаджеты для тепла зимой