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

Установить Docker на Ubuntu так, как советует сам Docker, — значит подключить его apt-репозиторий: там свежий Docker Engine и плагин Compose. Пакет docker.io из Ubuntu тоже работает, но отстаёт по версии. Инструкция для Ubuntu 24.04 и 22.04, а ещё в ней — как запускать docker без sudo и что делать с самыми частыми ошибками.

Как убрать старые пакеты Docker

Если Docker уже ставили из пакетов Ubuntu (docker.io, docker-compose, podman-docker), сначала удалите их, иначе они будут конфликтовать с пакетами Docker. Команда удаляет только эти пакеты. Образы, контейнеры и тома в /var/lib/docker/ остаются на месте.

sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc | cut -f1)

На свежей системе apt ответит, что ни одного из них нет. Так и должно быть.

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

Команды ниже — со страницы установки Docker. Они добавляют ключ подписи Docker и файл репозитория для вашего выпуска Ubuntu, а затем обновляют список пакетов.

# Ключ подписи 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 # Репозиторий Docker в источниках apt: 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 sudo apt update

Теперь поставьте Docker Engine, его командную строку, containerd и плагины Buildx и Compose:

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

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

sudo systemctl status docker

Нужна строка Active: active (running). Если служба не работает, запустите её:

sudo systemctl start docker

Как проверить Docker через hello-world

Запустите тестовый образ. Docker скачает его, запустит контейнер, тот напечатает сообщение и завершится.

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

В выводе должна быть строка Hello from Docker!. Две другие команды покажут версии Docker Engine и плагина Compose.

Как запускать docker без sudo

Пакет Docker создаёт группу docker. Её участники работают с сокетом Docker без sudo. Добавьте себя в группу и примените изменение в текущей оболочке — или выйдите из системы и зайдите снова.

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

Группа docker даёт права уровня root: её участник может запустить контейнер, к которому подключена любая папка системы. Добавляйте туда только свою учётную запись и тех, кому доверили бы sudo.

Как запустить проект через Docker Compose

Compose теперь плагин, поэтому он запускается как подкоманда docker, через пробел. Старого docker-compose через дефис в системе нет. Для примера — проект из одного контейнера с Nginx. Создайте папку и в ней файл compose.yaml:

mkdir -p ~/hello cd ~/hello nano compose.yaml
~/hello/compose.yaml
services: web: image: nginx:alpine ports: - "127.0.0.1:8080:80"

Запустите проект в фоне, посмотрите, что работает, и остановите его:

docker compose up -d docker compose ps docker compose down

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

Частые проблемы с Docker

  • permission denied while trying to connect to the docker API at unix:///var/run/docker.sock (в старых версиях: …to the Docker daemon socket at…) — пользователь ещё не в группе docker, или оболочку открыли до того, как вы в неё вступили. Выполните команду usermod из раздела выше, выйдите и зайдите снова. Команда groups должна показать docker.
  • Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? — служба остановлена. Запустите её: sudo systemctl start docker Если она снова падает, смотрите журнал: sudo journalctl -u docker -n 50
  • WARNING: Error loading config file: /home/user/.docker/config.json — папку ~/.docker создал прежний запуск docker через sudo, и она принадлежит root. Верните её себе: sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
  • docker-compose: command not found — пишите compose после docker через пробел, как в разделе выше. Плагин Compose заменил старую программу.
  • apt сообщает о конфликте с containerd — в системе остался старый пакет containerd или runc. Выполните команду удаления из первого раздела и установите заново.

Если вы работаете и на Mac

MacWashing, раздел «Сборка мусора»: найдены мусор Xcode, пользовательский кэш, установщики и журналы, к очистке 22,83 ГБ

Сборка мусора в MacWashing находит кэш всех знакомых ей программ, в том числе спрятанный внутри их данных, а ещё журналы, мусор Xcode и остатки удалённых программ. Она показывает, сколько места занимает каждая находка, и очищает всё за один раз. Всё спорное остаётся без галочки, пока вы не решите.

Бесплатная пробная версия · macOS 14 и новее

Вопросы и ответы

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

Подключите apt-репозиторий Docker с его ключом подписи и поставьте пакеты: sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin Проверьте установку: sudo docker run hello-world

А можно взять пакет docker.io из Ubuntu?

Можно: это Docker в сборке Ubuntu, и он получает исправления безопасности. Обычно он старше пакетов самого Docker. Выберите один источник и не смешивайте их — пакеты конфликтуют.

Где Docker хранит образы и контейнеры?

В /var/lib/docker/. Сколько они занимают, покажет команда: docker system df А эта удаляет остановленные контейнеры, неиспользуемые сети, образы без тегов и кэш сборки, сначала спросив подтверждение: docker system prune