ℹ️ Harbor
CNCF에서 graduated된 안정성 있는 오픈소스 프로젝트로, Docker Registry 구축 및 Web GUI를 통한 관리 기능을 제공.
구축 환경
서버1
- 홈네트워크 외부로부터 80, 443 포트를 포워딩 받는 'web gateway' 역할
- apache2 웹서버 및 prometheus 모니터링 서버 구동 중
서버2
- Harbor를 설치 및 구동시킬 서버
- registry는 이미지 push/pull 작업(= Disk I/O)이 주 기능이므로 SDD 사용중인 서버2에 Harbor 세팅
아키텍처

Apache2
서버1의 웹 서버로, 홈네트워크 외부로부터의 80, 443포트 트래픽을 전달 받음.
Prometheus
시스템/프로세스 모니터링 시스템으로, Harbor로부터 지표(metric)을 수집.
Harbor
Docker Private Registry + Web GUI.
Docker를 통해 구동.
[구축] 서버1 세팅
apache2, letsencrypt(certbot)은 설치되어 있다고 가정
- SSL 인증서 발급 (Let's Encrypt)
# apache plugin 설치
sudo apt install certbot python3-certbot-apache
# 인증서 발급
sudo certbot --apache \
-d docker.hyeonwoo.com- apache2 설정
/etc/apache2/sties-available/docker-ssl.conf 파일 생성 및 아래와 같이 작성
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName docker.hyeonwoo.com
# SSL 인증서 경로 지정
SSLCertificateFile /etc/letsencrypt/live/docker.hyeonwoo.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/docker.hyeonwoo.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/docker.hyeonwoo.com/chain.pem
# 프록시 설정
ProxyPreserveHost On
ProxyRequests Off
AllowEncodedSlashes NoDecode
ProxyPass / http://10.10.10.52:5050/
ProxyPassReverse / http://10.10.10.52:5050/
# Harbor는 WebSocket도 쓰니까 추가
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/(.*) ws://10.10.10.52:5050/$1 [P,L]
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
</VirtualHost>
</IfModule>모듈/사이트 활성화
# 프록시 기능을 지원하는 apache2 모듈 활성화
sudo a2enmod proxy proxy_http
# 위에서 작성한 virtual host 활성화
cd /etc/apache2/sites-available
sudo a2ensite docker-ssl
# apache2 재시작
sudo systemctl restart apache2[구축] 서버2
docker 설치되어 있다고 가정
사용할 디렉터리
[working dir]/var/harbor
[data dir]/var/harbor/data
[log dir]/var/log/harbor
Harbor 다운로드
# 디렉터리 준비
sudo mkdir -p /var/harbor/data
cd /var/harbor
# online installer 다운로드 (현시점 최신버전 2.13.2, 필요 시 아래 url에서 버전명 수정하여 다운로드 진행)
sudo wget https://github.com/goharbor/harbor/releases/download/v2.13.2/harbor-online-installer-v2.13.2.tgz
# 압축 해제
sudo tar xvf harbor-online-installer-v2.13.2.tgz다운로드 후 /var/harbor 디렉터리 구조
/var/harbor
├── data
├── harbor # 압축해제하면 생기는 디렉터리
└── harbor-online-installer-v2.13.2.tgz초기 설정값 지정
- 설정파일 생성 (제공된 템플릿파일을 복사)
cd harbor sudo cp harbor.yml.tmpl harbor.yml- harbor.yml 파일 수정
❗️ 기본 템플릿에 모든 항목이 다 적혀있으므로 주석해제 또는 value 변경만 하면 됨. 즉, 그대로 복사해서 사용하면 에러 발생 위험 있음
hostname: docker.hyeonwoo.com
http:
port: 5050
data_volume: /var/harbor/data
external_url: https://docker.hyeonwoo.com
log:
# options are debug, info, warning, error, fatal
level: info
local:
rotate_count: 5
# default: bytes. k, M, G (k 소문자 맞음)
rotate_size: 10M
location: /var/log/harbor
metric:
enabled: true
port: 9090
path: /metricsharbor 설치
sudo ./install.sh이후 harbor 컨테이너가 실행되고, 이 때 harbor.yml 파일의 내용을 초기 설정값으로 취함.
install.sh 파일을 살펴보면, 간략하게 다음 과정을 실행하는 것을 알 수 있음.
- 동일 디렉터리의 commom.sh파일 실행
- 동일 디렉터리의 prepare 파일을 실행
- docker compose up -d (이미 실행중이면 down 먼저 하고 up 실행)
/var/harbor/harbor
├── LICENSE
├── common
├── common.sh
├── docker-compose.yml
├── harbor.yml
├── harbor.yml.tmpl
├── install.sh
└── prepare⬇️ 실제 install.sh 파일 내용 (일부)
# ...
DIR="$(cd "$(dirname "$0")" && pwd)"
source $DIR/common.sh
#...
./prepare $prepare_para
echo ""
if [ -n "$DOCKER_COMPOSE ps -q" ]
then
note "stopping existing Harbor instance ..."
$DOCKER_COMPOSE down -v
fi
echo ""
h2 "[Step $item]: starting Harbor ..."
$DOCKER_COMPOSE up -d
success $"----Harbor has been installed and started successfully.----"
ℹ️ harbor 접속을 위한 초기 admin 계정
ID: admin
PW: Harbor12345
❗️ install.sh 실행하기 전에 harbor.yml에harbor_admin_password설정값을 지정하여 초기 비밀번호를 다른 값으로 지정할 수 있지만, 민감정보를 파일에 남기고 싶지 않아서 install 후 harbor에 접속하여 비밀번호 변경함.
방화벽 설정
harbor 접속을 위한 5050포트, 지표 수집을 위한 9090포트 허용
sudo ufw allow 5050
sudo ufw allow 9090동작 확인
✅ 브라우저에서 https://docker.hyenonwoo.com 에 접속하여 로그인 테스트
✅ 홈네트워크에 VPN 연결 후, 브라우저에 http://10.10.10.52:9090/metrics url 입력하여 지표 조회 테스트
✅ 도커 로그인, 이미지 푸시 테스트
docker login docker.hyeonwoo.comdocker push docker.hyeonwoo.com/<project>/<image>:<tag>
harbor.yml 변경사항 반영
로그레벨, 로그 로테이팅, 포트 등 설정값을 변경했다면 아래 명령으로 반영
cd /var/harbor/harbor
docker compose down
./prepare # 실행가능한 shell script 파일
docker compose up -d
❗️
harbor_admin_password를 비롯한 몇몇 설정값은 맨처음 설치(install.sh 실행) 시에만 반영되고 이후에는 값을 변경하더라도 반영되지 않음