DevOps入門: コンテナレジストリの基礎知識

近年のソフトウェア業界では新しいテクノロジーが次々に出てきますので、全体像を把握するために概念的な知識を身に付けていくことが重要です。特に基礎知識がない初心者のエンジニアが不慣れな環境で確実に業務をこなしていくことは簡単ではありません。このシリーズではDevOpsでよく使われるツールや用語に加え、新しいトレンドやすでに標準となったテクノロジーについて初心者でもわかりやすいチュートリアルを紹介していきます。ご要望やご提案がありましたらお知らせください。

今回はコンテナレジストリについて説明します。

コンテナレジストリとは?

コンテナレジストリとはリポジトリ内のコンテナイメージをホスティング、バージョン管理、配布するツールです。Docker Hubのように公開したりJFrog Container Registryのようにプライベートとして使用したりすることができます。Dockerを使用したことがある方ならコンテナレジストリからイメージを取り出したことがあるでしょう。パブリックとプライベート、無料と有料などいくつかの方法がありますが、無料で使えてローカルでもクラウドでも利用でき、Helmリポジトリや高度なメタデータ処理など他にはない便利な機能がいくつかあるという理由から、ここでは主にJFrog Container Registryにフォーカスして説明します。

パブリックとプライベートコンテナレジストリの違い

パブリックレジストリを使用すると誰でもリポジトリを作成して他の人が使えるようにコンテナイメージをホストできます。インフラを構築したりメンテナンスする必要がないので、パブリックレジストリは簡単に始めることができます。ただし公開レジストリは使いやすさと引き換えにセキュリティを犠牲にしています。標準のイメージを使うことがプロジェクトに適していてセキュリティをそれほど気にしていないのであれば、パブリックレジストリは適切な選択かもしれません。

プライベートレジストリはそれを使用する企業によってホストされます。JFrog Container Registryはローカル(オンプレミス)、Google、Amazon、Microsoftなどのクラウドプロバイダーを使ってホストすることも可能です。独自のコンテナレジストリをホストすることで、きめ細かいアクセス制御や独自のセキュリティポリシーを定義できます。企業はそれらのイメージ、リポジトリ、アクセスを完全に制御できるため、コンテナイメージは企業が求める形そのものであり、完全なアクセス制御を確実に実現できます。JFrog Container Registryの場合は必要に応じてさまざまな方法でイメージをローカル、リモート、Generic、バーチャルリポジトリに構造化するオプションもあります。大企業にとってはこのようなさらなる信頼性とセキュリティに対する安全性はインフラ自体を構築する上で労力に見合う価値があります。

リポジトリの種類について

ローカルリポジトリとはその名の通りアーティファクトをローカルでデプロイ、管理する至ってシンプルなリポジトリです。

リモートリポジトリはリモートで管理されるリポジトリのキャッシュプロキシとして使用されます。これはキャッシュとプロキシの動作を定義しなければならないので少し複雑です。アーティファクトは定義した設定に従って他から何らかの要求があった場合にのみリモートリポジトリに存在する点がミラーとは異なります。

Genericリポジトリには特定のパッケージタイプが関連付けられていません。通常リポジトリを作成するときには必ずパッケージタイプを定義する必要があります。JFrog Container Registryは自動でこの作業を行いアーティファクトにインデックスをつけ、パッケージのメタデータを計算してパフォーマンスの最適化を行います。Genericリポジトリにはパッケージタイプがないので好きなように配置できますが、誤って必要な機能が使えなくなってしまう可能性があります。

バーチャルリポジトリは同じパッケージタイプのリモートリポジトリやローカルリポジトリのコレクションを一つのURLにまとめたものです。

試してみるには

最も手っ取り早くて簡単な方法はJFrog Container Registryでクラウド版を使用することです。JFrog Container Registryはほぼ無料で(無料使用枠を超過した場合のみ課金されます)ほとんどの場合は初期設定ですぐ使えるため、リバースプロキシをセットアップする必要がないからです。目的にあったクラウドプロバイダーを選び、自動セットアップウィザードに従い初期オプションを設定し、デフォルトのリポジトリを作成するだけで始められます。

ここまで終われば以降の操作はとても簡単です。Docker Hubと同じようにネイティブDockerクライアントを使用できますので、後はログインするだけです:

docker login ${server-name}-{repo-name}.jfrog.io

タグをつけてイメージをプッシュします:

docker tag ${server-name}-{repo-name}.jfrog.io/
docker push ${server-name}-{repo-name}.jfrog.io/

イメージのプルも簡単です:

docker pull ${server-name}-{repo-name}.jfrog.io/

オンプレミス版は、セットアップや使用方法が少し複雑になりますが、公式ドキュメントにわかりやすく記載されているので参照ください。

おわりに

皆様の所属する企業やチームがクラウドネイティブ開発に真剣に取り組んでいるのであればプライベートコンテナレジストリの使用をお勧めします。プライベートレジストリの目的はローカルサーバーかクラウドでホストされているかということに関係なく、パブリックレジストリよりもセキュリティオプションを強化して既存のCI/CDワークフローとの統合性を高めることでコンテナイメージの整理、バージョン管理、デプロイする場所を提供することです。JFrog Container Registryは主要な3つのクラウドプロバイダーでもオンプレミスでも無料で利用でき、市場で使われているすべてのサービスに加えてHelmリポジトリや豊富なメタデータなどの追加機能を提供します。

このツールを使用するメリットや機能についてご理解いただけたでしょうか。最初は完全に理解できなくても大丈夫です。ご不明な点があればお気軽にお問い合わせください。このシリーズの次回の記事にご期待ください。詳細に関する質問やデモについてのリクエストもお待ちしております。