クラウド実行環境

コンテナレジストリとは|200個ためても、依存まで同じなら保存量は1.9%で済んだ

コンテナレジストリは何を保存するのか層の共有はどこまで効くのか保存量はどう見積もるのか

1個852MBのイメージを200個置くと、単純計算で170400MBです。

土台まで共有すれば86820MB、依存まで同じなら3240MBになります。1.9%です。

この記事の要点

  • 共有なしで170400MB
  • 土台だけ共有で86820MB
  • 依存まで共有で3240MB
  • 共有は層が完全一致のときだけ

200個ためても、依存まで同じなら保存量は1.9%で済んだ

個数に比例して増えるのは、イメージごとに違う層だけです。揃えた範囲は1つで済みます。

コンテナレジストリの保存量は、どこまで層を揃えられるかで決まります。実際に計算しました。

1つのイメージの内訳を、土台420MB・実行環境180MB・依存240MB・自分のコード12MBと置きました。合わせて852MBです。

共有の範囲を変える

text
イメージ数  共有しない  土台だけ共有  依存まで共有  依存まで共有した割合
1個               852MB         852MB         852MB                100.0%
5個              4260MB        2580MB         900MB                 21.1%
20個            17040MB        9060MB        1080MB                  6.3%
50個            42600MB       22020MB        1440MB                  3.4%
200個          170400MB       86820MB        3240MB                  1.9%

共有しない場合、200個で170400MBです。1個852MBの単純な掛け算になります。

土台だけ共有すると86820MBで、およそ半分です。土台420MBは1つで済むためです。

依存まで揃えると桁が変わる

依存まで同じなら3240MBです。共有しない場合の1.9%まで落ちます。

この場合、個数に比例して増えるのは自分のコードの12MBだけです。200個でも2400MBにしかなりません。

出典もレジストリの役割をイメージレジストリは、コンテナイメージを保存し共有するための集約された場所であるとしています。共有できる範囲が効きます。

個数に比例するのは、イメージごとに違う層だけ。

MB17040001個5個20個50個200個共有しない土台だけ共有依存まで共有1個の内訳は土台420MB・実行環境180MB・依存240MB・コード12MBとして計算した。
図1 ── 共有の範囲ごとの保存量
出典Docker Docs「What is a registry?」2026-08-18 確認
An image registry is a centralized location for storing and sharing your container images.
原文Docker Docs「What is a registry?」 この内容の有効期限2027-02-18

レジストリと保管庫は別のものを指す

レジストリは置き場所全体、保管庫はその中のまとまりです。層はレジストリの単位で共有されます。

コンテナレジストリの話では、2つの言葉が混ざりがちです。出典が区別を書いています。

その説明はレジストリはコンテナイメージを保存し管理する集約された場所であり、いっぽう保管庫はレジストリの中にある関連したコンテナイメージのまとまりであるというものです。

共有される単位

前の節の共有は、レジストリの単位で起きます。保管庫が違っても、層の内容が同じなら1つで済みます。

つまり、アプリごとに保管庫を分けても保存量は増えません。増えるのは、層の内容が違うときだけです。

共有が崩れる条件

  1. 土台が違う。版が1つずれるだけで別の層になる
  2. 導入する順番が違う。並びが変われば結果も変わる
  3. 日付や識別子が入る。毎回違う値が層に残る
  4. 取り込む対象が広い。関係ないファイルの差で分かれる

3番目は気づきにくい形です。層の中に作成時刻が書き込まれると、内容が同じでも別の層になります。

並べ方そのものの効き方はDockerの記事で測っています。同じ理屈が、保存量にも効いています。

出典Docker Docs「What is a registry?」2026-08-18 確認
A registry is a centralized location that stores and manages container images, whereas a repository is a collection of related container images within a registry.
原文Docker Docs「What is a registry?」 この内容の有効期限2027-02-18

見るのは総量ではなく、共有できていない層

総量だけでは、増えている原因が分かりません。共有できている層と、そうでない層を分けます。

コンテナレジストリの運用で見るべきなのは、共有できていない層の量です。総量ではありません。

総量が増えていても、イメージの数が増えただけなら問題ありません。1個あたりの増え方が変わったときに手を打ちます。

見る数字

  1. 1個あたりの増分。イメージを1つ足すと何MB増えるか
  2. 共有された層の数。複数から参照されている層
  3. 参照されていない層。消したイメージの残り
  4. 版の数。保管庫ごとに何世代残っているか

1番目がこの計測の主題です。依存まで揃っていれば12MB、揃っていなければ432MBになります。

消す運用も要る

3番目と4番目は放っておくと積み上がります。古い版を残す期間を決めて、それ以外は消します

出典も保管庫の中身を各保管庫は1つ以上のコンテナイメージを含むと書いています。1つの保管庫に版が積み上がる形です。

消す判断のために、いま動いている版がどれかを分かるようにしておきます。使われている版を消すと復旧できません。

総量ではなく、1個あたりの増分を見る。

充足 2 / 41個あたりの増分を測っている依存まで揃えば12MB、揃わなければ432MBと桁が変わる古い版を消す期間を決めている版と参照されない層は、放っておくと積み上がる総量だけを監視しているイメージが増えたのか、共有が崩れたのかを区別できない層に日付や識別子を書き込んでいる内容が同じでも別の層になり、共有が効かなくなる1個852MB・200個までの計算にもとづく。
図2 ── 運用にのせる前の点検項目
余談 この計測での注意

層の大きさは置いた値です。実際の内訳は言語や土台で大きく違い、圧縮の効き方も層によって変わります。共有の判定も、内容が完全に一致するかどうかという単純な形にしています。ここで見せているのは、個数に比例するのが「揃っていない層」だけだという構造です。

出典Docker Docs「What is a registry?」2026-08-18 確認
Each repository contains one or more container images.
原文Docker Docs「What is a registry?」 この内容の有効期限2027-02-18

よくある質問

コンテナレジストリは何を保存しますか
イメージを層の単位で保存します。同じ内容の層は1つだけ持ち、複数のイメージから参照されます。
層の共有はどこまで効きますか
揃えた範囲までです。この計測では200個のとき、土台だけで51.0%、依存まで揃えると1.9%になりました。
共有はいつ崩れますか
層の内容が1バイトでも違うと別の層になります。導入する順番や日付が入るだけでも分かれます。
保存量はどう見積もりますか
共有できる層と、イメージごとに違う層に分けて数えます。後者だけが個数に比例します。

まとめ

  • イメージを層の単位で置く
  • 同じ層は1つだけ持つ
  • 揃えた範囲までしか共有できない
  • 個数に比例するのは違う層だけ

今日から始められること

  1. 保存されている層の一覧を出す
  2. 共有されている層と、そうでない層を分ける
  3. 違う層が個数に比例していないか確かめる
  4. 揃えられる層を土台側へ寄せる

実務で組んだコンテナレジストリのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る