ШПАРГАЛКИ
CI/CD
KUBERNETES
  • DOCKERFILE
  • DOCKER-COMPOSE
  • JENKINSFILE
  • JENKINS-PIPELINE
  • GITLAB CI/CD
  • GROOVIE
  • INSTALL
  • PODS
  • INGRESS

Harbor - поднимаем локальный docker-registry

Harbor — весьма популярный продукт, представляющий собой опенсорсный облачный реестр, который легко интегрируется с Docker Hub, Docker Registry, Google Container Registry и так далее. Сегодня мы научимся его ставить в локальной среде для наших любимых Dev`ов.

Начнем с того, что создадим новую виртуалку для всего этого. Послее ее создания нам нужно будет поставить docker и docker-compose. Ну а потом уже и сам Harbor с проверкой образов на уязвимости. Поехали.

Последние релизы Docker-Compose
Последние релизы Harbor

Ставим docker и docker-compose

sudo apt-get update && \
sudo apt-get install docker.io -y  && \
sudo systemctl start docker && \
sudo systemctl enable docker && \
sudo usermod -aG docker $USER && \
newgrp docker && \
sudo curl -L \
"https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose && \
sudo chmod +x /usr/local/bin/docker-compose

Качаем и распаковываем Harbor

wget https://github.com/goharbor/harbor/releases/download/v2.2.0/harbor-online-installer-v2.2.0.tgz && \
tar xvzf harbor-online-installer-v2.2.0.tgz && \
rm harbor-online-installer-v2.2.0.tgz && \
cd harbor

Затем, папку с Harbor лучше перенести в то место, от куда он будет запускаться. Например на подключенный RAID или в корень системы.

Создадим необходимые сертификаты.

Harbor не может правильно работать без ключей SSL. Если вы используете Harbor в производственной среде, вам нужно будет использовать сертификаты от доверенного центра сертификации. Поскольку в этой статье я только показываю, как его ставить, то тут я создаю самозаверяющие сертификаты.

При создании сертификатов вам придется отвечать на вопросы. По идее, можно их просто пропустить энтером.

SERVER=server.local
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt
openssl req -newkey rsa:4096 -nodes -sha256 -keyout $SERVER -out $SERVER
echo "subjectAltName = IP:$SERVER" > ./extfile.cnf
openssl x509 -req -days 3650 -in $SERVER -CA ca.crt -CAkey ca.key -CAcreateserial -extfile extfile.cnf -out $SERVER
openssl req -new -x509 -text -key ca.key -out ca.cert
sudo mkdir -p /etc/docker/certs.d/$SERVER
sudo cp *.crt *.key *.cert /etc/docker/certs.d/$SERVER
sudo cp ca.crt /usr/local/share/ca-certificate/ca.crt
sudo update-ca-certificates
sudo systemctl restart docker.service

По траблшутингу локальных сертификатов написано туть и туть

А что бы docker login работал на других машинах, нужно копирнуть самоподписанный сертификат на них в Ubuntu:

scp HARBOR_HOST:/home/inecs/harbor/ca.crt /usr/local/share/ca-certificate/ca.crt
sudo update-ca-certificates
sudo systemctl restart docker.service

Для CentOS

scp HARBORHOST: /home/inecs/harbor/ca.crt /usr/local/share/ca-certificate/ca.crt
sudo update-ca-trust
sudo systemctl restart docker.service

Конфигурируем Harbor перед установкой.

cp harbor.yml.sample harbor.yml

Нужно поправить следующие опции:

  • hostname — доменное имя или IP
  • port — порт.
  • password (в конфигурации БД)
  • data_volume: /data -- путь где будут хранится образы, БД и прочее...

Измените пути к ключам:

certificate:/etc/docker/certs.d/SERVER/ca.crt
private_key:/etc/docker/certs.d/SERVER/ca.key

Если у вас есть Prometheus, то раскомментируйте в самом конце следующие строки. Думаю, не нужно объяснять, что и за чем.

# metric:
#   enabled: false
#   port: 9090
#   path: /metrics

И вообще. Пробегитесь глазами. Очень много чего можно сконфигурировать.

Установка Harbor

sudo ./install.sh --with-notary --with-trivy --with-chartmuseum

После скачивания образов и установки Harbor запустится на том порту, который вы указали ранее.

Дефолтный юзер admin и пароль: Harbor12345 (обязательно смените его)

Инсталлятор создает конфиги и файл docker-compose.yaml. Так что все это хозяйство можно остановить.

Если что всплывет, то позже добавлю.

Хороший мануал есть вот тут

Да. Вот еще небольшой скриптик по пушу в Harbor:

#!/bin/bash

PROJECT=project_name
IMAGE=image_name
TAG=tag
USERNAME=harbor_user
HOST=harbor_host
PORT=harbor_port

echo "Building image from Dockerfile"
sudo docker build -t $IMAGE:$TAG .

echo "Login to HARBOR Registry"
sudo docker login -u $USERNAME $HOST:$PORT

echo "Tagging and pushing image to Harbor"
sudo docker tag $IMAGE:$TAG $HOST:$PORT/$PROJECT/$IMAGE:$TAG
sudo docker push $HOST:$PORT/$PROJECT/$IMAGE:$TAG

echo "Logout"
sudo docker logout

Оцените статью

Vasya
Written by Vasya on Май 11, 2022
Спасибо за статью, но много ошибок. Например Измените пути к ключам: server.local должно быть