Гид по технологиям

Установка и базовое использование Docker на Debian 11 Bullseye

• 8 min read • DevOps • Обновлено 25 Nov 2025
Установка Docker на Debian 11 — полное руководство
Установка Docker на Debian 11 — полное руководство

Логотип Docker на фоне сервера

О чём эта инструкция

Эта пошаговая инструкция рассчитана на системных администраторов и разработчиков, которые хотят установить Docker CE (Community Edition) на Debian 11 Bullseye и получить рабочий набор команд для повседневной работы: установка зависимостей, добавление репозитория Docker, запуск контейнеров, работа с томами, просмотр логов и базовая отладка.

Кому пригодится: инженерам DevOps, разработчикам, тестировщикам и инженерам поддержки.

Краткие определения в одну строку:

  • Docker: платформа для упаковки приложений в контейнеры с изоляцией на уровне ОС.
  • Контейнер: лёгкая среда, запускающая приложение и его зависимости.
  • Образ (image): шаблон контейнера, из которого создаются запущенные экземпляры.

Предварительные требования

  • Сервер с Debian 11 Bullseye. Обновите пакеты перед началом.
  • Доступ root или пользователь с правами sudo.
  • Подключение к интернету для загрузки пакетов и образов.

Важно: если вы используете облачный провайдер (VPS), проверьте, что виртуализация поддерживает запуск контейнеров.

Установка зависимостей

Сначала установим базовые пакеты, необходимые для добавления внешнего репозитория и работы apt через HTTPS.

Выполните:

apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

При появлении приглашения введите ‘y’ и нажмите Enter, чтобы подтвердить установку.

Установка зависимостей для Docker

Добавление репозитория Docker

Мы будем устанавливать Docker из официального репозитория Docker, чтобы получать актуальные пакеты.

  1. Импортируйте GPG-ключ Docker:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. Добавьте репозиторий для Debian 11:
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Обновите кэш пакетов:
apt update

Добавление ключа и репозитория Docker

Теперь система готова к установке Docker.

Установка Docker на Debian 11

  1. Если раньше на системе устанавливался пакет docker из репозиториев Debian, удалите конфликты:
sudo apt remove docker docker-engine docker.io containerd runc
  1. Установите Docker CE, клиент и контейнерный рантайм:
apt install docker-ce docker-ce-cli containerd.io

Подтвердите установку нажатием ‘y’ и Enter.

  1. Проверьте, что сервисы включены и работают:
systemctl is-enabled docker
systemctl is-enabled containerd

systemctl status docker containerd

Ниже примерный вывод, который вы увидите, если всё в порядке.

Проверка статуса сервисов Docker и Containerd

Если сервисы active (running) и enabled — они будут автоматически запускаться при старте системы.

Доступ для non-root пользователя

По умолчанию Docker требует прав root. Чтобы позволить запускать контейнеры без sudo, добавьте пользователя в группу docker.

Пример: создадим пользователя johndoe и дадим ему доступ.

  1. Создание пользователя:
useradd -m -s /bin/bash johndoe
  1. Добавление в группу docker:
usermod -aG docker johndoe
  1. Войдите под пользователем и проверьте:
su - johndoe

docker run hello-world

Вы должны увидеть приветственное сообщение от образа hello-world.

Запуск docker hello-world от не-root пользователя

Объяснение поведения команды docker run hello-world

  • Docker ищет локальный образ hello-world. Если его нет, загрузит с Docker Hub.
  • Затем создаст контейнер и выполнит его, который печатает приветствие и завершится.

Проверить запущенные и все контейнеры:

docker ps

docker ps -a

Docker автоматически присваивает контейнерам случайные имена вроде bold_bartix — вы можете указывать имя с помощью –name.

Базовые операции с Docker: образы и контейнеры

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

  1. Скачивание образа nginx:alpine:
docker pull nginx:alpine

Тег (tag) — это версия/вариант образа. nginx:alpine означает nginx на базе Alpine Linux.

Загрузка образа nginx:alpine

Посмотреть локальные образы:

docker images

Список локальных образов

  1. Запуск контейнера nginx с сопоставлением порта и удалением при остановке:
docker run -it --rm -d -p 8080:80 --name web nginx:alpine

Разбор ключей:

  • -i, –interactive — держит STDIN открытым.
  • -t, –tty — выделяет псевдотерминал.
  • –rm — удаляет контейнер после завершения.
  • -d — запуск в фоновом режиме (detached).
  • -p 8080:80 — пробрасывает порт 80 контейнера на порт 8080 хоста.
  • –name web — присваивает контейнеру имя web.

