Пост

Организация собственного реестра Docker образов с помощью Harbor

Docker Container Registry - это сервер хранения и распространения образов Docker. Существует довольно много публичных реестров, такие как Docker Hub (по умолчанию), Amazon ECR, GitHub CR и так далее, но бесплатно распространять образы на подобных ресурсах можно только в открытом доступе. В платных опциях доступны приватные репозитории, однако, мы знаем примеры, когда доступ к удаленным серверам может внезапно “улетучиться” независимо от того, каким тарифом ты пользуешься.

💡 Нас же интересует вариант поднятия своего реестра в закрытом контуре, т.е. только для внутреннего использования.

✏️ Типовым решением является использование официального образа registry - простой и быстрый способ создания хранилища. Работает исправно, свою функцию выполняет, но для более гибкой настройки и управления существуют альтернативные варианты.

⚡️ Harbor - это open source self-hosted система управления хранилищем Docker образов, написанная на Go.

📌 Особенности

  • Контроль доступа (роли, политики) и SSO
  • Встроенный сканер безопасности Trivy
  • Репликация между инстансами Harbor и другими реестрами
  • Web-панель управления
  • REST API
  • Логи, метрики

Trivy как-то упоминал в цикле про работу с образами в Docker. Пример в 3 части на сайте.

⚒️ Установка

🔹 Скачиваем актуальную версию из релизов и распаковываем архив

1
2
wget https://github.com/goharbor/harbor/releases/download/v2.14.0/harbor-online-installer-v2.14.0.tgz
tar -zxvf harbor-online-installer-v2.14.0.tgz

🔹 Вносим правки в конфигурационный файл harbor.yml

1
2
3
cd harbor
cp harbor.yml.tmpl harbor.yml
vi harbor.yml
1
2
3
4
5
6
7
8
9
# поднимаю на домашней виртуалке, поэтому без https
hostname: 192.168.1.135
http:
  port: 80
#https:
  # port: 443
  # certificate: /your/certificate/path
  # private_key: /your/private/key/path
  # strong_ssl_ciphers: false

🔹 Запускаем установочный скрипт

1
2
# + опция для включения поддержки trivy
sudo ./install.sh --with-trivy

🔎 Управление через web-панель

  • Идем по указанному в hostname адресу (192.168.1.135 в моем случае).

По умолчанию администратор admin:Harbor12345 - не забываем поменять пароль при первом входе.

docker-harbor-screenshot-1

  • Здесь нам доступны проекты, репозитории, настройки доступов и политик хранения, а также подключенные сканеры с автоматической проверкой загружаемых образов. Интерфейс интуитивно понятен, подсказки имеются.

  • Проект в Harbor - это отдельное пространство со своими конфигурациями, правилами и политиками - все, что необходимо для грамотного распределения ответственности между разными командами и/или сервисами.

docker-harbor-screenshot-2

  • На странице проекта также генерируются подсказки по отправке образов в репозиторий этого проекта
1
2
3
4
5
# Пометить образ для этого проекта
docker tag SOURCE_IMAGE[:TAG] 192.168.1.135/desoft_ru/REPOSITORY[:TAG]

# Отправить образ в этот проект
docker push 192.168.1.135/desoft_ru/REPOSITORY[:TAG]

🎈 Таким образом, получаем удобную и функциональную площадку для организации работы с образами без зависимости от внешних сервисов, что не только обезопасит от внезапного ограничения доступа к публичным хранилищам, но и повысит скорость развертывания, защитит от утечек и несанкционированного доступа.

docker-harbor-screenshot-3

docker-harbor-screenshot-4

Больше полезной информации в Telegram-канале