🐳 Harbor 설치 가이드
Harbor란?
Harbor는 컨테이너 이미지를 저장하고 관리하는 Private Docker Registry이다.
핵심 역할
- Docker / Kubernetes 이미지 저장소
- 이미지 버전 관리 (tag)
- 사용자 인증 (계정 기반 접근)
- 보안 스캔 (Trivy 연동)
- 프로젝트 단위 권한 관리
즉, Docker Hub를 사내/내부망에서 직접 운영하는 시스템
0. 설치 단계 요약
- Harbor 다운로드
- 압축 해제
- harbor.yml 설정
- prepare 실행 (docker-compose 생성)
- docker-compose.yml 수정 (옵션)
- Harbor 실행 (docker compose up -d)
1. Harbor 다운로드 및 설치 파일 준비
wget https://github.com/goharbor/harbor/releases/download/v2.11.1/harbor-online-installer-v2.11.1.tgz
tar xvf harbor-online-installer-v2.11.1.tgz
rm harbor-online-installer-v2.11.1.tgz2. harbor.yml 설정
Harbor 전체 설정 파일
# ============================================================
# Harbor 설정 파일 — HTTP 전용 모드
# ============================================================
# - HTTPS 미사용 (내부망 / dsai 네트워크 공유)
# - dsai 외부 네트워크에 join하여 백엔드 컨테이너들이 직접 접근 가능
# ------------------------------------------------------------
# localhost / 127.0.0.1 은 절대 사용 금지 (외부 클라이언트 접근 불가).
hostname: 192.168.56.201
# ── HTTP 설정 ─────────────────────────────────────────────
http:
# HTTP 포트. 80 사용 시 docker login/push 시 포트 생략 가능.
# 기존 서비스와 충돌 회피를 위해 8088 사용.
port: 8888
# ── HTTPS 설정 (사용 안 함) ────────────────────────────────
# HTTP 전용 모드이므로 https 블록 전체 주석 처리.
# 추후 TLS 적용 시 아래 블록 활성화하고 인증서 경로 지정할 것.
#
# https:
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
# 최초 설치 시에만 적용되며, 이후엔 UI에서 변경해야 함.
harbor_admin_password: admin
# ── Harbor 내부 DB(PostgreSQL) 설정 ──────────────────────
database:
password: root123
# 유휴 커넥션 풀 최대 개수. 0 이하면 유휴 커넥션 미보유.
max_idle_conns: 100
# DB 오픈 커넥션 최대 개수 (Harbor용 postgres 기본값은 1024).
max_open_conns: 900
# 커넥션 최대 재사용 시간. 만료 시 lazy하게 닫힘.
conn_max_lifetime: 5m
# 커넥션 최대 유휴 시간. 0 이하면 유휴 시간으로 닫지 않음.
conn_max_idle_time: 0
# ── 데이터 볼륨 ───────────────────────────────────────────
# 호스트의 이 경로에 레지스트리 이미지, DB 데이터, 로그 등이 저장됨.
# 운영 시 충분한 디스크 용량 확보 필요 (수십 GB 이상 권장).
data_volume: /data/harbor
# ── Trivy 취약점 스캐너 설정 ──────────────────────────────
trivy:
# true 설정 시 fixed 가능한 취약점만 표시.
ignore_unfixed: false
# Trivy DB GitHub 다운로드 스킵 여부.
# CI/CD 환경 등에서 GitHub rate limit 회피용. 에어갭 환경이면 true.
skip_update: false
# Java DB 업데이트 스킵 여부.
skip_java_db_update: false
# 오프라인 스캔 모드 (외부 의존성 조회 비활성화).
offline_scan: false
# 탐지 대상: vuln(취약점), config(설정), secret(시크릿) 콤마 구분.
security_check: vuln
# 레지스트리 인증서 검증 스킵 여부.
insecure: false
# 스캔 작업 타임아웃 (상한은 30분).
timeout: 5m0s
# GitHub 토큰 (rate limit 5000/h 로 상향, 익명은 60/h).
# github_token: xxx
# ── Job Service 설정 ──────────────────────────────────────
jobservice:
# 동시 실행 가능한 잡 워커 최대 개수.
max_job_workers: 10
# 잡 로거 출력 대상: STD_OUTPUT, FILE, DB.
job_loggers:
- STD_OUTPUT
- FILE
# 잡 로그 스위퍼 주기 (일 단위).
logger_sweeper_duration: 1
# ── Webhook 알림 설정 ─────────────────────────────────────
notification:
# 웹훅 잡 최대 재시도 횟수.
webhook_job_max_retry: 3
# 웹훅 HTTP 클라이언트 타임아웃 (초).
webhook_job_http_client_timeout: 3
# ── 로깅 설정 ─────────────────────────────────────────────
log:
# 로그 레벨: debug, info, warning, error, fatal.
level: info
# 로컬 파일 로깅.
local:
# 로그 로테이션 보관 개수. 0이면 회전 없이 삭제.
rotate_count: 50
# 로그 회전 임계 크기. k, M, G 접미사 사용 가능.
rotate_size: 200M
# 호스트 내 로그 저장 경로.
location: /var/log/harbor
# 외부 syslog 엔드포인트 설정 (사용 시 주석 해제).
# external_endpoint:
# protocol: tcp
# host: localhost
# port: 5140
# 절대 수정 금지: 마이그레이션 도구가 설정 파일 버전을 감지하는 데 사용.
_version: 2.11.0
# ── 외부 프록시 설정 ──────────────────────────────────────
# 컴포넌트가 외부 인터넷 접근 시 사용할 HTTP 프록시.
# 내부망에 프록시가 있다면 http_proxy / https_proxy 지정.
# 컴포넌트 간 통신엔 적용되지 않음.
proxy:
http_proxy:
https_proxy:
no_proxy:
components:
- core
- jobservice
- trivy
# ── 업로드 임시 파일 자동 정리 ────────────────────────────
upload_purging:
# 자동 정리 활성화 여부.
enabled: true
# 업로드 디렉토리 내 파일 보존 기간 (기본 1주일).
age: 168h
# 정리 작업 실행 주기.
interval: 24h
# true면 실제 삭제 없이 로그만 남김.
dryrun: false
# ── 캐시 레이어 설정 ──────────────────────────────────────
# Redis 기반으로 project/repository/manifest 등을 캐싱.
# 높은 동시 manifest pull 성능 향상에 유용.
# HA 구성 시 모든 인스턴스가 동일하게 설정되어야 함 (데이터 정합성).
cache:
enabled: false
expire_hours: 242-1. 주요 설정 항목
- hostname
- http / https 설정
- admin password
- data volume path
- port 설정
3. prepare 실행 (docker-compose 생성)
harbor.yml 기반으로 docker-compose.yml 생성
./prepare --with-trivy # trivy 플러그인 추가
→ docker-compose.yml 자동 생성됨4.docker-compose.yml 수정 (필요 시)
선택 작업 (환경 따라 다름)
4-1. 수정하는 경우
- 포트 충돌
- 볼륨 경로 변경
- proxy / TLS 설정 추가
- 네트워크 구성 변경
5. Harbor 실행 (최종 실행)
cd /Users/test-platform/infra/harbor
docker compose up -d
## 컨테이너 확인 (docker ps)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
65992b3cfb56 goharbor/nginx-photon:v2.11.1 "nginx -g 'daemon of…" 7 minutes ago Up 7 minutes (healthy) 0.0.0.0:8888->8080/tcp nginx
96762fd78365 goharbor/harbor-jobservice:v2.11.1 "/harbor/entrypoint.…" 7 minutes ago Up 7 minutes (healthy) harbor-jobservice
d4ddf8dfb7a6 goharbor/harbor-core:v2.11.1 "/harbor/entrypoint.…" 7 minutes ago Up 7 minutes (healthy) harbor-core
bb77676ef049 goharbor/trivy-adapter-photon:v2.11.1 "/home/scanner/entry…" 7 minutes ago Up 7 minutes (healthy) trivy-adapter
ef86c550b1f4 goharbor/harbor-db:v2.11.1 "/docker-entrypoint.…" 7 minutes ago Up 7 minutes (healthy) harbor-db
141aeb3e5aca goharbor/redis-photon:v2.11.1 "redis-server /etc/r…" 7 minutes ago Up 7 minutes (healthy) redis
1d2161a008cc goharbor/registry-photon:v2.11.1 "/home/harbor/entryp…" 7 minutes ago Up 7 minutes (healthy) registry
f0b33a387b06 goharbor/harbor-portal:v2.11.1 "nginx -g 'daemon of…" 7 minutes ago Up 7 minutes (healthy) harbor-portal
0b21e06dacaa goharbor/harbor-registryctl:v2.11.1 "/home/harbor/start.…" 7 minutes ago Up 7 minutes (healthy) registryctl
605b7d88fd22 goharbor/harbor-log:v2.11.1 "/bin/sh -c /usr/loc…" 7 minutes ago Up 7 minutes (healthy) 127.0.0.1:1514->10514/tcp harbor-log6. 프로젝트 trivy 자동 스캔 설정
- Projects → [
Project Name] → 상단 Configuration - Vulnerability scanning 항목의
Automatically scan images on push클릭 → SAVE
'CI|CD Pipeline' 카테고리의 다른 글
| GitLab CI/CD 트러블슈팅 모음(CI/CD) (0) | 2026.05.31 |
|---|---|
| MinIO 구축 가이드(CI/CD) (0) | 2026.05.31 |
| GitLab CI 시작하기(CI/CD) (0) | 2026.05.24 |
| GitLab Variables 등록(CI/CD) (0) | 2026.05.24 |