Как развернуть приватный 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-бэкенд, настроить резервное копирование и подключить систему мониторинга.

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

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

Laravel MCP - AI-взаимодействия по универсальному стандарту

Laravel MCP - новая библиотека для Laravel, которая позволяет легко создавать AI-серверы по универсальному протоколу Model Context Protocol. MCP даёт структурированный способ взаимодействия AI-клиентов с вашим приложением через инструменты, ресурсы и шаблоны запросов.

Как уменьшить размер PDF в Linux

В Linux уменьшать размер PDF проще всего через Ghostscript, а для отдельных случаев подходят ps2pdf, ImageMagick, cpdf и графические редакторы. Выбор метода зависит от того, что именно раздувает файл: изображения, сканы, шрифты или лишняя структура.