- LINUX
- GIT
- DOCKER
- DOCKERFILE
- DOCKER-COMPOSE
- DOCKERSWARM
- KUBERNETES
- ANSIBLE
- BASH
- 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