Skip to content

PavelMilanov/container-registry

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

320 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Container Registry


Проект представляет собой реализацию контейнерного реестра, построенного на основе официальной спецификации Docker Registry, которая описана в документации distribution. Основная цель данного проекта — предоставить функциональность для хранения и управления контейнерными образами с поддержкой стандартных операций, таких как загрузка, выгрузка, и поиск образов, аналогично Docker Hub, но с возможностью локальной настройки и развертывания.

Особенности

  • Совместимость с Docker Registry API: Полная поддержка Docker Registry HTTP API v2, что позволяет использовать реестр с различными инструментами, поддерживающими стандарт Docker.
  • Безопасность: Реализованы основные механизмы аутентификации и авторизации для безопасного доступа к реестру.
  • Масштабируемость: Реализована возможность создавать несколько логических реестров для каждого проекта\стека.
  • Гибкость: Реализована подключение различных видов хранилищ (локальное или S3).

Стек технологий

  • Реализация основывается на Docker Distribution, что гарантирует совместимость с существующими инструментами экосистемы Docker.
  • Использован Go для реализации серверной логики.
  • Использован Solid.js для реализации клиентского UI.

Установка

Docker

docker volume create registry-data
docker run -d --restart unless-stopped -p 5050:5050 \
-v ./conf:/registry/conf.d:ro \
-v registry-data:/registry/var \
--name registry rosomilanov/container-registry

Docker compose

services:
  registry:
    image: rosomilanov/container-registry:latest
    container_name: registry
    restart: unless-stopped
    ports:
      - 5050:5050
    volumes:
      - ./conf:/registry/conf.d:ro
      - registry-data:/registry/var

volumes:
  registry-data:

Сервис будет доступен по адресу http://192.168.1.38:5050/login

вход

Конфигурация

  • Конфигурация приложения осуществляется в декларативном стиле с помощью файла конфигурации config.yaml
  • Пример конфигурации для локального хранилища:
server:
  realm: http://192.168.1.38:5050
  service: 192.168.1.38:5050
  issuer: local-registry
  jwt: qwerty

storage:
  type: local

user:
  login: test
  password: test
  • Пример конфигурации для S3 хранилища:
server:
  realm: http://192.168.1.38:5050
  service: 192.168.1.38:5050
  issuer: local-registry
  jwt: qwerty

storage:
  type: s3
  credentials:
    endpoint: https://storage.network.net
    access_key: your_access_key
    secret_key: your_secret_key
    ssl: true

user:
  login: test
  password: test
  • папку с файлом config.yaml необходимо смонтировать в контейнер по пути /registry/conf.d

Использование

  • создать реестр через веб-интерфейс:

репозиторий

  • авторизоваться в container registry:
docker login -u test -p test 192.168.1.38:5050
  • собрать образ по правилу <адрес docker registry>/<название реестра>:<тег> - 192.168.1.38:5050/dev/alpine

  • загрузить образ:

docker push 192.168.1.38:5050/dev/postgres:17
  • скачать образ:
docker pull 192.168.1.38:5050/dev/postgres:17

образ