Настраивали ли вы собственный Docker Registry?

«Настраивали ли вы собственный Docker Registry?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, разворачивал приватные Docker Registry для хранения внутренних образов. Использовал официальный образ registry:2. Основная задача — создать безопасное и отказоустойчивое хранилище, интегрированное в CI/CD.

Базовый запуск для тестирования:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

Конфигурация для production-среды включала:

  1. TLS/SSL: Настройка обратного прокси (Nginx или Traefik) с сертификатами от Let's Encrypt.
  2. Аутентификация: Интеграция с базовой аутентификацией (htpasswd) или, что чаще, с корпоративным SSO (например, через Dex или OAuth2 proxy).
  3. Хранение: Настройка бэкенда хранения на Amazon S3 или Google Cloud Storage для масштабируемости и надежности вместо локального диска.
  4. Кэширование: Настройка Registry как pull-through cache для публичных образов из Docker Hub, чтобы ускорить сборки и снизить зависимость от внешних репозиториев.

Пример docker-compose с аутентификацией и S3-бэкендом:

version: '3.8'
services:
  registry:
    image: registry:2
    container_name: registry
    ports:
      - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: "Registry Realm"
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_STORAGE: s3
      REGISTRY_STORAGE_S3_ACCESSKEY: ${AWS_ACCESS_KEY}
      REGISTRY_STORAGE_S3_SECRETKEY: ${AWS_SECRET_KEY}
      REGISTRY_STORAGE_S3_REGION: us-east-1
      REGISTRY_STORAGE_S3_BUCKET: my-company-docker-registry
    volumes:
      - ./auth:/auth

В CI/CD пайплайнах (GitLab CI, GitHub Actions) затем настраивал аутентификацию и push/pull команд docker login и docker push.