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

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

7 min read DevOps Обновлено 25 Dec 2025
Установка и использование Docker на Linux
Установка и использование Docker на Linux

Логотип Docker и контейнерная символика

Быстрые ссылки

  • Установка 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 update
sudo 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/null
sudo apt-get update

Теперь установите Docker:

sudo apt-get install docker-ce docker-ce-cli containerd.io

Notes: при установке следите за тем, чтобы репозиторий соответствовал вашей архитектуре (amd64, arm64 и т.д.) и версии дистрибутива.

Fedora

Добавьте репозиторий Docker:

sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo

Установите Docker:

sudo dnf install docker-ce docker-ce-cli containerd.io

CentOS

Добавьте репозиторий Docker:

sudo yum -y install yum-utils
sudo 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

Compatibility 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:latest

Docker сначала попытается найти образ локально. Если он отсутствует, образ будет загружен с Docker Hub, после чего контейнер запустится и выведет приветственное сообщение.

Вывод команды hello-world в терминале

Если вы видите сообщение “Hello from Docker!”, значит установка работает.

Управление службой Docker

Docker состоит из двух ключевых компонентов — службы docker (Docker Engine) и runtime containerd. На системах с systemd их удобно проверять и управлять ими через systemctl.

Проверка статуса:

sudo systemctl status docker.service
sudo 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-pager

Troubleshooting: если служба падает из-за проблем с 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 --version

Alternative: на системах с 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

Инцидентный план и откат

Если контейнеры некорректно работают после обновления образов:

  1. Остановите проблемный сервис: docker-compose stop
  2. Перекатите на предыдущий образ: docker pull my-app:previous && docker-compose up -d
  3. Если проблема на уровне данных — переключитесь на резервный том или откат бэкапа.
  4. Проанализируйте логи и внесите исправления в CI-процесс.

Критерии приёмки

  • Контейнеры успешно запускаются на чистой машине с установленным Docker
  • Приложение отвечает по ожидаемым портам
  • Том для данных сохраняется после перезапуска контейнера
  • Логи приложений доступны и не загрязнены системными ошибками

Совместимость и миграция

  • Образы x86 не будут работать на ARM и наоборот — используйте мультиархивные образы (multi-arch).
  • При миграции на новую версию Docker проверяйте совместимость API и форматов конфигурации.

Compatibility matrix (кратко):

  • Debian/Ubuntu: официально поддерживаются
  • Fedora/CentOS/RHEL: поддерживаются с соответствующими репозиториями
  • Raspbian/ARM: доступны сборки для ARM

Мини-методология: как безопасно обновлять стек

  1. Соберите и протестируйте образ в локальном окружении
  2. Прогоните интеграционные тесты в staging
  3. Поднимите canary-версию в production
  4. Мониторьте метрики и логи, выполните откат при аномалиях

Частые ошибки и как их исправить

  • Ошибка: “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 — быстрое руководство для разработчиков и админов.

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

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

Как внести чек через телефон — пошаговое руководство
Банковские услуги

Как внести чек через телефон — пошаговое руководство

Включить Microsoft Defender Antivirus в Windows 10
Security

Включить Microsoft Defender Antivirus в Windows 10

Установка Connect в Windows 10
Windows

Установка Connect в Windows 10

Синхронизация браузеров: перенос закладок и паролей
Руководство

Синхронизация браузеров: перенос закладок и паролей

Трансляция Prime Video на Discord
Стриминг

Трансляция Prime Video на Discord

Карусель Instagram в Photoshop — пошагово
Дизайн

Карусель Instagram в Photoshop — пошагово