Встановлення і налаштування Docker: Engine, Desktop, daemon.json
Встановлення Docker Engine на Ubuntu і RHEL, Docker Desktop на Windows і macOS, група docker, daemon.json (логи, мережі, live-restore), контексти для віддалених серверів і rootless.
Що встановлювати
| Де | Що | Примітка |
|---|---|---|
| Linux-сервер | Docker Engine з репозиторію Docker | безкоштовно, без GUI |
| Linux-десктоп | Docker Engine (або Docker Desktop for Linux) | Engine простіший і швидший |
| Windows 10/11 | Docker Desktop + WSL 2 | Engine працює всередині WSL |
| macOS | Docker Desktop (або OrbStack, Colima) | Engine у легкій ВМ |
Ліцензія Docker DesktopDocker Desktop безкоштовний для особистого використання, навчання, open source і компаній до 250 працівників і з доходом до 10 млн доларів на рік. Великим компаніям потрібна платна підписка. Docker Engine на Linux безкоштовний завжди.
Ubuntu / Debian: офіційний репозиторій
Пакет docker.io у репозиторії Ubuntu зазвичай старіший і без плагінів. Ставимо з репозиторію Docker.
# 1. Прибрати конфліктні пакети (дані в /var/lib/docker не чіпає)
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 \
docker-doc podman-docker containerd runc | cut -f1)
# 2. Ключ репозиторію
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 3. Репозиторій
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
# 4. Встановлення
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginНа Debian замініть обидва ubuntu в адресах на debian, а UBUNTU_CODENAME підставиться порожнім — візьметься VERSION_CODENAME.
RHEL / Rocky / AlmaLinux / Fedora
sudo dnf remove -y docker docker-client docker-common docker-latest podman-docker runc
sudo dnf -y install dnf-plugins-core
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
sudo systemctl enable --now dockerНа Fedora адреса .../linux/fedora/docker-ce.repo, а в dnf5 команда додавання репозиторію: sudo dnf config-manager addrepo --from-repofile=<адреса>.
Тестова віртуалка за хвилинуДля одноразових машин є офіційний скрипт:
curl -fsSL https://get.docker.com | sh. На прод-серверах краще ставити через репозиторій, як вище: видно, що саме встановлюється, і оновлення йдуть черезapt/dnf.
Перевірка
sudo systemctl status docker # Active: active (running)
docker version # версії клієнта і сервера
docker info # драйвер сховища, cgroup, кількість контейнерів
docker compose version
sudo docker run --rm hello-world # «Hello from Docker!»Після встановлення (Linux)
Docker без sudo
sudo usermod -aG docker $USER
newgrp docker # або вийти й зайти знову
docker ps # уже без sudoГрупа docker дорівнює rootУчасник групи
dockerможе запуститиdocker run -v /:/host -it alpine chroot /hostі отримати повний доступ до сервера. Додавайте в групу лише тих, кому довірили бsudo. Альтернатива для спільних машин — rootless-режим (нижче).
Автозапуск
sudo systemctl enable docker.service containerd.service/etc/docker/daemon.json — налаштування демона
Файл не існує за замовчуванням. Рекомендований мінімум для сервера:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"live-restore": true,
"default-address-pools": [
{ "base": "172.30.0.0/16", "size": 24 }
]
}| Параметр | Навіщо |
|---|---|
log-opts.max-size / max-file |
без них логи контейнерів ростуть безкінечно й забивають диск |
live-restore |
контейнери не зупиняються при перезапуску чи оновленні dockerd |
default-address-pools |
з яких підмереж Docker видає адреси мережам; змініть, якщо 172.17–172.31 перетинаються з корпоративною мережею чи VPN |
data-root |
перенести /var/lib/docker на інший диск: "data-root": "/mnt/data/docker" |
registry-mirrors |
дзеркало Docker Hub: ["https://mirror.example.com"] |
insecure-registries |
власний реєстр без HTTPS (лише для тестів!) |
Застосувати:
sudo dockerd --validate --config-file /etc/docker/daemon.json # перевірити синтаксис
sudo systemctl restart dockerЛіміти логів — лише для нових контейнерів
log-optsдіють на контейнери, створені після перезапуску демона. Існуючі потрібно перестворити (docker compose up -d --force-recreate).
Docker і firewall
Docker сам пише правила iptables і обходить UFW/firewalld: порт, опублікований через -p 5432:5432, буде доступний з інтернету, навіть якщо в UFW він закритий. Рішення:
- публікуйте сервісні порти лише на localhost:
-p 127.0.0.1:5432:5432; - або не публікуйте зовсім, а спілкуйтеся через мережі Docker (див. «Мережі»);
- власні правила фільтрації — у ланцюжку
DOCKER-USER.
Docker Desktop на Windows
- Увімкніть WSL 2: у PowerShell від адміністратора
wsl --install, перезавантажтеся. - Встановіть Docker Desktop (
winget install -e --id Docker.DockerDesktop), у налаштуваннях має бути Use the WSL 2 based engine. - Settings → Resources → WSL Integration — увімкніть для свого дистрибутива (Ubuntu), щоб
dockerпрацював і в терміналі WSL.
Код — у файловій системі WSLТримайте проєкти в
~/codeвсередині WSL, а не в/mnt/c/.... Bind mount з дискаC:іде через мережевий міст і повільніший у рази; file watching (автоперезапуск dev-сервера) там часто не працює.
Обмежити пам'ять, яку забирає WSL, — файл %UserProfile%\.wslconfig:
[wsl2]
memory=8GB
processors=4Застосувати: wsl --shutdown і запустити Docker Desktop знову.
Docker Desktop на macOS
Встановіть з docker.com (Apple Silicon чи Intel) або brew install --cask docker. Ресурси (CPU, RAM, диск) — у Settings → Resources.
На Apple Silicon образи за замовчуванням збираються під linux/arm64. Якщо сервер на x86 — збирайте з --platform linux/amd64 (див. «Образи»), інакше на сервері буде exec format error.
Контексти: керувати віддаленим Docker зі свого ноутбука
docker context create prod --docker "host=ssh://deploy@prod-01.example.com"
docker context ls
docker --context prod ps # команда виконується на сервері
docker context use prod # перемкнутися надовго (обережно!)
docker context use default # назад на локальнийПрацює через SSH, нічого додатково відкривати не треба. Альтернатива на один раз: DOCKER_HOST=ssh://deploy@prod-01 docker ps.
Rootless-режим
Демон працює від звичайного користувача, а не від root. Навіть якщо зловмисник вирветься з контейнера, він отримає права лише цього користувача.
sudo apt install -y uidmap
dockerd-rootless-setuptool.sh install
systemctl --user enable --now docker
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sockОбмеження: порти нижче 1024 за замовчуванням недоступні, частина мережевих функцій працює повільніше. Для серверів з кількома користувачами — добрий вибір.
Оновлення і видалення
sudo apt update && sudo apt install --only-upgrade docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-pluginПовністю видалити (разом з усіма образами, контейнерами і томами!):
sudo apt purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo rm -rf /var/lib/docker /var/lib/containerdЧекліст нового сервера
- Docker з офіційного репозиторію,
docker compose versionпрацює. daemon.json: ротація логів,live-restore, за потреби — пули адрес.- У групі
dockerлише довірені люди. - Порти БД і внутрішніх сервісів не опубліковані на
0.0.0.0. - Є моніторинг диска (
docker system df) і план очищення (див. «Образи»).
Збережіть статтю собі
Увійдіть, щоб імпортувати її у власні нотатки, відмічати вивчене, ставити лайки й питати спільноту. Реєстрація безкоштовна: вхід через Google займає кілька секунд.
Увійти через Google Інші способи входу