Harbor は、Docker や Kubernetes で利用するコンテナイメージを内部で保管するためのプライベートコンテナレジストリです。Docker Hub などの外部レジストリだけに依存せず、検証済みイメージや内部向けイメージを管理したい場合に使います。
この記事では、Harbor を単なる Docker 手順としてではなく、Kubernetes や Helm Chart 管理とつながる内部レジストリとして整理します。重要なのは、イメージを置けることだけではなく、TLS、証明書信頼、harbor.yml、クライアント側の認証、再現性をまとめて扱うことです。
なぜ Harbor が必要なのか
- 内部でビルドしたコンテナイメージを保管する
- 外部レジストリへの依存を減らす
- 閉域環境やプロキシ環境でイメージ配布を安定させる
- Kubernetes ノードから取得するイメージを管理する
- Helm Chart や OCI artifact の保管場所としても使える
Kubernetes を運用すると、イメージの取得元はインフラの一部になります。Pod 定義や Helm Chart だけを管理しても、参照先のイメージが消えたり、外部通信に依存したりすると再現性が落ちます。
構成の前提
Harbor は Web UI、registry、database、jobservice など複数のコンポーネントで構成されます。小規模環境では Harbor のインストーラを使って Docker Compose ベースで起動する構成が扱いやすいです。
- Harbor 用の FQDN を用意する
- TLS 証明書を用意する
- Docker または containerd から信頼できる CA を配置する
- Harbor のデータ保存先を決める
- バックアップ対象を明確にする
TLS 証明書を用意する
Harbor は内部向けでも TLS を前提にした方がよいです。自己署名証明書や内部 CA を使う場合は、Harbor サーバーだけでなく、Docker / containerd / Kubernetes ノード側で CA を信頼させる必要があります。
sudo mkdir -p /etc/docker/certs.d/harbor.example.com
sudo cp ca.crt /etc/docker/certs.d/harbor.example.com/ca.crt
sudo systemctl restart dockercontainerd を使う Kubernetes ノードでは、containerd 側のレジストリ設定や OS の信頼ストアも確認します。証明書の問題は、ログインや pull の失敗として現れやすいです。
Harbor インストーラを取得する
Harbor のバージョンは更新されるため、実際に構築する時点でリリースを確認します。以下は流れの例です。
sudo mkdir -p /opt/harbor
cd /opt
sudo wget https://github.com/goharbor/harbor/releases/download/vX.Y.Z/harbor-offline-installer-vX.Y.Z.tgz
sudo tar xzf harbor-offline-installer-vX.Y.Z.tgz
sudo rm -f harbor-offline-installer-vX.Y.Z.tgz古い手順の固定バージョンをそのまま使うのではなく、利用する Docker / Kubernetes / Harbor の組み合わせを確認してから進めます。
harbor.yml を設定する
Harbor の主要設定は harbor.yml に記述します。サンプルをコピーしてから編集します。
cd /opt/harbor
sudo cp harbor.yml.tmpl harbor.yml
sudo sed -n '1,160p' harbor.yml最低限、hostname、TLS 証明書、データ保存先、管理者パスワードを確認します。
hostname: harbor.example.com
https:
port: 443
certificate: /path/to/server.crt
private_key: /path/to/server.key
data_volume: /data/harborhostname は、Docker / containerd / Kubernetes から参照するレジストリ名と一致させます。ここが曖昧だと、証明書の名前不一致や pull 失敗につながります。
Harbor を起動する
設定ができたら、インストールスクリプトで Harbor を起動します。
cd /opt/harbor
sudo ./prepare
sudo ./install.sh
sudo docker compose ps古い環境では docker-compose、新しい環境では docker compose を使う場合があります。環境に合わせて確認します。
ログインと push / pull を確認する
Docker クライアントから Harbor にログインし、イメージを push / pull できるか確認します。
docker login harbor.example.com
docker pull nginx:latest
docker tag nginx:latest harbor.example.com/library/nginx:latest
docker push harbor.example.com/library/nginx:latest
docker pull harbor.example.com/library/nginx:latestここで失敗する場合は、認証、プロジェクト権限、TLS 証明書、名前解決、プロキシ設定を切り分けます。
Kubernetes から利用する
Kubernetes から private image を取得する場合は、imagePullSecret を使います。
kubectl create secret docker-registry harbor-regcred \
--docker-server=harbor.example.com \
--docker-username=<user> \
--docker-password=<password> \
--docker-email=admin@example.comapiVersion: v1
kind: Pod
metadata:
name: harbor-pull-test
spec:
imagePullSecrets:
- name: harbor-regcred
containers:
- name: nginx
image: harbor.example.com/library/nginx:latestKubernetes ノード側で Harbor の CA を信頼していない場合、Secret が正しくても pull に失敗します。認証と TLS 信頼は別の問題として確認します。
運用で管理するもの
- Harbor の FQDN と TLS 証明書
- Harbor のデータディレクトリ
- プロジェクトと権限
- イメージのタグ付けルール
- Kubernetes 側の imagePullSecret
- バックアップとリストア手順
まとめ
Harbor は、内部コンテナレジストリとして Docker / Kubernetes の運用を支える基盤です。単にイメージを置くだけではなく、TLS、証明書信頼、認証、プロジェクト権限、Kubernetes からの pull、バックアップまで含めて設計します。
Kubernetes を継続運用するなら、マニフェストや Helm Chart だけでなく、そこから参照されるコンテナイメージも管理対象です。Harbor を用意することで、外部レジストリ依存を減らし、閉域環境や自宅インフラでも再現性のあるコンテナ運用を作りやすくなります。
書籍
Kubernetes完全ガイド 第2版
Kubernetes の仕組み、リソース、ネットワーク、運用観点を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
関連記事
- Kubernetes Harbor の導入 – Helm でコンテナレジストリを構築する
- Kubernetes MetalLB を Helm で導入する – Harbor で Chart を管理する考え方
- VMware TKG 向け Harbor 構築 – 閉域 Kubernetes の内部レジストリ
- Photon OS 4 Harbor 構築 – 内部コンテナレジストリの作り方
- Ubuntu 22.04 containerd の設定 – Kubernetes ノード向けに SystemdCgroup を有効化する
- Kubernetes クラスター構築 – kubeadm で controlPlaneEndpoint と CNI を整理する


