Установка Docker на Ubuntu: готовый скрипт

Docker — это платформа контейнеризации, которая позволяет упаковывать приложения со всеми зависимостями в изолированные контейнеры. В этой статье мы разберём готовый bash-скрипт, который автоматизирует установку Docker Engine на Ubuntu по официальной инструкции Docker.

Ручная установка Docker состоит из нескольких шагов: удаление старых пакетов, добавление GPG-ключа, подключение репозитория, установка пакетов и настройка прав доступа. Скрипт объединяет всё это в один запуск и снижает риск ошибок.

Что делает скрипт

  • Проверяет окружение — убеждается, что скрипт запущен от root и что система является Ubuntu (или производной, например Linux Mint).
  • Удаляет конфликтующие пакеты — docker.io, docker-doc, docker-compose, podman-docker, containerd, runc и другие, если они были установлены ранее.
  • Устанавливает зависимости — ca-certificates, curl, gnupg.
  • Добавляет официальный GPG-ключ и репозиторий Docker.
  • Устанавливает Docker Engine — docker-ce, docker-ce-cli, containerd.io, а также плагины docker-buildx-plugin и docker-compose-plugin.
  • Включает автозапуск и запускает сервис Docker.
  • Добавляет пользователя в группу docker — чтобы можно было работать с Docker без sudo.
  • Проверяет установку — выводит версии Docker и Docker Compose.

Скрипт

Сохраните код ниже в файл install-docker.sh:

#!/usr/bin/env bash
#
# Установка Docker Engine на Ubuntu (по официальной инструкции Docker)
# Использование: sudo ./install-docker.sh
#
set -euo pipefail

# --- Проверки -----------------------------------------------------------------

if [[ $EUID -ne 0 ]]; then
    echo "Запустите скрипт с правами root: sudo $0" >&2
    exit 1
fi

if [[ ! -f /etc/os-release ]]; then
    echo "Не удалось определить ОС (нет /etc/os-release)." >&2
    exit 1
fi

# shellcheck disable=SC1091
. /etc/os-release

if [[ "${ID:-}" != "ubuntu" && "${ID_LIKE:-}" != *ubuntu* ]]; then
    echo "Скрипт предназначен для Ubuntu. Обнаружено: ${PRETTY_NAME:-unknown}" >&2
    exit 1
fi

# Для производных дистрибутивов (Linux Mint и т.п.) берём кодовое имя Ubuntu
CODENAME="${UBUNTU_CODENAME:-${VERSION_CODENAME:-}}"
ARCH="$(dpkg --print-architecture)"

echo ">>> Ubuntu: ${PRETTY_NAME} (${CODENAME}), архитектура: ${ARCH}"

# --- Удаление старых/неофициальных пакетов -----------------------------------

echo ">>> Удаляю конфликтующие пакеты (если есть)..."
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
    apt-get remove -y "$pkg" >/dev/null 2>&1 || true
done

# --- Зависимости --------------------------------------------------------------

echo ">>> Устанавливаю зависимости..."
apt-get update
apt-get install -y ca-certificates curl gnupg

# --- Репозиторий Docker -------------------------------------------------------

echo ">>> Добавляю GPG-ключ и репозиторий Docker..."
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=${ARCH} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu ${CODENAME} stable" \
    > /etc/apt/sources.list.d/docker.list

# --- Установка Docker ---------------------------------------------------------

echo ">>> Устанавливаю Docker Engine..."
apt-get update
apt-get install -y \
    docker-ce \
    docker-ce-cli \
    containerd.io \
    docker-buildx-plugin \
    docker-compose-plugin

# --- Запуск сервиса -----------------------------------------------------------

echo ">>> Включаю автозапуск и запускаю сервис..."
systemctl enable --now docker

# --- Доступ без sudo ----------------------------------------------------------

TARGET_USER="${SUDO_USER:-}"
if [[ -n "$TARGET_USER" && "$TARGET_USER" != "root" ]]; then
    echo ">>> Добавляю пользователя '${TARGET_USER}' в группу docker..."
    usermod -aG docker "$TARGET_USER"
    NEED_RELOGIN=1
else
    NEED_RELOGIN=0
fi

# --- Проверка -----------------------------------------------------------------

echo ">>> Проверяю установку..."
docker --version
docker compose version

echo
echo "Готово! Docker успешно установлен."
if [[ "$NEED_RELOGIN" -eq 1 ]]; then
    echo "Чтобы использовать docker без sudo, перезайдите в систему"
    echo "или выполните: newgrp docker"
fi

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь

Latest article

Must read