go-containerregistry

用于处理容器注册表的 Go 库和 CLI。「Go library and CLIs for working with container registries」

Github星跟蹤圖

go-containerregistry

GitHub Actions Build Status
GoDoc
Code Coverage

Introduction

This is a golang library for working with container registries.
It's largely based on the Python library of the same name.

The following diagram shows the main types that this library handles.
OCI image representation

Philosophy

The overarching design philosophy of this library is to define interfaces that present an immutable
view of resources (e.g. Image,
Layer,
ImageIndex),
which can be backed by a variety of medium (e.g. registry,
tarball, daemon, ...).

To complement these immutable views, we support functional mutations that produce new immutable views
of the resulting resource (e.g. mutate). The end goal is to provide a
set of versatile primitives that can compose to do extraordinarily powerful things efficiently and easily.

Both the resource views and mutations may be lazy, eager, memoizing, etc, and most are optimized
for common paths based on the tooling we have seen in the wild (e.g. writing new images from disk
to the registry as a compressed tarball).

Experiments

Over time, we will add new functionality under experimental environment variables listed here.

Env Var Value(s) What is does
GGCR_EXPERIMENT_ESTARGZ "1" ⚠️DEPRECATED⚠️: When enabled this experiment will direct tarball.LayerFromOpener to emit estargz compatible layers, which enable them to be lazily loaded by an appropriately configured containerd.

v1.Image

Sources

Sinks

v1.ImageIndex

Sources

Sinks

v1.Layer

Sources

Sinks

Overview

mutate

The simplest use for these libraries is to read from one source and write to another.

For example,

  • crane pull is remote.Image -> tarball.Write,
  • crane push is tarball.Image -> remote.Write,
  • crane cp is remote.Image -> remote.Write.

However, often you actually want to change something about an image.
This is the purpose of the mutate package, which exposes
some commonly useful things to change about an image.

partial

If you're trying to use this library with a different source or sink than it already supports,
it can be somewhat cumbersome. The Image and Layer interfaces are pretty wide, with a lot
of redundant information. This is somewhat by design, because we want to expose this information
as efficiently as possible where we can, but again it is a pain to implement yourself.

The purpose of the partial package is to make implementing a v1.Image
much easier, by filling in all the derived accessors for you if you implement a minimal
subset of v1.Image.

transport

You might think our abstractions are bad and you just want to authenticate
and send requests to a registry.

This is the purpose of the transport and authn packages.

Tools

This repo hosts some tools built on top of the library.

crane

crane is a tool for interacting with remote images
and registries.

gcrane

gcrane is a GCR-specific variant of crane that has
richer output for the ls subcommand and some basic garbage collection support.

krane

krane is a drop-in replacement for crane that supports
common Kubernetes-based workload identity mechanisms using k8schain
as a fallback to traditional authentication mechanisms.

k8schain

k8schain implements the authentication
semantics used by kubelets in a way that is easily consumable by this library.

k8schain is not a standalone tool, but it is linked here for visibility.

Emeritus: ko

This tool was originally developed in this repo but has since been moved to its
own repo.

主要指標

概覽
名稱與所有者google/go-containerregistry
主編程語言Go
編程語言Go (語言數: 2)
平台
許可證Apache License 2.0
所有者活动
創建於2018-03-14 18:02:49
推送於2025-06-10 16:23:53
最后一次提交
發布數39
最新版本名稱v0.20.5 (發布於 )
第一版名稱v0.1.0 (發布於 )
用户参与
星數3.4k
關注者數34
派生數570
提交數1k
已啟用問題?
問題數709
打開的問題數85
拉請求數998
打開的拉請求數49
關閉的拉請求數336
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?