---
title: "Как установить Docker и Docker Compose на Ubuntu и Debian"
description: "Docker Engine и Compose из официального репозитория на VPS с Ubuntu или Debian: запуск без sudo, первый compose.yaml, ловушка Docker и UFW, лимит логов."
url: https://tihost.io/blog/install-docker-ubuntu-debian
language: ru
section: "Руководства"
published: 2026-09-24
updated: 2026-10-05
publisher: Tihost (https://tihost.io)
---

# Как установить Docker и Docker Compose на Ubuntu и Debian

> **Коротко:** Docker ставят из официального репозитория Docker, а не из пакета docker.io: так приходят свежие версии Engine и плагин Compose. Сразу после установки ограничьте размер логов контейнеров и помните, что Docker публикует порты в обход файрвола UFW - открывайте наружу только то, что должно быть видно из интернета.

**Главное:**

- Docker Engine на Ubuntu 22.04/24.04 и Debian 12 ставят из официального репозитория Docker пакетом `docker-ce` вместе с `docker-compose-plugin`, а не пакетом `docker.io` из дистрибутива - так приходят свежий Engine и команда `docker compose`.
- Docker публикует порты контейнеров через собственные правила iptables в обход файрвола UFW: порт `8080:80` доступен из интернета, даже если UFW его закрывает, поэтому внутренние сервисы публикуют только на `127.0.0.1`.
- По умолчанию Docker хранит логи контейнеров без ограничения размера; параметры `max-size: 10m` и `max-file: 3` в `/etc/docker/daemon.json` ограничивают логи 30 МБ на контейнер.
- Пользователь в группе `docker` фактически получает права root на сервере, поэтому в эту группу добавляют только своего администратора.
- Docker и Docker Compose работают на VPS с виртуализацией KVM без ограничений; самому Docker хватает 2 ГБ оперативной памяти, остальное определяют контейнеры.

> Команды проверены для Ubuntu 22.04/24.04 и Debian 12 на VPS с виртуализацией KVM - Docker работает на нём без ограничений. Перед установкой стоит пройти [первую настройку сервера](https://tihost.io/blog/vps-first-setup).

## Шаг 1. Подключите репозиторий Docker и установите пакеты

Один и тот же набор команд работает на Ubuntu и Debian: `/etc/os-release` подставляет имя дистрибутива и его версию. Это официальный способ из [документации Docker](https://docs.docker.com/engine/install/):

```bash
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
. /etc/os-release
sudo curl -fsSL "https://download.docker.com/linux/$ID/gpg" -o /etc/apt/keyrings/docker.asc
sudo 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/$ID ${UBUNTU_CODENAME:-$VERSION_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

## Шаг 2. Проверьте установку

Запустите тестовый контейнер `hello-world` и узнайте версию Compose - обе команды должны отработать без ошибок:

```bash
sudo docker run --rm hello-world
docker compose version
```

Если `hello-world` напечатал приветствие, Engine работает. Служба Docker уже включена в автозапуск и поднимется после перезагрузки сервера.

## Шаг 3. Запуск без sudo

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

```bash
sudo usermod -aG docker $USER
# выйдите из SSH и зайдите снова, затем:
docker ps
```

> Членство в группе `docker` равносильно правам root: через Docker можно смонтировать в контейнер любой каталог сервера. Добавляйте в группу только своего пользователя.

## Шаг 4. Первый проект на Docker Compose

Создайте каталог проекта и файл `compose.yaml` - в примере nginx, доступный только с самого сервера на порту 8080:

`compose.yaml`:

```
services:
  web:
    image: nginx:alpine
    ports:
      - "127.0.0.1:8080:80"
    restart: unless-stopped
```

```bash
docker compose up -d
docker compose ps
docker compose logs -f
```

`restart: unless-stopped` поднимает контейнер после падения и после перезагрузки сервера - отдельный сервис systemd для него не нужен.

## Docker и UFW: порты открываются в обход файрвола

Docker сам прописывает правила iptables для опубликованных портов, и они срабатывают раньше правил UFW. Порт, опубликованный как `8080:80`, будет доступен из интернета, даже если в UFW он закрыт. Поэтому:

- публикуйте внутренние сервисы (базы данных, админки, API без авторизации) только на `127.0.0.1`, как в примере выше;
- наружу открывайте один обратный прокси (nginx, Caddy, Traefik) на портах 80 и 443, а он уже передаёт запросы контейнерам - как поставить nginx с бесплатным сертификатом, описано в [руководстве по HTTPS](https://tihost.io/blog/nginx-letsencrypt-https);
- контейнерам, которым не нужен доступ извне, порты не публикуйте вовсе - внутри одного Compose-проекта они видят друг друга по имени сервиса.

## Шаг 5. Ограничьте размер логов

По умолчанию Docker хранит логи контейнеров без ограничения размера, и болтливый контейнер может занять весь диск. Ограничьте их: не больше трёх файлов по 10 МБ на контейнер. Настройка действует на контейнеры, созданные после неё - существующие пересоздайте через `docker compose up -d --force-recreate`.

```bash
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
  "log-driver": "json-file",
  "log-opts": { "max-size": "10m", "max-file": "3" }
}
EOF
sudo systemctl restart docker
```

## Как освободить место на диске

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

```bash
docker system df
docker image prune -a
```

**Запустите сервер за 2 минуты.** AMD Ryzen 9, NVMe и защита от DDoS в Германии, Финляндии и Польше. Оплата криптовалютой или картой. [Заказать сервер](https://tihost.io/login)

## Частые вопросы

### Чем пакет docker.io отличается от docker-ce?

`docker.io` собирает сам дистрибутив, и версия в нём обычно старше. `docker-ce` - пакет из официального репозитория Docker со свежим Engine и плагином Compose; именно его рекомендует документация Docker.

### Работает ли Docker на VPS Tihost?

Да. Серверы работают на KVM - это полноценная виртуальная машина со своим ядром, поэтому Docker, Compose и сети контейнеров работают без ограничений.

### Почему контейнер доступен из интернета, хотя UFW закрыт?

Docker публикует порты через собственные правила iptables, которые срабатывают раньше UFW. Публикуйте внутренние сервисы на `127.0.0.1` или не публикуйте их вовсе.

### Чем docker compose отличается от docker-compose?

`docker-compose` - старая отдельная программа на Python, её развитие прекращено. `docker compose` (через пробел) - плагин Docker CLI, который ставится пакетом `docker-compose-plugin`.

### Сколько памяти нужно для Docker?

Самому Docker хватает конфигурации с 2 ГБ памяти. Всё остальное зависит от контейнеров: несколько сервисов с базой данных удобнее держать на 4-8 ГБ.

---

Обновлено 2026-10-05 · https://tihost.io/blog/install-docker-ubuntu-debian
