ウェブサイト検索

DigitalOceanのコンテナレジストリでDockerイメージをプッシュおよびプルする方法


DigitalOceanのコンテナレジストリは、Dockerイメージを保存および配布するためのプライベートなクラウドスペースを提供します。イメージリポジトリを提供するだけでなく、このサービスはDigitalOceanの他のサービスとも統合されています。保存されたイメージをApp Platformにデプロイし、Managed Kubernetesクラスタで使用することができます。

利点と特徴

コンテナレジストリは、Docker Hubの競合であり、Docker画像をDigitalOceanアカウント内に保持することができます。他のDigitalOcean機能でこれらの画像にアクセスする場合に最適です。アプリのプライベート画像用に別途有料のDocker Hubアカウントを設定する必要はありません。

コンテナレジストリに保管されているデータは、複数のDigitalOceanデータセンターリージョンに自動的に負荷分散されます。これにより、コンテナを起動してそれらをマシンにプルするときのイメージ取得が速くなります。他のDigitalOceanの機能とは異なり、コンテナレジストリのデータセンターを手動で選択することはできません。

DigitalOceanのレジストリ実装はOCI準拠であるため、馴染みのあるエコシステムツールを使用してやりとりできます。コマンドのような

docker push

そして

docker pull

CLIにレジストリの認証情報を追加すれば、「そのまま動作する」ようになります。同様に、Kubernetesなどのオーケストレーターも、あなたのレジストリ内のイメージを参照するのに問題はありません。

レジストリを作成する

コンテナレジストリは無料で利用できますが、無料プランにはいくつかの厳しい制限があります。1つのイメージリポジトリ(最上位のイメージ名)、500MBのストレージ、500MBのデータ転送上限があり、サービスを評価するには適していますが、長期的な使用にはおそらく不適切です。月5ドルのベーシックプランでは5つのリポジトリと5GBのストレージが提供され、月20ドルのプロフェッショナル版では無制限のリポジトリと100GBのストレージが付いてきます。ストレージの超過分は1GBあたり0.02ドルで請求されます。

DigitalOceanのコントロールパネルにログインし、左側のサイドバーの「コンテナレジストリ」リンクをクリックしてレジストリを作成します。新しいレジストリに名前を付け、ストレージプランを選択します。この名前はすべてのDigitalOceanレジストリの中でグローバルに一意である必要があるため、最初の選択が利用できない可能性があります。名前は文字、数字、ハイフンを含む最大63文字で構成する必要があります。

新しいレジストリを作成するのに数秒かかる場合があります。プロセスが完了すると、レジストリのダッシュボード画面に移動します。

Docker CLIを接続する

次のステップは、Docker CLIをレジストリに接続することです。Dockerにレジストリの資格情報を供給する必要があり、これによりアカウントを使用してイメージをプッシュおよびプルできるようになります。これを実現する方法は3つあります。

Doctlを使用する

DigitalOceanの公式コマンドラインユーティリティであるDoctlには、Dockerクライアントをコンテナレジストリと連携させる便利なスクリプトが含まれています。

この方法を使用するには、Doctlをインストールし、DigitalOceanアカウントに認証されている必要があります。統合を設定するには、以下のコマンドを実行してください。

doctl registry login

DigitalOcean APIトークンを使用して

DigitalOceanのAPIトークンは、コンテナレジストリに対する認証に使用できます。DigitalOceanアカウントの左サイドバーの下部にある「API」リンクをクリックしてトークンを生成します。「新しいトークンを生成」をクリックし、名前を付けて、次のポップアップで「トークンを生成」を押します。

トークンの値が表示されます。後で取得できなくなるので、これをメモしておいてください。次に、CLIに戻り、docker login コマンドを使ってレジストリに接続してください:

docker login registry.linux-console.net

ユーザー名とパスワードの入力を求められます。生成したAPIトークンの値を両方のフィールドに使用してください。これにより、Dockerはあなたのアカウントに属するDigitalOceanのレジストリと対話できるようになります。

