Установка Docker и Docker Compose на Linux (Ubuntu, Debian, Rocky, Fedora)
Docker — платформа контейнеризации приложений. В этой инструкции — установка Docker Engine и Compose на популярные дистрибутивы Linux, рекомендуемая настройка демона и решение типовых проблем.
Установка Docker Engine
Ubuntu / Debian
apt update
apt install docker.io
Astra Linux
apt update
apt install docker.io
Rocky Linux / CentOS / AlmaLinux
dnf install wget
wget -P /etc/yum.repos.d/ https://download.docker.com/linux/centos/docker-ce.repo
dnf install docker-ce docker-ce-cli
systemctl enable docker --now
CentOS 7
yum install wget
wget -P /etc/yum.repos.d/ https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
systemctl enable docker --now
Fedora
dnf install dnf-plugins-core
Fedora 41+ (DNF 5):
dnf config-manager addrepo --from-repofile=https://download.docker.com/linux/fedora/docker-ce.repo
Fedora до 40 включительно:
dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
dnf install docker-ce docker-ce-cli containerd.io
systemctl enable docker --now
РЕД ОС
dnf install docker-ce
systemctl enable --now docker
Рекомендуемая настройка
mkdir -p /etc/docker
vi /etc/docker/daemon.json
{
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 262144,
"Soft": 262144
}
},
"bip": "172.17.0.1/24",
"default-address-pools": [
{
"base": "172.17.0.0/16",
"size": 24
}
]
}
где:
storage-driver— драйвер хранилища, рекомендуетсяoverlay2;log-driver— драйвер логов;json-fileпишет журнал в файлы;log-opts— ограничение журнала: 3 файла по 10 Мб (30 Мб);default-ulimits/nofile— лимит открываемых файлов; малый лимит приводит к подвисанию процессов;bip— адрес docker-моста;default-address-pools— пул адресов для контейнерных сетей. По умолчанию выдаются сети /16, что при масштабировании даёт пересечения; задаём пул172.17.0.0/16с маской /24. Выбирайте подсеть без пересечений с вашей сетью.
systemctl restart docker
Проверка
docker run --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
Docker работает корректно.
Установка Compose
Два способа: современный (плагин) и универсальный (бинарник).
Установка плагина
DEB:
Во встроенном репозитории есть старая версия — обычно её достаточно:
apt install docker-compose-v2
Для свежей версии подключаем официальный репозиторий Docker:
apt install ca-certificates curl gnupg
LINUX=ubuntu # или debian
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/${LINUX}/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/${LINUX} $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
apt update
apt install docker-compose-plugin
RPM:
dnf install docker-compose-plugin
docker compose version
Для привычного синтаксиса со дефисом создайте алиас:
echo 'alias docker-compose="docker compose"' >> ~/.bashrc
source ~/.bashrc
docker-compose version
Универсальный способ (бинарник)
apt install curl # DEB
yum install curl # RPM
Определяем последнюю версию:
COMVER=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d" -f4)
Переменная COMVER получит последнюю версию с GitHub API.
Фиксированная версия:
COMVER=v5.5.1
curl -L "https://github.com/docker/compose/releases/download/$COMVER/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
docker-compose --version
Возможные проблемы
1. undefined symbol: seccomp_api_set
/usr/bin/containerd: symbol lookup error: /usr/bin/containerd: undefined symbol: seccomp_api_set
Причина: свежий containerd на системе с устаревшей libseccomp.
Решение:
yum update libseccomp # CentOS
apt --only-upgrade install libseccomp2 # Ubuntu
2. error initializing network controller list bridge addresses failed no available network
error initializing network controller list bridge addresses failed no available network
Причина: система не может создать docker-интерфейс.
Решение: создаём мост вручную.
yum install bridge-utils # CentOS
apt install bridge-utils # Ubuntu
brctl addbr docker0
ip addr add 192.168.84.1/24 dev docker0
ip link set dev docker0 up
systemctl start docker
В примере для docker задан адрес 192.168.84.1.
Из контейнера нет подключения по веб-портам
Пинг в интернет работает, но подключения по 80/443 из контейнера падают.
Причина: Docker игнорирует MTU сети, из-за чего крупные пакеты обрезаются.
Решение: задать MTU 1450:
vi /etc/docker/daemon.json
{
"mtu": 1450,
...
}
systemctl restart docker
Тонкости и подводные камни
docker.iovsdocker-ce— в Ubuntu/Debian репозиторныйdocker.ioобычно старее официальногоdocker-ce; для свежих версий подключайте репозиторий Docker.default-address-pools— задавайте пул, не пересекающийся с вашей инфраструктурой.bip— адрес docker-моста; меняйте, если 172.17.0.1 конфликтует.- MTU — при проблемах с сетью из контейнеров (VPN, PPPoE, VXLAN) уменьшайте MTU.
nofile— низкий лимит вызывает зависания; увеличьте до 262144.- Compose v2 — команда теперь
docker compose(плагин), а не отдельный бинарникdocker-compose. - CentOS 7 EOL — для новых систем используйте Rocky/AlmaLinux.
Шпаргалка
# Ubuntu/Debian
apt install docker.io
# Rocky/CentOS
wget -P /etc/yum.repos.d/ https://download.docker.com/linux/centos/docker-ce.repo
dnf install docker-ce docker-ce-cli && systemctl enable docker --now
# настройка
mkdir -p /etc/docker && vi /etc/docker/daemon.json # overlay2, log-opts, mtu, address-pools
systemctl restart docker
docker run --rm hello-world
# compose
apt install docker-compose-v2 # или docker-compose-plugin
docker compose version
Проверено на: Ubuntu 22.04/24.04, Debian 12, Rocky Linux 9, Fedora + Docker Engine, Compose v5.5.1.
Дата: Сентябрь 2026.