Проверка:

docker ps

Откройте в браузере: http://:8080 (пример: http://192.168.1.10:8080/) — вы увидите страницу nginx index.

Проверка Nginx внутри контейнера

  1. Логи контейнера:
docker logs web

docker logs --tail 10 web

Просмотр логов Docker контейнера

  1. Остановка контейнера:
docker stop web

Если контейнер был запущен с –rm, он удалится автоматически после остановки.

Остановка и проверка контейнеров

Тома и привязки (volumes и bind mounts)

Чтобы хранить данные вне контейнера или служить статическими файлами, используйте тома или привязки каталога (bind mounts).

Пример: смонтируем локальную папку ~/data в /usr/share/nginx/html:

  1. Создайте директорию и файл index.html:
mkdir -p ~/data/
nano ~/data/index.html

Пример содержимого index.html:




  
  Welcome to Docker Nginx


  

Hello from Nginx container

Сохраните (Ctrl+x, y, Enter).

  1. Запустите контейнер с монтированием:
docker run -it --rm -d -p 8080:80 --name web -v ~/data:/usr/share/nginx/html nginx:alpine

Проверка в браузере покажет ваш кастомный index.html.

Nginx с кастомным index.html и монтированным томом

Разница между томом и bind mount:

  • Bind mount: монтируется конкретная директория хоста; удобен для разработки.
  • Volume (docker volume): управляется Docker и предпочтителен для продакшн данных и бэкапа.

Совет: используйте абсолютные пути в -v и избегайте привязки домашней директории с правами root для обеспечения безопасности.

Вход внутрь контейнера и диагностика

Подключение к работающему контейнеру:

docker exec -it web /bin/sh

Внутри контейнера можно проверить hostname, IP и маршрутизацию:

hostname
ip a
route -n

Подключение к контейнеру через docker exec

Удаление всех контейнеров в состоянии exited:

docker rm $(docker ps --filter "status=exited" -q)

Очистка образов и неиспользуемых объектов:

docker system prune
# более агрессивно:
docker system prune -a

Внимание: prune -a удалит все неиспользуемые образы, включая те, которые могут понадобиться.

Лучшие практики и безопасность

  • Запускайте только проверенные образы. Смотрите подписи и официальные репозитории.
  • Ограничивайте ресурсы контейнеров (CPU, память) через –cpus, –memory.
  • Не монтируйте /var/run/docker.sock в контейнер без крайней необходимости — это даёт привилегии управления демоном.
  • Используйте user namespaces и rootless Docker, если нужна изоляция от host root.
  • Обновляйте Docker и containerd своевременно.
  • Для production: используйте централизованное логирование, мониторинг и управление секретами (HashiCorp Vault, Docker secrets в Swarm/Kubernetes).

Примеры ограничения ресурсов:

docker run -d --name limited --memory=512m --cpus="1.0" nginx:alpine

Отладка проблем — руководство

Сценарий: Docker не запускается. Проверки:

  • systemctl status docker — есть ли ошибки в Journal?
  • journalctl -u docker -n 200 –no-pager
  • Проверить /var/log/syslog на системные ошибки.
  • Проверить свободное место: df -h (иногда образы не извлекаются из-за заполненного диска).

Сценарий: контейнер не доступен по сети.

  • docker ps — порт сопоставлен ли корректно?
  • iptables/nftables — блокирует ли трафик?
  • Проверить, слушает ли порт на хосте: ss -ltnp | grep 8080

