Skip to content

This article is available in Russian. An English version is on the way.Open the Russian page

Установка Docker

Docker Engine и плагин Compose из официального репозитория, права пользователя и порты в обход фаервола.

Level
Beginner
Reading time
3 min read
Updated
Tested on
Ubuntu 22.04, Ubuntu 24.04, Debian 12
Contents
  1. Быстрая установка скриптом
  2. Установка из репозитория apt
  3. Проверьте результат
  4. Запуск без sudo и чем это опасно
  5. Порты контейнеров и фаервол
  6. Частые ошибки

Docker запускает приложения в изолированных контейнерах: база, сайт и очередь живут рядом, не мешая друг другу, а обновление сводится к замене образа. Ниже — установка Docker Engine и плагина Compose и две настройки, о которых стоит знать с первого дня.

Быстрая установка скриптом

Скрипт от Docker сам определит систему, подключит официальный репозиторий и поставит Docker Engine, CLI, containerd и плагины Buildx и Compose:

bash
$ curl -fsSL https://get.docker.com -o get-docker.sh$ sh get-docker.sh

Установка из репозитория apt

Команды для Ubuntu. На Debian 12 замените в обеих ссылках ubuntu на debian.

bash
$ 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

Проверьте результат

bash
$ systemctl is-active docker$ docker run --rm hello-world$ docker compose version

Контейнер hello-world напечатает приветствие и завершится. Если видите его — Docker работает.

Запуск без sudo и чем это опасно

Чтобы обычный пользователь мог выполнять команды docker без sudo, добавьте его в группу docker и перезайдите по SSH:

bash
$ usermod -aG docker deploy

Порты контейнеров и фаервол

Docker сам управляет правилами iptables. Порт, опубликованный через -p 8080:80 или ports в Compose, открывается наружу даже при включённом UFW — правила Docker срабатывают раньше правил UFW.

Если сервис не должен быть доступен из интернета, публикуйте его только на локальном адресе, а снаружи пускайте через Nginx:

bash
$ docker run -d --name app -p 127.0.0.1:8080:80 nginx
compose.yaml — порт доступен только с самого сервера
services:  app:    image: nginx    ports:      - "127.0.0.1:8080:80"

Посмотреть, какие порты слушаются на всех адресах, можно так — строки с 0.0.0.0 и [::] доступны извне:

bash
$ ss -tlnp

Частые ошибки

  • permission denied while trying to connect to the Docker daemon socket — пользователь не в группе docker или не перезашёл после добавления.
  • База данных в контейнере доступна всему интернету — порт опубликован без 127.0.0.1. Исправьте ports и выполните docker compose up -d.
  • Закончилось место на диске — старые образы и логи контейнеров. Смотрите статью про уборку Docker.

Read to the end and the article counts toward your learning progress.

  • docker
  • контейнеры
  • compose
  • установка

Was this article helpful?