Глиф Учебники

Урок 2. Установка Docker

Курс «Docker» · урок 2 из 10 · 6 минут чтения

В этом уроке Docker появится на вашем компьютере. Основной путь — Ubuntu и официальный репозиторий Docker: так ставят на серверы, и так написаны все примеры курса. Для других систем — отличия в конце урока: Debian, Windows и macOS.

Какой способ выбрать

Нужна 64-битная Ubuntu — 22.04 LTS и новее; точный список поддерживаемых версий — на странице установки в документации Docker.

Шаг 1. Удалите старые пакеты

Если раньше ставили Docker из репозитория Ubuntu, его пакеты будут мешать официальным. Удалите их:

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

dpkg --get-selections выбирает из списка пакеты, которые есть в системе, а apt remove удаляет их. На чистой системе apt ответит, что удалять нечего, — это нормально. Образы и контейнеры, если они были, лежат в /var/lib/docker и при удалении пакетов остаются.

Шаг 2. Подключите репозиторий Docker

Команды ниже — из документации Docker. Выполните их по очереди, целиком:

Bash
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

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 download.docker.com список пакетов подпись sudo apt update 2 скачивает список с подписью /etc/apt/sources.list.d/ docker.sources откуда брать пакеты apt /etc/apt/keyrings/ docker.asc ключ проверки подписи 1 3
Команда apt берёт адрес репозитория из docker.sources, скачивает список пакетов с подписью и сверяет подпись ключом docker.asc.

Если apt update ругается на ключ или подпись, проверьте, что команда с curl выполнилась без ошибок и файл /etc/apt/keyrings/docker.asc не пустой: ls -l /etc/apt/keyrings/.

Шаг 3. Установите Docker

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

Пять пакетов: служба Docker (docker-ce), команда docker (docker-ce-cli), среда запуска контейнеров (containerd.io), сборщик образов (docker-buildx-plugin) и Docker Compose (docker-compose-plugin).

сборщик образов docker-buildx-plugin Docker Compose docker-compose-plugin команда docker docker-ce-cli служба Docker docker-ce dockerd среда запуска containerd.io контейнеры
Что ставят пять пакетов: команду docker с дополнениями для сборки и Compose, службу Docker и среду запуска контейнеров containerd.

Шаг 4. Проверьте

На Ubuntu служба Docker запускается сразу после установки и потом — при каждом включении компьютера. Проверьте её и запустите первый контейнер:

Bash
sudo systemctl status docker
sudo docker run hello-world

В выводе systemctl status должно быть active (running); выход из просмотра — клавиша q. Если служба не запущена, запустите её: sudo systemctl start docker.

Команда docker run hello-world скачивает крошечный тестовый образ и запускает его. Контейнер печатает приветствие и сразу завершается. Если в ответе есть строки

Текст
Hello from Docker!
This message shows that your installation appears to be working correctly.

— Docker работает. Подробно, что именно произошло, — в следующем уроке.

Docker без sudo

Пока каждая команда docker требует sudo: служба принимает команды через файл /var/run/docker.sock, а пользоваться им могут только root и участники группы docker. Чтобы не набирать sudo, добавьте себя в группу:

Bash
sudo usermod -aG docker $USER
/var/run/ docker.sock пускает только root и группу docker не в группе docker $ docker ps permission denied в группе docker $ docker ps или через sudo $ sudo docker ps служба dockerd работает от root доступ к docker.sock — это права root на хосте
Команды docker идут к службе через файл docker.sock, а его открывают только root и участники группы docker.

Членство в группе вступает в силу после нового входа в систему: выйдите и войдите снова (по SSH — переподключитесь). Проверка — уже без sudo:

Bash
docker run hello-world

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

Если после этого команды по-прежнему пишут permission denied, смотрите справку Ошибка permission denied при запуске docker.

Пакет docker.io из Ubuntu

Вариант без чужого репозитория — пакеты самой Ubuntu:

Bash
sudo apt update
sudo apt install docker.io docker-compose-v2 docker-buildx

docker.io — Docker Engine, docker-compose-v2 — команда docker compose, docker-buildx — сборщик образов. Команды курса работают и с ними. Не смешивайте два способа: перед переходом на официальный репозиторий удалите эти пакеты (шаг 1).

Debian

В Debian шаги те же, но в двух местах вместо ubuntu стоит debian: в адресе ключа https://download.docker.com/linux/debian/gpg и в строке URIs. Кодовое имя берётся из VERSION_CODENAME. Точные команды — на странице установки для Debian в документации Docker (docs.docker.com/engine/install/debian).

Windows и macOS: Docker Desktop

На Windows и macOS ставят Docker Desktop — с официального сайта (docs.docker.com/desktop). В него входят Docker Engine, команда docker, Compose и окно для управления контейнерами мышью.

После установки запустите Docker Desktop и дождитесь, пока он сообщит, что движок запущен. Затем в терминале: docker run hello-world.

Docker Desktop бесплатен для личного использования, учёбы, некоммерческих открытых проектов и небольших компаний (меньше 250 сотрудников и меньше 10 млн долларов выручки в год). Более крупным организациям нужна платная подписка. Docker Engine на Linux бесплатен для всех.

Коротко

Проверьте себя

1. Зачем на шаге 1 удаляют пакеты docker.io, containerd и другие?
2. Что даёт добавление пользователя в группу docker?
3. Пользователь добавлен в группу docker, но команды всё равно пишут permission denied. Что сделать первым делом?
4. Что нужно для Docker на Windows?