Dockerの資格情報ファイルをダウンロードしています

APIキーを生成したくない場合やDoctlを使用したくない場合は、Container Registryのダッシュボードページに移動し、右上の青い「アクション」ボタンをクリックしてください。メニューから「Docker認証情報のダウンロード」を選択します。

このファイルは、あなたのレジストリの認証情報を含むDocker互換のconfig.jsonです。これをメインの~/.docker/config.jsonファイルにマージするか、dockerコマンドに--configフラグを使用することができます。

docker --config ~/downloaded-config.json pull registry.linux-console.net/<your-registry-name>/example-image:latest

Dockerを使用してイメージをプッシュおよびプルする

Dockerが正しく構成されていれば、CLIを使用してコンテナレジストリにイメージをプッシュおよびプルすることができます。イメージは以下の形式でタグ付けする必要があります:

registry.linux-console.net/<your-registry-name>/example-image:latest

既存のイメージのコピーをレジストリにプッシュする簡単な例を紹介します:

docker pull httpd:latest

docker tag httpd:latest registry.linux-console.net/<your-registry-name>/httpd:latest

docker push registry.linux-console.net/<your-registry-name>/httpd:latest

DigitalOceanコントロールパネルで、レジストリのダッシュボードに移動します。新しくプッシュしたイメージがレジストリ内に表示されるはずです。イメージをクリックすると、利用可能なタグを見ることができます。特定のタグや、イメージのすべてのタグを削除するには、右端の三点リーダーアイコンをクリックし、メニューから選択します。

ゴミ収集

レジストリから画像を削除すると、残りのマニフェストではもはや使用されていない冗長なレイヤーが残る可能性があります。これらのレイヤーは、ストレージコストとしてまだカウントされます。

DigitalOceanは、孤立したレイヤーとマニフェストを削除するためのガーベジコレクション機能を提供しています。ストレージスペースを解放できる場合、レジストリのダッシュボード画面にタイルが表示されます。「ゴミを空にする」をクリックしてプロセスを開始してください。

未タグ付けのマニフェストをクリーンアップの一環として削除するかどうかを選択できるポップアップダイアログが表示されます。これらは適切な画像で、タグが割り当てられていないため、完全なIDでのみ参照できます。例えば、registry.linux-console.net/<あなたのレジストリ名>/example-image:a1bc23です。これらのマニフェストを削除することは通常望ましいですが、意図的に保持する場合を除きます。

ガーベジコレクションは、使用されていないすべてのレイヤーが削除されるまで、レジストリを読み取り専用の状態に置きます。クリーンアップの期間中、新しいプッシュは拒否されます。収集は、既存の書き込みが完了するまで開始されないため、プロセスを開始した後にわずかな遅延が生じる可能性があります。進捗状況は、コントロールパネルのレジストリのダッシュボードページに表示されます。

DigitalOcean は自動ガーベジコレクションを提供していません。しかし、Doctl と DigitalOcean API を使用してプロセスを実行することは可能なので、自分のスクリプトを書いて cron でスケジュールすることができます。

結論

DigitalOceanのコンテナレジストリは、Dockerイメージを保存する便利な方法を提供します。既存のDigitalOcean APIトークンを使用してレジストリに認証します。APIトークンはアカウントへの完全なアクセスを許可するため、レジストリアクセスに限定されないことを忘れないでください。

Container RegistryをDocker Hubの代わりに使用するかどうかは、イメージで何をするかに依存します。もしイメージをDigitalOceanにデプロイするのであれば、パフォーマンスを最大化するために、イメージをインフラストラクチャと一緒に置くことが理にかなっています。ただし、Docker Hubには自動イメージ再構築や脆弱性スキャンなど、セキュリティ問題を迅速に検出できる他の利点があります。DigitalOceanのサービスにはこれらはなく、純粋でシンプルなイメージストレージに焦点を当てています。

関連記事: