パブリックな Docker Hub だけに頼るコンテナ運用には、レート制限・セキュリティ・コンプライアンスの面で限界があります。エンタープライズ環境では、イメージの完全な制御、脆弱性の自動スキャン、アクセス制御を備えたプライベートコンテナレジストリが不可欠です。
Harbor は CNCF 卒業プロジェクトのオープンソースコンテナレジストリで、まさにこれらの要件を満たします。Kubo のコンテナ基盤でも Harbor をプライベートレジストリとして活用しており、本記事ではその構築から運用までを実践的に解説します。
Harbor とは: なぜ今プライベートレジストリが必要か
Docker Hub は便利ですが、本番環境では以下の課題が顕在化します:
- レート制限: 無料アカウントでは 6 時間あたり 100 Pull の制限
- セキュリティ: 公開イメージの信頼性検証が困難
- コンプライアンス: イメージの保管場所とアクセスログの管理要件
- ネットワーク: インターネット経由の Pull による遅延とコスト
VMware のブログでは、Harbor を「モダンプライベートクラウドのためのエンタープライズ対応コンテナレジストリ」と位置づけています。
Harbor の主要機能:
| 機能 | 説明 |
|---|---|
| コンテナイメージ管理 | Docker イメージと OCI アーティファクトの保存・配信 |
| Helm チャート管理 | ChartMuseum 統合による Helm チャートのホスティング |
| 脆弱性スキャン | Trivy 内蔵による自動脆弱性スキャン |
| RBAC | プロジェクト・ロールベースのアクセス制御 |
| レプリケーション | 複数レジストリ間のイメージ同期 |
| イメージ署名 | Cosign / Notary によるイメージ署名検証 |
| ガベージコレクション | 未使用イメージの自動クリーンアップ |
Captain.AI と Harbor を連携させることで、AI ワーカーのコンテナイメージ管理を自動化できます。
Harbor のインストール方法
Harbor は VM ベースのインストールと Kubernetes 上の Helm デプロイの 2 つの方法で構築できます。
方法1: VM ベースインストール
システム要件
| 項目 | 最小要件 | 推奨 |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| メモリ | 4 GB | 8 GB |
| ストレージ | 40 GB | 160 GB |
| OS | Ubuntu 22.04 / RHEL 9 | Ubuntu 24.04 |
| Docker | Docker Engine 20.10+ | 最新版 |
| Docker Compose | v2.0+ | 最新版 |
# 1. Harbor インストーラーのダウンロード
wget https://github.com/goharbor/harbor/releases/download/v2.12.0/harbor-online-installer-v2.12.0.tgz
tar xzvf harbor-online-installer-v2.12.0.tgz
cd harbor
# 2. 設定ファイルの編集
cp harbor.yml.tmpl harbor.yml
harbor.yml の主要設定:
hostname: harbor.example.com
# HTTPS 設定(本番必須)
https:
port: 443
certificate: /etc/ssl/certs/harbor.crt
private_key: /etc/ssl/private/harbor.key
# 管理者パスワード
harbor_admin_password: StrongPassword123!
# データベース設定
database:
password: db-password
max_idle_conns: 100
max_open_conns: 900
# ストレージ設定
data_volume: /data/harbor
# 3. Trivy 付きでインストール
./install.sh --with-trivy
# 4. 動作確認
docker compose ps
curl -k https://harbor.example.com/api/v2.0/health
Harbor 公式のインストールドキュメントに詳細な手順が記載されています。
方法2: Kubernetes 上の Helm デプロイ
CNCF のデプロイガイドで推奨されている方法です。高可用性が必要な本番環境に適しています。
# Helm リポジトリの追加
helm repo add harbor https://helm.goharbor.io
helm repo update
# values.yaml の作成
cat <<EOF > harbor-values.yaml
expose:
type: ingress
ingress:
hosts:
core: harbor.example.com
className: nginx
tls:
enabled: true
certSource: secret
secret:
secretName: harbor-tls
externalURL: https://harbor.example.com
persistence:
enabled: true
persistentVolumeClaim:
registry:
size: 100Gi
database:
size: 10Gi
trivy:
enabled: true
EOF
# Harbor のデプロイ
helm install harbor harbor/harbor \
-f harbor-values.yaml \
-n harbor --create-namespace
Kubo の Kubernetes クラスタでは、Helm デプロイが推奨されます。
RBAC とプロジェクト管理
Harbor の RBAC はプロジェクト単位でアクセス権限を管理します。
ロール階層
| ロール | Push | Pull | スキャン | メンバー管理 | 設定変更 |
|---|---|---|---|---|---|
| Project Admin | ○ | ○ | ○ | ○ | ○ |
| Maintainer | ○ | ○ | ○ | × | × |
| Developer | ○ | ○ | × | × | × |
| Guest | × | ○ | × | × | × |
| Limited Guest | × | △(特定タグ) | × | × | × |
プロジェクト設定例
# Harbor CLI でプロジェクト作成
curl -X POST "https://harbor.example.com/api/v2.0/projects" \
-H "Authorization: Basic $(echo -n 'admin:password' | base64)" \
-H "Content-Type: application/json" \
-d '{
"project_name": "production",
"metadata": {
"public": "false",
"auto_scan": "true",
"prevent_vul": "true",
"severity": "high"
}
}'
prevent_vul: true と severity: high を設定すると、HIGH 以上の脆弱性を含むイメージの Pull がブロックされます。HostMyCode のセキュリティハードニングガイドで詳しく解説されています。
Trivy 統合による脆弱性管理
Harbor に内蔵された Trivy は、イメージの Push 時に自動で脆弱性スキャンを実行します。
自動スキャンの設定
- プロジェクト設定 > Configuration で「Automatically scan images on push」を有効化
- 脆弱性の重大度閾値を設定(例: HIGH 以上の脆弱性でブロック)
- スキャンスケジュールを設定(例: 毎日深夜に全イメージを再スキャン)
スキャン結果の確認
# API でスキャン結果を取得
curl "https://harbor.example.com/api/v2.0/projects/production/repositories/myapp/artifacts/latest/additions/vulnerabilities" \
-H "Authorization: Basic $(echo -n 'admin:password' | base64)"
スキャン結果は Harbor UI で視覚的に確認でき、CVE ID、重大度、修正可能バージョンが表示されます。
CVE ホワイトリスト
誤検出や許容済みの脆弱性は、プロジェクト単位で CVE ホワイトリストに登録できます。Aqua Security の Harbor Scanner Trivy リポジトリに詳細な設定方法があります。
レプリケーションとディザスタリカバリ
Harbor のレプリケーション機能は、複数のレジストリインスタンス間でイメージを自動同期します。
レプリケーションターゲット
Harbor は以下のレジストリとの双方向レプリケーションをサポートします:
- Harbor(他のインスタンス)
- Docker Hub
- AWS ECR
- Google Artifact Registry
- Azure ACR
- OCI 準拠の任意のレジストリ
レプリケーションポリシー
{
"name": "sync-to-dr",
"src_registry": { "id": 0 },
"dest_registry": { "id": 1 },
"dest_namespace": "production",
"trigger": {
"type": "event_based"
},
"filters": [
{ "type": "name", "value": "production/**" },
{ "type": "tag", "value": "v*" }
],
"enabled": true
}
イベントベーストリガー(Push 時に即座にレプリケーション)と、スケジュールベーストリガー(定期的な同期)を選択できます。
Shipyard のレジストリ比較記事では、Harbor のレプリケーション機能がエンタープライズ環境での大きな差別化要因として評価されています。
まとめ: エンタープライズ対応のコンテナレジストリ
Harbor は、以下の機能を統合したエンタープライズ対応のプライベートコンテナレジストリです:
- Trivy 内蔵: Push 時自動スキャンで脆弱性を即座に検出
- RBAC: プロジェクト・ロール単位のきめ細かいアクセス制御
- レプリケーション: マルチレジストリ間のイメージ同期と DR 対策
- イメージ署名: Cosign / Notary による改ざん防止
- Helm チャートホスティング: Kubernetes デプロイの統合管理
Kubo では、コンテナワークロードの本番基盤として Harbor を中核に据えたイメージ管理パイプラインを構築しています。Captain.AI との連携により、イメージの脆弱性対応から自動デプロイまでをワンストップで実現できます。
Harbor の導入やコンテナレジストリの運用について、ぜひお問い合わせください。