harbor는 private container image registry이다.
harbor를 docker로 배포하고 계정 인증(LDAP)이나 기타 사항에 대한 내용을 생각나는 대로 정리해보고자 한다.
환경
Rocky Linux 9
Harbor 2.12.2
Docker 설치
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable docker
systemctl start docker
Docker-compose 설치
curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Harbor 다운로드
wget https://github.com/goharbor/harbor/releases/download/v2.12.2/harbor-offline-installer-v2.12.2.tgz
tar zxvf harbor-offline-installer-v2.12.2.tgz
cd harbor
Harbor.yml 수정
hostname에 접근할 도메인이나 IP주소를 입력한다.
http로 구성하기 위해 https 부분은 주석처리 한다.
admin 계정의 초기 password를 입력한다.
cp -arf harbor.yml.tmpl harbor.yml
vim harbor.yml
hostname: harbor.test.com
# https:
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
max_open_conns: 1024
harbor_admin_password: Harbor12345
Harbor 설치
취약점 스캐너인 trivy 도 같이 설치한다.
# 설치하기 전에
./prepare --with-trivy
# 설치
./install.sh --with-trivy
설치가 완료되면 docker-compose 파일이 생성된다.
ls -al
...
-rw-r--r-- 1 root root 6562 Jan 24 11:49 docker-compose.yml
...
Harbor 이미지 확인
docker-compose -f docker-compose.yml ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------
harbor-core /harbor/entrypoint.sh Up (healthy)
harbor-db /docker-entrypoint.sh 14 15 Up (healthy)
harbor-jobservice /harbor/entrypoint.sh Up (healthy)
harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal nginx -g daemon off; Up (healthy)
nginx nginx -g daemon off; Up (healthy) 0.0.0.0:80->8080/tcp,:::80->8080/tcp
redis redis-server /etc/redis.conf Up (healthy)
registry /home/harbor/entrypoint.sh Up (healthy)
registryctl /home/harbor/start.sh Up (healthy)
trivy-adapter /home/scanner/entrypoint.sh Up (healthy)
Http 접속을 위한 Docker 설정
vim /etc/docker/daemon.json
{ "insecure-registries" : ["harbor.test.com"]
}
# docker 재시작
systemctl restart docker
Harbor LDAP 연동하기
harbor.yml 에서 설정한 admin 패스워드를 사용하여 Harbor GUI 로그인한다.
관리 - 설정 - 인증 에서 인증모드 LDAP에 대한 설정을 한다.
AD에서 harbor에 대한 그룹을 생성하고 해당 그룹에 속한 사용자만 접속이 허용되도록 필터 설정한다.
&(objectCategory=User)(memberOf=cn=harbor,DC=test,DC=com)
참고 : 데이터베이스 사용자가 1명 이상 있는 상태에서는 다른 인증 모드로 변경이 되지 않는다. 사용자를 모두 삭제해야만 다른 인증모드로 변경이 가능해 진다.
Harbor 프로젝트 생성
프로젝트 - 새프로젝트 에서 test라는 이름으로 비공개 프로젝트를 생성한다.
Docker 이미지 Push/Pull
test 프로젝트를 클릭하고 들어가면 푸시 명령어를 볼수 있다.
위 내용대로 일단 Docker에 로그인 하기 위해 robot 계정을 생성한다.
robot 계정은 이미지 Push를 위한 CI 툴 등에서 사용 할때 적합하다.
프로젝트 - test - 로봇계정 - 새로봇계정 에서 test-robot라는 이름으로 만료가 없는 계정을 생성한다.
Robot 계정을 이용하여 Docker 로그인한다.
robot\$test+test-robot 에서 문자처리를 위해 $앞에 \를 추가한다.
docker login harbor.test.com -u robot\$test+test-robot -p x3IYNoNWoClQdLTq9R6feLvQqi2wABHB
이미지 tag 후 push/pull 한다.
# push
docker tag nginx:latest harbor.test.com/test/nginx:0.0.1
docker push harbor.test.com/test/nginx:0.0.1
# pull
docker pull harbor.test.com/test/nginx:0.0.1
[참고] Docker 토막 지식
# 서비스 중지
docker-compose -f docker-compose.yml stop
# 서비스 시작
docker-compose -f docker-compose.yml start
# 서비스 중지 및 삭제
docker-compose -f docker-compose.yml down
# 관련 리소스 삭제
docker-compose down --rmi all --volumes --remove-orphans
# 사용되지 않는 모든 이미지 삭제
docker image prune -a
# 사용되지 않는 모든 볼륨 삭제
docker volume prune
모든 중지된 컨테이너 삭제
docker container prune