Docker Hubが「無料かつ無制限」ではなくなった今
午前2時に鳴り響く電話のベルは、往々にして深刻なトラブルの合図です。当社のCI/CDパイプラインが突然停止し、429 Too Many Requestsというエラーを吐き出しました。実際、Docker Hubは制限を厳格化しており、無料アカウントでは6時間あたり100〜200回のプルしか許可されていません。K8sシステムが20〜30ノードにスケールアップすると、この回数は瞬く間に使い果たされてしまいます。
さらに、企業のコアコードを含むイメージをパブリッククラウドに保存することは、常にデータ漏洩のリスクを孕んでいます。インフラを完全に制御し、サードパーティに依存したくないのであれば、独自の**Private Docker Registry**を構築することは不可欠なステップです。単なるデフォルトのRegistryではなく、Harborは私がこれまで導入してきた中で最も包括的なソリューションです。
なぜHarborが企業にとって最適な選択肢なのか?
Harborは単なるイメージの保存場所ではありません。それはHelm Chartを含むArtifactエコシステムの管理プラットフォームです。Harborが優れている理由は以下の通りです:
- 直感的なインターフェース: すべてをWeb UIで管理でき、各レイヤーをコマンドで確認するような「手探り」の状態から解放されます。
- 厳格な権限管理(RBAC): Devチームはプルのみ、DevOps/CI-CDチームのみがイメージをプッシュできるように制限できます。
- Trivyによる脆弱性スキャン: イメージがプッシュされた直後に、古いライブラリやCVE(共通脆弱性識別子)を自動的に検出します。
- クリーンアップポリシー(Retention Policy): 30日以上経過した古いイメージを自動削除したり、最新の5バージョンのみを保持したりすることで、ストレージ容量を節約できます。
インフラの準備:RAMを惜しまないこと
インフラ面では、Harborは多くのサブサービス(PostgreSQL、Redis、Core、Jobservice)を実行します。最低でも2 CPU、4GB RAMの構成を推奨します。ただし、継続的な脆弱性スキャン機能を有効にする場合は、メモリ不足(OOM)によるシステムハングを避けるために**8GB RAM**まで増設することをお勧めします。
Dockerがインストールされていることを確認してください。現在ではDocker Compose v2(docker composeコマンド)が標準となっています。v2に移行することで、コンテナ管理がよりスムーズで安定したものになります。
# Docker Composeのバージョンを確認
docker compose version
Harborのインストール手順
ステップ1:インストーラーのダウンロード
最初のダウンロード容量を節約するため、Online Installerの使用をお勧めします。スクリプトの実行中に、必要なイメージが自動的にプルされます。
wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-online-installer-v2.9.0.tgz
tar xvzf harbor-online-installer-v2.9.0.tgz
cd harbor
ステップ2:harbor.ymlファイルの設定
設定ファイルが鍵となります。サンプルファイルをコピーして、重要なパラメータを編集しましょう:
cp harbor.yml.tmpl harbor.yml
nano harbor.yml
以下の行に注意してください:
- hostname: 自分のドメインを入力します(例:
hub.itfromzero.com)。 - https: Dockerはデフォルトで安全な接続を要求します。前段にNginx Proxy ManagerやCloudflareを使用している場合は、このファイルのHTTPSセクションを無効にして、プロキシ側でSSLを処理させることで設定を簡略化できます。
- data_volume: イメージの保存先です。このパーティションに少なくとも50〜100GBの空き容量があることを確認してください。
ステップ3:セキュリティ機能の有効化
Harborをただインストールするだけでなく、Trivyを統合してレジストリをセキュリティの要塞にしましょう:
sudo ./install.sh --with-trivy
このプロセスには約5分かかります。ターミナルに成功メッセージが表示されたら、管理画面にアクセスできるようになります。
実際の運用:イメージのプッシュとスキャン
ログイン後、デフォルトのパブリックプロジェクトをそのまま使うのではなく、すぐに新しい**Project**を作成してください。また、**”Automatically scan images on push”**オプションを有効にすることを忘れないでください。脆弱性のあるイメージを即座に特定できるため、安心して運用できるようになります。
ローカルマシンからのイメージプッシュ操作
まず、個人のレジストリで認証を行う必要があります:
docker login hub.itfromzero.com
# Harborの構造に合わせてイメージにタグを付ける
docker tag my-app:latest hub.itfromzero.com/itfromzero-project/my-app:v1
# システムにイメージをプッシュする
docker push hub.itfromzero.com/itfromzero-project/my-app:v1
イメージに古いOpenSSLなどの脆弱なライブラリが含まれている場合、Harborのダッシュボードに赤い警告が表示されます。これは、本番環境にデプロイする前に開発者に修正を依頼するのに非常に役立ちます。
トラブルシューティングのヒント
最も一般的な問題は**ディスク容量の不足**です。新しいイメージをビルドするたびに、古いレイヤーが「untagged」として残ります。**Administration -> Garbage Collection**に移動し、週次で実行するスケジュールを設定して容量を解放しましょう。
自己署名証明書を使用しているためにx509: certificate signed by unknown authorityというエラーが発生した場合は、クライアントマシンのDocker設定ファイルにレジストリを登録する必要があります:
# /etc/docker/daemon.json ファイルを編集
{
"insecure-registries" : ["hub.itfromzero.com"]
}
その後、systemctl restart dockerを実行して変更を適用してください。
おわりに
Harborの導入は、プロフェッショナルを目指すあらゆるDevOpsチームにとって価値のある投資です。帯域幅コストを節約できるだけでなく、データを完全に掌握できます。初期のSSL設定やリソースの最適化には少し手間がかかるかもしれませんが、Harborが提供する安定性とセキュリティは疑いようのないものです。

