Гид по технологиям

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

7 min read DevOps Обновлено 03 Dec 2025
Установка Docker и Docker Compose на Linux
Установка 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‑ключа.

  1. Проверка отпечатка ключа подписи Docker (фингерпринт может измениться — сравните с официальным сайтом):
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --show-keys --with-fingerprint
  1. Сохраните ключ в /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
  1. Добавьте репозиторий 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
  1. Обновите индекс пакетов и установите 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
  1. Добавьте текущего пользователя в группу docker, чтобы запускать команды без sudo:
sudo usermod -aG docker $USER

Перезайдите в сеанс (logout/login) или выполните команду newgrp docker для немедленных привилегий.

Проверка:

docker --version
docker run hello-world

Установка Docker на Debian

Процесс похож на Ubuntu, с учётом репозитория для Debian. Если вы используете конкретную ветку (например, bookworm), можно указать её в репозитории.

  1. Сохраните ключ:
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
  1. Добавьте репозиторий. Для 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
  1. Обновите и установите пакеты:
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin
  1. Добавьте пользователя в группу 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 статический сайт

Ниже — пошаговый пример, как собрать образ для простого статического сайта и запустить его локально.

  1. Создайте рабочую папку и скопируйте сайт:
mkdir -p ~/docker-nginx && cd ~/docker-nginx
cp -r ~/html-site ./html-site
  1. Создайте Dockerfile:
# Dockerfile
FROM nginx
COPY html-site /usr/share/nginx/html
  1. Постройте образ и запустите контейнер:
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 -d

Compose делает конфигурацию воспроизводимой и удобной для развития (особенно когда сервисов несколько).

Расширенные варианты 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)

  1. Проверить совместимость хоста (архитектура, ядро, версия ОС).
  2. Добавить официальный репозиторий и ключи GPG.
  3. Установить docker, docker-compose-plugin и buildx.
  4. Добавить пользователя в группу docker.
  5. Запустить и настроить systemd‑юнит.
  6. Запустить тестовый контейнер и проверить логи.
  7. Настроить мониторинг и политику безопасности.

Тестовые сценарии и приёмочные критерии

  • 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.

Фотография экрана монитора с файлом Docker Compose.

Терминал с запущенными контейнерами Docker для поддержки Shlink.

Терминал, подсвечивающий отпечаток ключа подписи Docker CE.

Терминал, показывающий последнюю доступную версию Docker в репозитории.

Терминал, подсвечивающий запрос подтверждения ключа при установке в Fedora.

Терминал с контейнером hello-world в Fedora Linux.

Терминал, показывающий доступные версии Docker в RHEL.

Терминал с примером пониженной версии Docker в RHEL.

Терминал с приглашением установки Docker в Arch Linux.

Терминал, показывающий hello-world контейнер в Arch Linux.

Страница образа Docker для Nginx на Docker Hub.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как скачать и установить Windows 8.1 и Windows 10 бесплатно
Windows

Как скачать и установить Windows 8.1 и Windows 10 бесплатно

Bluetooth между Arduino и Windows 8.1/10
Разработка

Bluetooth между Arduino и Windows 8.1/10

Windows 10 KB3201845: сбой мыши и клавиатуры
Windows

Windows 10 KB3201845: сбой мыши и клавиатуры

Безопасный обмен файлами и хранение с Sync
Облачное хранилище

Безопасный обмен файлами и хранение с Sync

Гаджеты для тепла зимой
Гаджеты

Гаджеты для тепла зимой

Ошибка «нет прав доступа» в Word — как исправить
Microsoft Word

Ошибка «нет прав доступа» в Word — как исправить