Сценарий: image pull зависает или медленно скачивается.

  • Проверьте сетевой доступ к registry (curl https://registry-1.docker.io).
  • Внутри CI используйте локальный registry-кеш (например, регистр с proxy).

Управление образами: теги, версии и стратегия хранения

Рекомендации:

  • Всегда фиксируйте теги в деплой-конфигурациях (nginx:1.23.1 вместо nginx:latest).
  • Используйте семантическое версионирование и CI, который билдит и пушит образы с тегами CI номера.
  • Храните Immutable images — не перекатывайте продакшн-контейнеры на основе latest без тестов.

Команды полезные:

docker tag myapp:latest registry.example.com/myorg/myapp:1.2.3

docker push registry.example.com/myorg/myapp:1.2.3

CI/CD и создание собственного образа — краткая инструкция

Простой Dockerfile для приложения на Node.js:

FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
CMD ["node","server.js"]

Сборка и локальная проверка:

docker build -t myapp:1.0.0 .
docker run -p 3000:3000 myapp:1.0.0

В CI: билд — тесты — пуш в registry — деплой на staging/prod с проверкой интеграции и откатом.

Миграция с Docker из репозитория Debian на официальный репозиторий

Если ранее использовался пакет docker.io из официального Debian repo, стоит удалить старые пакеты и использовать docker-ce из официального репозитория Docker, чтобы получать более свежие версии и доступ к новым возможностям.

Шаги:

  • Удалить старые пакеты (см. раздел выше).
  • Добавить официальный ключ и репозиторий.
  • Установить docker-ce и containerd.
  • Проверить совместимость версий и интеграцию с systemd.

Шаблон проверки (Pre-deployment checklist)

Перед деплоем контейнера в production выполните:

  • Образ промодерирован и провёрнут сканерами уязвимостей.
  • Теги фиксированы, не используется latest.
  • Ограничены ресурсы памяти и CPU.
  • Логи отправляются в централизованную систему.
  • Мониторинг и алерты настроены.
  • Выполнен smoke-test после деплоя в staging.

Роль-ориентированные чек-листы

Администратор:

  • Установить Docker и обновления безопасности.
  • Настроить резервное копирование томов.
  • Отслеживать потребление ресурсов и логи.

Разработчик:

  • Создавать минимальные образы и фиксировать теги.
  • Использовать многослойные Dockerfile для уменьшения размера.
  • Локально тестировать контейнеры перед пушем.

Инженер DevOps:

  • Настроить CI/CD пайплайн с тестами и проверками безопасности.
  • Управлять репозиториями образов и доступом.

Типичные команды-«шпаргалка» (Cheat sheet)

  • docker ps — список запущенных контейнеров
  • docker ps -a — все контейнеры
  • docker logs — логи
  • docker exec -it /bin/sh — попасть в контейнер
  • docker images — локальные образы
  • docker rmi — удалить образ
  • docker rm — удалить контейнер
  • docker system prune -a — удалить неиспользуемые объекты

Когда Docker может не подойти (ограничения)

  • На системах с ограничениями по безопасности и требованием глубокой изоляции (полная виртуализация) лучше использовать виртуальные машины.
  • Для очень высоких требований к сетевой изоляции и безопасности стоит рассмотреть Kata Containers или полноценные VM.
  • Для stateful больших баз данных нужен тщательный подход к томам и резервному копированию.

Примеры отката (rollback) — быстрый план

Если новый контейнер с тегом v2 вызывает проблемы:

  1. Откатить сервис к предыдущему образу: docker run –name app_old … myapp:v1
  2. Если используется orchestrator (Swarm/Kubernetes) — выполнить rollback через его команду.
  3. Провести анализ логов и метрик, затем создать фикс и повторить релиз.

Сводка ключевых рекомендаций

  • Устанавливайте Docker из официального репозитория для актуальных версий.
  • Давайте не-root доступ через группу docker, но оценивайте риски.
  • Используйте тома и правильные монтирования для хранения данных.
  • Фиксируйте теги образов и настраивайте CI/CD.
  • Ограничивайте ресурсы контейнеров и следите за безопасностью.

Важное: прежде чем применять команды удаления (prune, rmi -f), проверьте, что вы не потеряете жизненно важные образы или данные.

Заключение

Поздравляем — вы установили Docker на Debian 11 Bullseye и прошли базовую практику: добавление репозитория, установка, разрешения для non-root пользователей, запуск контейнеров nginx, монтирование томов, просмотр логов и базовую отладку. Дальше рекомендуем:

  • Создать Pipeline для сборки собственных образов.
  • Настроить мониторинг и сканирование уязвимостей.
  • Освоить оркестраторы (Kubernetes или Docker Swarm) для управления многоконтейнерными окружениями.

Заметка: для production-инфраструктуры рассмотрите использование приватного registry и систем безопасности/аудита.


Ключевые шаги:

  • Установить зависимости и добавить официальный репозиторий Docker.
  • Установить docker-ce и containerd.
  • Добавить пользователя в группу docker и проверить docker run hello-world.
  • Запустить nginx:alpine, пробросить порт и смонтировать локальную директорию.

Приятной работы с контейнерами!

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро