DigitalOceanのContainerRegistryは、Dockerイメージを保存および配布するためのクラウド内のプライベートスペースを提供します。このサービスは、画像リポジトリを提供するだけでなく、DigitalOceanの他のサービスにも統合されています。保存されたイメージをAppPlatformにデプロイして、マネージドKubernetesクラスターで使用できます。
Container Registryは、DockerイメージをDigitalOceanアカウント内に保持できるDockerHubの競合製品です。他のDigitalOcean機能を使用してこれらの画像にアクセスする場合に最適です。アプリのプライベートイメージ用に別の有料DockerHubアカウントを設定する必要はありません。
Container Registryに保持されているデータは、複数のDigitalOceanデータセンターリージョン間で自動的に負荷分散されます。これにより、コンテナを起動してマシンにプルする際の画像検索が高速化されます。他のDigitalOcean機能とは異なり、コンテナレジストリのデータセンターを手動で選択することはできません。
DigitalOceanのレジストリ実装はOCIに準拠しているため、使い慣れたエコシステムツールを使用して相互作用できます。 docker push
などのコマンド およびdocker pull
レジストリのクレデンシャルをCLIに追加すると、「正常に機能」します。同様に、Kubernetesなどのオーケストレーターは、レジストリ内の画像を問題なく参照できます。
Container Registryは無料で利用できますが、無料プランにはいくつかの厳しい制限があります。 1つのイメージリポジトリ(トップレベルのイメージ名)、500 MBのストレージ、および500 MBのアウトバウンドデータ転送上限を取得します。これは、サービスの評価には十分ですが、長期的な使用にはおそらく適していません。 $ 5 /月の基本プランでは5つのリポジトリと5GBが提供され、$20/プロフェッショナルバージョンでは無制限のリポジトリと100GBのストレージが提供されます。ストレージの超過分は$0.02/GBで請求されます。
DigitalOceanコントロールパネルにログインし、左側のサイドバーにある[ContainerRegistry]リンクをクリックしてレジストリを作成します。新しいレジストリに名前を付けて、ストレージプランを選択します。名前は、すべてのDigitalOceanレジストリでグローバルに一意である必要があるため、最初の選択肢が利用できない場合があります。文字、数字、ハイフンを含めて最大63文字で構成する必要があります。
新しいレジストリの作成には数秒かかる場合があります。プロセスが完了すると、レジストリのダッシュボード画面が表示されます。
DockerCLIの接続
次のステップは、DockerCLIをレジストリに接続することです。アカウントを使用してイメージをプッシュおよびプルできるように、Dockerにレジストリクレデンシャルを提供する必要があります。これを実現するには、3つの方法があります。
Doctlの使用
DigitalOceanの公式コマンドラインユーティリティであるDoctlには、DockerクライアントをContainerRegistryと連携するように構成する便利なスクリプトが含まれています。
この方法を使用するには、DoctlをインストールしてDigitalOceanアカウントに認証する必要があります。次のコマンドを実行して、統合を設定します。
doctl registry login
DigitalOceanAPIトークンの使用
DigitalOcean APIトークンを使用して、コンテナレジストリへの認証を行うことができます。 DigitalOceanアカウントの左側のサイドバーの下部にある[API]リンクをクリックして、トークンを生成します。 「GenerateNewToken」をクリックして名前を付け、次のポップアップで「GenerateToken」を押します。
トークン値が表示されます。後で取得することはできませんので、これをメモしてください。ここでCLIに戻り、docker login
を使用します レジストリに接続するコマンド:
docker login registry.digitalocean.com
ユーザー名とパスワードの入力を求められます。生成されたAPIトークンの値を両方に使用します 田畑。 Dockerは、アカウントに属するDigitalOceanレジストリと対話できるようになります。
Dockerクレデンシャルファイルのダウンロード
APIキーを生成したり、Doctlを使用したりしない場合は、Container Registryダッシュボードページに移動し、右上の青い[アクション]ボタンをクリックします。メニューから「Docker資格情報のダウンロード」を選択します。
このファイルはDocker互換のconfig.json
これには、レジストリの資格情報が含まれます。メインの~/.docker/config.json
とマージすることができます ファイルするか、--config
を使用します docker
でフラグを立てる コマンド:
docker --config ~/downloaded-config.json pull registry.digitalocean.com/<your-registry-name>/example-image:latest
Dockerを使用した画像のプッシュとプル
Dockerが正しく構成されると、CLIを使用してContainerRegistryでイメージをプッシュおよびプルできるようになります。画像は次の形式でタグ付けする必要があります:
registry.digitalocean.com/<your-registry-name>/example-image:latest
既存の画像のコピーをレジストリにプッシュする簡単な例を次に示します。
docker pull httpd:latest docker tag httpd:latest registry.digitalocean.com/<your-registry-name>/httpd:latest docker push registry.digitalocean.com/<your-registry-name>/httpd:latest>
DigitalOceanコントロールパネルでレジストリのダッシュボードに移動します。新しくプッシュされた画像がレジストリ内に表示されます。画像をクリックすると、利用可能なタグが表示されます。右端にある3つのドットのアイコンをクリックし、メニューから選択して、特定のタグまたは画像で使用可能なすべてのタグを削除します。
レジストリから画像を削除すると、残りのマニフェストで使用されなくなった冗長レイヤーが残る可能性があります。これらのレイヤーは、引き続きストレージコストにカウントされます。
DigitalOceanは、孤立したレイヤーとマニフェストを削除するためのガベージコレクション機能を提供します。ガベージコレクションによってストレージスペースが解放されると、レジストリのダッシュボード画面にタイルが表示されます。 「ゴミを空にする」をクリックしてプロセスを開始します。
クリーンアップの一部としてタグなしマニフェストを削除するかどうかを選択できるポップアップダイアログが表示されます。これらはタグが割り当てられていない有効な画像であるため、registry.digitalocean.com/<your-registry-name>/example-image:a1bc23
などの完全なIDでのみ参照できます。 。これらのマニフェストを意図的に保持しない限り、通常は削除することが望ましいです。
Garbage Collectionは、未使用のレイヤーがすべて削除されるまで、レジストリを読み取り専用状態にします。クリーンアップの間、新しいプッシュは拒否されます。収集は既存の書き込みが完了するまで開始されないため、プロセスを開始してから少し遅れる場合があります。進行状況は、コントロールパネルのレジストリのダッシュボードページに表示されます。
DigitalOceanは、自動ガベージコレクションを提供していません。ただし、DoctlとDigitalOcean APIを使用してプロセスを実行することは可能であるため、独自のスクリプトを作成し、cron
でスケジュールすることができます。 。
DigitalOceanのContainerRegistryは、Dockerイメージを保存するための便利な方法を提供します。既存のDigitalOceanAPIトークンを使用してレジストリに対して認証します。 APIトークンは、アカウントへの完全なアクセスを提供することに注意してください。レジストリアクセスに限定されません。
DockerHubを優先してContainerRegistryを使用する必要があるかどうかは、イメージで何をするかによって決まります。それらをDigitalOceanにデプロイする場合は、イメージをインフラストラクチャと並べて配置し、パフォーマンスを最大化するのが理にかなっています。ただし、Docker Hubには、セキュリティの問題にすばやくフラグを立てることができる自動イメージ再構築や脆弱性スキャンなど、他の領域にも利点があります。 DigitalOceanのサービスにはこれらのどちらもありません。代わりに、純粋でシンプルな画像ストレージに重点を置いています。