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

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

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

Логотип Docker: иконка кит-контейнера

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

  • Установить 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

  1. Обновите индексы пакетов и установите зависимости для HTTPS-репозиториев:
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
  1. Добавьте GPG-ключ Docker в систему ключей APT:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. Добавьте репозиторий 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/null
sudo apt-get update
  1. Установите 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

  1. Установите плагины DNF и добавьте репозиторий Docker:
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
  1. Установите Docker:
sudo dnf install docker-ce docker-ce-cli containerd.io

CentOS

  1. Установите утилиты yum и добавьте репозиторий:
sudo yum -y install yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
  1. Установите 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:latest

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

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

Ожидаемый результат: сообщение с подтверждением успешного запуска контейнера. Если видите ошибки сети или 403/401 при pull, проверьте доступ к интернету и прокси/файрвол.

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

  • Команда docker –version возвращает версию клиента.
  • docker run hello-world выполняется без ошибок и показывает сообщение.
  • Служба docker активна (см. ниже).

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

Docker состоит из двух ключевых компонентов: сервиса docker (демон Docker Engine) и containerd (контейнерный рантайм). Управлять ими можно через systemd.

Проверить статус:

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

  1. На странице релизов 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
  1. Сделайте файл исполняемым:
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.

Руководство по откату и инцидентный план

Короткий план отката после проблемной установки или обновления:

  1. Остановите приложение: sudo systemctl stop docker.service
  2. Сохраните текущие логи: journalctl -u docker.service -b > /tmp/docker-log.txt
  3. Верните пакет Docker к предыдущей версии через пакетный менеджер или из резервной копии.
  4. Перезапустите службу и проверьте работоспособность контейнеров.
  5. При необходимости восстановите данные из томов или резервных копий.

Диагностика распространённых ошибок

  • Проблема: «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 для многоконтейнерных стеков.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство