コンテナ運用が広がるほど、イメージは増え、更新頻度も上がります。外部レジストリ依存は便利ですが、
レート制限・仕様変更・障害・ポリシー変更の影響を受けやすいのが現実です。
そしてAI基盤(LLMサーバ、RAG、MCPサーバ、各種ワーカー)が増えると、イメージ配布は「運用の配管」になります。
レジストリは単なる保管庫ではなく、社内ソフトウェア流通の中核です。
今回は初期段階の現実解として、単一ノード+ローカルディスクで始めます。 「最初からS3互換や分散ストレージ」へ飛ばず、まずは運用の論点(容量、GC、バックアップ、更新)を押さえる設計です。
Harborはイメージ層が増えるとストレージを食います。初期は小さく始めても、拡張前提で考えておくのが安全です。
本番運用を意識するならHTTPSは必須です。証明書は大きく2つ:
Docker公式リポジトリを使う例です(必要に応じて社内標準へ合わせてください)。
# 1) 依存
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
# 2) GPG key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 3) repo
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 4) install
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 5) 動作確認
docker version
docker compose version
sudo usermod -aG docker $USER
# 反映には再ログインが必要
Harborはバージョンによってファイル名が変わるため、ここでは <HARBOR_VERSION> を変数として書きます。
(例:v2.x.y のような形式)
# 作業ディレクトリ例
sudo mkdir -p /opt/harbor
cd /opt/harbor
# 例:Harbor Online Installer を取得(URLはバージョンで変わります)
# curl -LO https://github.com/goharbor/harbor/releases/download/<HARBOR_VERSION>/harbor-online-installer-<HARBOR_VERSION>.tgz
# 展開
tar -xzf harbor-online-installer-*.tgz
cd harbor
sudo mkdir -p /data/harbor
sudo chown -R root:root /data/harbor
sudo chmod 700 /data/harbor
多くの環境では harbor.yml.tmpl をコピーして編集します。
以下は単一ノード・ローカルディスク・ローカルユーザー認証で始めるための例です。
パスやドメインはあなたの環境に置き換えてください。
# /opt/harbor/harbor/harbor.yml (例)
hostname: harbor.example.local
http:
port: 80
https:
port: 443
certificate: /etc/ssl/certs/harbor.crt
private_key: /etc/ssl/private/harbor.key
harbor_admin_password: "CHANGE_ME_STRONG_PASSWORD"
database:
password: "CHANGE_ME_DB_PASSWORD"
max_idle_conns: 50
max_open_conns: 100
data_volume: /data/harbor
# ログ(初期はINFOでOK。トラブル時はDEBUGへ)
log:
level: info
local:
rotate_count: 50
rotate_size: 200M
location: /var/log/harbor
# Trivy(脆弱性スキャン)。インターネット接続ありなら有効にする価値が高い
trivy:
ignore_unfixed: true
severity: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL"
# 初期段階は外部認証を入れない(ローカルユーザーのみ)
/etc/ssl/certs/harbor.crt と /etc/ssl/private/harbor.key を参照しています。# /opt/harbor/harbor/harbor で
sudo ./install.sh
起動確認:
docker ps --format "table {.Names} {.Status} {.Ports}"
クライアント(Harborにpush/pullする側)で以下のように登録します。
sudo mkdir -p /etc/docker/certs.d/harbor.example.local
sudo cp /path/to/harbor-ca.crt /etc/docker/certs.d/harbor.example.local/ca.crt
sudo systemctl restart docker
docker login harbor.example.local
# 例:projectを "demo" とした場合
docker tag hello-world:latest harbor.example.local/demo/hello-world:latest
docker push harbor.example.local/demo/hello-world:latest
docker pull harbor.example.local/demo/hello-world:latest
“単一ノード+ローカルディスク”の成否はバックアップで決まります。最低限:
# 例:harbor-db コンテナ名は環境で違う場合があるので docker ps で確認
docker ps | grep -i harbor
# DB dump(例)
docker exec -t harbor-db pg_dump -U postgres -d registry > harbor_db_$(date +%F).sql
# データ領域のバックアップ(例:rsyncやtar)
sudo tar -czf harbor_data_$(date +%F).tgz /data/harbor
イメージを消しても、レイヤ(blob)が即座に物理削除されないケースがあります。 そのため、定期GCと、イメージ削除ポリシー(タグ運用)をセットで設計します。
# 単純な確認
df -h
du -sh /data/harbor/*
監視は最初は軽くてOKですが、容量逼迫は突然きます。初期から「何が増えているか」を見える化しておくと事故が減ります。
Harborはコンポーネントが多いので、更新前に必ず:
初期段階は、まず「更新できる運用プロセス」を作ることが最大の価値です。
registry:2 は軽量ですが、企業運用で欲しくなる機能(RBAC、スキャン、UI、監査、レプリケーション)を自前で積み上げがちです。 初期からHarborを選ぶと、運用の“欲しい”が早く揃い、後戻りが減ります。
第65回で扱ったMCPの流れでは、AIは既存システムを「読む」だけでなく「実行」へ進みます。
実行系のサービスが増えるほど、コンテナのビルド・配布・更新が増えます。Harborはその土台になります。