Все системы работают Ваш IP: 216.73.217.36 info@cloudhosting.lv +371 66 66 29 69 Личный кабинет

← Все вопросы

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

Это руководство пошагово показывает, как установить Docker Engine и плагин Compose v2 на Ubuntu 24.04 из официального apt-репозитория Docker: именно этот способ поддерживает и своевременно обновляет сам Docker. Оно написано для тех, кто администрирует собственный VPS или выделенный сервер и хочет чистую установку без snap-пакетов и скриптов, скачиваемых напрямую в shell. В конце у вас будет рабочий стек из двух контейнеров, и вы будете знать, где на диске на самом деле лежат его данные.

Что понадобится перед началом

Вам нужна Ubuntu 24.04 (Noble) с пользователем, имеющим права sudo, и исходящий доступ в интернет. Сам Docker Engine легковесен, но контейнеры, которые вы на нем запускаете, нет. Для экспериментов хватит 1 vCPU и 1 GB RAM, но для всего, что должно работать постоянно, комфортный минимум: 2 vCPU и 4 GB RAM. Этого достаточно для веб-приложения, базы данных и периодической сборки образов без ухода в swap. Заложите не меньше 20 GB диска, потому что образы и кеш сборки накапливаются быстрее, чем кажется.

Если на сервере когда-либо стояли неофициальные пакеты Docker, сначала удалите их, чтобы они не конфликтовали с официальными:

sudo apt remove docker.io docker-doc docker-compose podman-docker containerd runc

Если apt сообщит, что ни один из них не установлен, это нормально.

Добавьте официальный apt-репозиторий Docker

Собственный пакет Ubuntu docker.io отстает на несколько версий и не включает Compose v2. Официальный репозиторий получает исправления безопасности в течение считанных дней после выхода, а для демона, работающего от root, это важно. Сначала установите зависимости и ключ подписи Docker:

sudo apt update
sudo apt install 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

Затем добавьте сам репозиторий и обновите индекс пакетов:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

Установите Docker Engine и Compose v2

Одна команда устанавливает движок, CLI, containerd и два нужных плагина: Buildx и Compose v2.

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

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

sudo systemctl status docker
sudo docker run hello-world
docker compose version

Контейнер hello-world скачивает крошечный образ, печатает подтверждение и завершается. Обратите внимание: Compose v2 - это подкоманда, docker compose через пробел, а не старый бинарный файл docker-compose.

Запуск Docker без sudo

По умолчанию к сокету Docker может обращаться только root. Добавьте своего пользователя в группу docker, чтобы обходиться без префикса sudo:

sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

newgrp применяет группу в текущей оболочке; новые SSH-сессии подхватят ее автоматически. Честное предупреждение: членство в группе docker фактически означает root-доступ к этой машине, потому что контейнер может примонтировать файловую систему хоста. Добавляйте только те учетные записи, которым вы доверили бы root.

Реалистичный файл Compose: веб-приложение плюс база данных

Compose описывает стек из нескольких контейнеров в одном YAML-файле. Вот небольшой, но близкий к продакшену пример: WordPress с MariaDB, каждый в своем контейнере, с постоянными именованными томами.

mkdir -p ~/myapp
cd ~/myapp
nano docker-compose.yml
services:
  web:
    image: wordpress:6.5
    ports:
      - "80:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wp
      WORDPRESS_DB_PASSWORD: change-me
    depends_on:
      - db
    volumes:
      - wp_data:/var/www/html
    restart: unless-stopped

  db:
    image: mariadb:11
    environment:
      MARIADB_DATABASE: wordpress
      MARIADB_USER: wp
      MARIADB_PASSWORD: change-me
      MARIADB_ROOT_PASSWORD: change-me-too
    volumes:
      - db_data:/var/lib/mysql
    restart: unless-stopped

volumes:
  wp_data:
  db_data:

Контейнер web обращается к базе просто по имени хоста db: Compose помещает оба сервиса в приватную сеть с DNS. Запустите стек и посмотрите на его состояние:

docker compose up -d
docker compose ps
docker compose logs -f web

docker compose down останавливает и удаляет контейнеры, но тома сохраняет, поэтому данные переживают перезапуски и обновления образов.

Где на самом деле лежат данные

Именованные тома: это каталоги, которыми управляет Docker, в /var/lib/docker/volumes/. Для примера выше:

docker volume ls
docker volume inspect myapp_db_data

Все, что записано внутри контейнера вне тома, исчезает вместе с контейнером. Два правила избавляют от большинства потерь данных:

  • Базы данных и загруженные файлы всегда держите на именованных томах или bind-монтированиях.
  • Никогда не выполняйте docker compose down -v не задумываясь: флаг -v удаляет тома вместе с контейнерами.

Для резервных копий выгружайте базу штатной утилитой (например, mariadb-dump через docker compose exec db), а не копируйте файлы работающей базы.

Очистка, ресурсы и дальнейшие шаги

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

docker system df
docker system prune
docker system prune -a

Обычный prune удаляет остановленные контейнеры, висячие образы и неиспользуемые сети. Вариант с -a удаляет и все образы, которые не использует ни один работающий контейнер, поэтому при следующем деплое их придется скачивать заново. Тома ни одна из этих команд не трогает, пока вы явно не добавите --volumes, так что относитесь к этому флагу с той же осторожностью, что и к down -v.

О ресурсах: описанный стек в простое занимает примерно 500 MB RAM, и небольшие Docker-хосты обычно страдают от нехватки памяти, а не CPU. Если вы подбираете сервер под такую задачу, тариф с 2 vCPU и 4 GB RAM, например наш NVMe VPS в Риге, оставляет запас и стеку, и самой ОС, а по мере роста числа контейнеров ресурсы можно увеличить.

Хотите, чтобы это делали мы?
VPS. NVMe виртуальные серверы, запуск за минуту.
Подробнее

Готовы начать?

Запустите за минуты или обсудите с инженером, что подходит вашему проекту.