Как развернуть приватный Docker Registry на Ubuntu 22.04

Приватный Docker Registry позволяет хранить собственные образы контейнеров внутри компании или проекта. Это удобно, когда вы работаете с закрытым кодом, хотите ускорить деплой или просто не хотите публиковать образы в Docker Hub.

В этой инструкции разберём, как поднять собственный реестр Docker на Ubuntu 22.04, настроить HTTPS и защитить доступ базовой авторизацией.

Шаг 1. Установка Docker на Ubuntu 22.04

Сначала обновим систему:

sudo apt update
sudo apt upgrade -y

Установим зависимости:

sudo apt install ca-certificates curl gnupg lsb-release -y

Добавим официальный GPG-ключ Docker:

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Добавим репозиторий:

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

Установим Docker:

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

Проверим работу:

sudo systemctl status docker

Шаг 2. Запуск контейнера Registry

Docker Registry доступен как официальный образ в Docker Hub.

Создадим директорию для хранения данных:

sudo mkdir -p /opt/registry

Запустим реестр:

docker run -d \
  --name registry \
  -p 5000:5000 \
  -v /opt/registry:/var/lib/registry \
  --restart always \
  registry:2

Проверим, что контейнер работает:

docker ps

На этом этапе реестр доступен по адресу:

http://server_ip:5000

Но он пока не защищён и работает без HTTPS. Это небезопасно.

Шаг 3. Настройка домена и Nginx

Установим Nginx:

sudo apt install nginx -y

Создадим конфигурацию:

sudo nano /etc/nginx/sites-available/registry

Добавим:

server {
    listen 80;
    server_name registry.example.com;

    location / {
        proxy_pass http://localhost:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Активируем конфигурацию:

sudo ln -s /etc/nginx/sites-available/registry /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Шаг 4. Подключение HTTPS через Let's Encrypt

Установим Certbot:

sudo apt install certbot python3-certbot-nginx -y

Получим сертификат:

sudo certbot --nginx -d registry.example.com

После завершения Certbot автоматически обновит конфигурацию Nginx и включит HTTPS.

Проверить автообновление сертификатов можно так:

sudo systemctl status certbot.timer

Шаг 5. Настройка базовой авторизации

Создадим директорию для хранения файла паролей:

sudo mkdir -p /opt/registry/auth

Установим утилиту htpasswd:

sudo apt install apache2-utils -y

Создадим пользователя:

sudo htpasswd -Bc /opt/registry/auth/htpasswd admin

Остановим текущий контейнер:

docker stop registry
docker rm registry

Запустим заново с авторизацией:

docker run -d \
  --name registry \
  -p 5000:5000 \
  -v /opt/registry:/var/lib/registry \
  -v /opt/registry/auth:/auth \
  -e REGISTRY_AUTH=htpasswd \
  -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  --restart always \
  registry:2

Шаг 6. Подключение к реестру

Авторизуемся:

docker login registry.example.com

Соберём тестовый образ:

docker build -t registry.example.com/test-image .

Отправим его в реестр:

docker push registry.example.com/test-image

Проверить список репозиториев можно так:

curl -u admin https://registry.example.com/v2/_catalog

Такой вариант подходит для небольших команд, стартапов и внутренних CI/CD-процессов. При росте нагрузки можно добавить S3-бэкенд, настроить резервное копирование и подключить систему мониторинга.

Похожие статьи

Рекомендательные технологии Подробнее

Оптимизация Laravel-приложений с Octane

Полное руководство по Laravel Octane: от базовой концепции до настройки, особенностей и сравнения с классическим подходом. Узнайте, как Octane ускоряет Laravel-приложения и когда его стоит использовать.

Разработка и инструменты 6 месяцев назад

PHP Generators

Статья рассказывает о PHP генераторах - что это, как они работают, зачем нужны и как использовать их в реальных проектах. Примеры включают чтение больших CSV и потоковую обработку данных.

Разработка и инструменты 6 месяцев назад

Как установить Docker и Docker Compose на Ubuntu и RedHat системы (2025)

Подробная инструкция по установке Docker и Docker Compose на Debian-based и RedHat-based системы. Разбор всех команд по шагам, настройка GPG-ключей, добавление репозиториев, запуск сервиса, проверка и устранение типичных ошибок.