[解決済み】プライベートDockerレジストリからイメージを削除する方法は?
質問
私はプライベートな docker レジストリを運用しています。
latest
をリポジトリから削除します。リポジトリ全体を削除するのではなく、その中にあるイメージの一部だけを削除したいのです。その
API ドキュメント
は、この方法について言及していませんが、きっと可能なのでしょう?
解決方法は?
現在、そのタスクにレジストリ API を使用することはできません。リポジトリや特定のタグを削除することだけが可能です。
一般に、リポジトリを削除すると、このリポジトリに関連するすべてのタグが削除されます。
タグの削除は、画像とタグの関連付けを削除することを意味します。
上記のいずれでも、画像は1枚も削除されません。ディスクに残ります。
ワークアラウンド
この回避策では、Dockerイメージをローカルに保存しておく必要があります。
あなたのソリューションに対する回避策は、最新のタグ以外をすべて削除し、それによって関連する画像への参照を削除する可能性があります。その後 このスクリプト を実行すると、どのタグからも参照されていない画像や、使用されている画像の祖先でない画像をすべて削除することができます。
用語解説(画像とタグ)
このようなイメージグラフを考えてみると、大文字の(
A
,
B
は短い画像IDを表し
<-
は、ある画像が他の画像に基づいたものであることを意味する。
A <- B <- C <- D
ここで、画像にタグを追加します。
A <- B <- C <- D
| |
| <version2>
<version1>
ここで、タグ
<version1>
は画像を参照しています。
C
というタグと
<version2>
は画像を参照しています。
D
.
質問の絞り込み
ご質問の中で、「削除したい」とおっしゃいました。
を除くすべての画像は
latest
. さて、この用語は全く正しくありません。画像とタグが混在していますね。グラフを見ると、タグが
<version2>
は最新バージョンを表しています。実際には
この質問
を使えば、最新版を表すタグを持つことができます。
A <- B <- C <- D
| |
| <version2>
| <latest>
<version1>
というのは
<latest>
タグは画像を参照する
D
質問:本当に画像以外を削除したいのですか?
D
? おそらく、そうではないでしょう。
タグを削除するとどうなりますか?
タグを削除した場合
<version1>
をDocker REST APIで使用すると、このようになります。
A <- B <- C <- D
|
<version2>
<latest>
忘れないでください。
Dockerは決してイメージを削除しません! 仮に削除されたとしても、この場合、イメージは削除されません。
C
の祖先の一部です。
D
というタグが付けられています。
を使用した場合でも このスクリプト の場合、画像が削除されることはありません。
画像の削除が可能な場合
誰かがあなたのレジストリにプルまたはプッシュできるタイミングを制御できる条件下で (たとえば REST インターフェイスを無効にすることで)。イメージグラフから画像を削除できるのは、その画像を元にしている画像がなく、その画像を参照しているタグもない場合です。
次のグラフで、画像
D
は
ではない
に基づいて
C
でなく
B
. したがって
D
には依存しません。
C
. タグを削除すると
<version1>
このグラフの場合、画像
C
はどの画像にも使われず
このスクリプト
は削除することができます。
A <- B <--------- D
\ |
\ <version2>
\ <latest>
\ <- C
|
<version1>
クリーンアップ後のイメージグラフは次のようになります。
A <- B <- D
|
<version2>
<latest>
これでいいのか?
関連
-
[解決済み] dockerfileのcopyコマンドで使われる-fromとは?
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Dockerでイメージのクリーンビルドを強制する方法
-
[解決済み] Docker:ローカルのDockerイメージをすべて削除する方法
-
[解決済み] MinikubeでローカルのDockerイメージを使用するには?
-
[解決済み】Dockerは仮想マシンとどう違うの?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 不明な機関によって署名された "docker pull "証明書
-
[解決済み] DockerコンテナでPipeworkを使用する際に、RTNETLINK Operation Not Permittedが発生するのはなぜですか?
-
[解決済み] Docker: 停止したDockerコンテナを表示する
-
[解決済み] docker-compose v3.1でsecret値をどのように管理するのですか?
-
[解決済み] docker ENTRYPOINTで複数のコマンドを実行する
-
[解決済み】Dockerコンテナからホストポートにアクセスする方法
-
[解決済み】終了したDockerコンテナを継続する方法
-
[解決済み】Dockerでnamedタグとlatestタグを作成する方法とは?
-
[解決済み】docker composeで環境変数を使用する方法
-
[解決済み】dangling imageとunused imageとは何ですか?