Docker запускает приложения в изолированных контейнерах: база, сайт и очередь живут рядом, не мешая друг другу, а обновление сводится к замене образа. Ниже — установка Docker Engine и плагина Compose и две настройки, о которых стоит знать с первого дня.
Быстрая установка скриптом
Скрипт от Docker сам определит систему, подключит официальный репозиторий и поставит Docker Engine, CLI, containerd и плагины Buildx и Compose:
$ curl -fsSL https://get.docker.com -o get-docker.sh$ sh get-docker.shУстановка из репозитория apt
Команды для Ubuntu. На Debian 12 замените в обеих ссылках ubuntu на debian.
$ apt update$ apt install -y ca-certificates curl$ install -m 0755 -d /etc/apt/keyrings$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc$ chmod a+r /etc/apt/keyrings/docker.asc$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" > /etc/apt/sources.list.d/docker.list$ apt update$ apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginПроверьте результат
$ systemctl is-active docker$ docker run --rm hello-world$ docker compose versionКонтейнер hello-world напечатает приветствие и завершится. Если видите его — Docker работает.
Запуск без sudo и чем это опасно
Чтобы обычный пользователь мог выполнять команды docker без sudo, добавьте его в группу docker и перезайдите по SSH:
$ usermod -aG docker deployПорты контейнеров и фаервол
Docker сам управляет правилами iptables. Порт, опубликованный через -p 8080:80 или ports в Compose, открывается наружу даже при включённом UFW — правила Docker срабатывают раньше правил UFW.
Если сервис не должен быть доступен из интернета, публикуйте его только на локальном адресе, а снаружи пускайте через Nginx:
$ docker run -d --name app -p 127.0.0.1:8080:80 nginxservices: app: image: nginx ports: - "127.0.0.1:8080:80"Посмотреть, какие порты слушаются на всех адресах, можно так — строки с 0.0.0.0 и [::] доступны извне:
$ ss -tlnpЧастые ошибки
- permission denied while trying to connect to the Docker daemon socket — пользователь не в группе docker или не перезашёл после добавления.
- База данных в контейнере доступна всему интернету — порт опубликован без 127.0.0.1. Исправьте ports и выполните docker compose up -d.
- Закончилось место на диске — старые образы и логи контейнеров. Смотрите статью про уборку Docker.