diff --git a/v2.0.2/404.html b/v2.0.2/404.html index a4d0111..10cbd80 100644 --- a/v2.0.2/404.html +++ b/v2.0.2/404.html @@ -1 +1 @@ - zotregistry.dev
\ No newline at end of file + zotregistry.dev
\ No newline at end of file diff --git a/v2.0.2/admin-guide/admin-configuration/index.html b/v2.0.2/admin-guide/admin-configuration/index.html index daee26d..ffdcc8d 100644 --- a/v2.0.2/admin-guide/admin-configuration/index.html +++ b/v2.0.2/admin-guide/admin-configuration/index.html @@ -1,4 +1,4 @@ - Configuring zot - zotregistry.dev
Skip to content

Configuring zot

👉 The registry administrator configures zot primarily through settings in the configuration file.

Using the information in this guide, you can compose a configuration file with the settings and features you require for your zot registry server.

💡 Before launching zot with a new configuration, we recommend that you verify the syntax of your configuration as described in Verifying the configuration file.

Configuration file

The configuration file is a JSON or YAML file that contains all configuration settings for zot functions such as:

  • network
  • storage
  • authentication
  • authorization
  • logging
  • metrics
  • synchronization with other registries
  • clustering

The zot service is initiated with the zot serve command followed by the name of a configuration file, as in this example:

zot serve config.json

✏ The instructions and examples in this guide use zot as the name of the zot executable file. The examples do not include the path to the executable file.

When you first build zot or deploy an image or container from the distribution, a basic configuration file config.json is created. This initial file is similar to the following example:

{
+ Configuring zot - zotregistry.dev      

Configuring zot

👉 The registry administrator configures zot primarily through settings in the configuration file.

Using the information in this guide, you can compose a configuration file with the settings and features you require for your zot registry server.

💡 Before launching zot with a new configuration, we recommend that you verify the syntax of your configuration as described in Verifying the configuration file.

Configuration file

The configuration file is a JSON or YAML file that contains all configuration settings for zot functions such as:

  • network
  • storage
  • authentication
  • authorization
  • logging
  • metrics
  • synchronization with other registries
  • clustering

The zot service is initiated with the zot serve command followed by the name of a configuration file, as in this example:

zot serve config.json

✏ The instructions and examples in this guide use zot as the name of the zot executable file. The examples do not include the path to the executable file.

When you first build zot or deploy an image or container from the distribution, a basic configuration file config.json is created. This initial file is similar to the following example:

{
     "distSpecVersion": "1.0.1",
     "storage": {
         "rootDirectory": "/tmp/zot"
diff --git a/v2.0.2/admin-guide/admin-getting-started/index.html b/v2.0.2/admin-guide/admin-getting-started/index.html
index d696e3e..ca69d66 100644
--- a/v2.0.2/admin-guide/admin-getting-started/index.html
+++ b/v2.0.2/admin-guide/admin-getting-started/index.html
@@ -1,4 +1,4 @@
- Getting Started - zotregistry.dev      

Getting Started with zot Administration

👉 This document helps you to deploy an appropriate zot image or to build zot if desired.

After deploying zot, proceed to Configuring zot to choose and configure the features you need.

Installing zot

How to get zot

The zot project is hosted on GitHub at project-zot. From GitHub, you can download zot executable binary images or full source code.

Supported platforms

zot is officially supported on Linux and Apple MacOS platforms, using Intel or ARM processors. However, development should be possible on any platform that supports the golang toolchain.

OS ARCH Platform
linux amd64 Intel-based Linux servers
linux arm64 ARM-based servers and Raspberry Pi4
darwin amd64 Intel-based MacOS
darwin arm64 ARM-based MacOS
freebsd amd64 Intel-based FreeBSD*
freebsd arm64 ARM-based FreeBSD*

* NOTE: While binary images are available for FreeBSD, building container images is not supported at this time.

About binary images

Executable binary zot images are available for multiple platforms and architectures and with full or minimal implementations.

Refer to Released Images for zot for information about available zot images along with information about image variations, image locations, and image naming formats.

Deployment methods

Several options exist for deploying zot:

  • You can launch a zot binary as a container service using a container management tool such as Podman, Docker, or Helm.

  • You can launch zot as a host-level service by downloading a binary image and running it as a systemd service.

  • You can copy or clone the full zot source code and build an image with custom build flags.

Deploying a zot binary image

Executable binary images for supported server platforms and architectures are available from the zot package repository in GitHub.

You can download the appropriate binary image and run it directly on your server, or you can use a container management tool such as Podman, runc, Helm, or Docker to fetch and deploy the image in a container on your server.

💡 For convenience, you can rename the binary image file to simply zot.

Example: Deploying with a container manager

Using a container manager such as Podman, runc, Helm, or Docker, you can install a zot binary image, as in the following examples.

Using podman

podman run -p 5000:5000 ghcr.io/project-zot/zot-linux-amd64:latest
+ Getting Started - zotregistry.dev      

Getting Started with zot Administration

👉 This document helps you to deploy an appropriate zot image or to build zot if desired.

After deploying zot, proceed to Configuring zot to choose and configure the features you need.

Installing zot

How to get zot

The zot project is hosted on GitHub at project-zot. From GitHub, you can download zot executable binary images or full source code.

Supported platforms

zot is officially supported on Linux and Apple MacOS platforms, using Intel or ARM processors. However, development should be possible on any platform that supports the golang toolchain.

OS ARCH Platform
linux amd64 Intel-based Linux servers
linux arm64 ARM-based servers and Raspberry Pi4
darwin amd64 Intel-based MacOS
darwin arm64 ARM-based MacOS
freebsd amd64 Intel-based FreeBSD*
freebsd arm64 ARM-based FreeBSD*

* NOTE: While binary images are available for FreeBSD, building container images is not supported at this time.

About binary images

Executable binary zot images are available for multiple platforms and architectures and with full or minimal implementations.

Refer to Released Images for zot for information about available zot images along with information about image variations, image locations, and image naming formats.

Deployment methods

Several options exist for deploying zot:

  • You can launch a zot binary as a container service using a container management tool such as Podman, Docker, or Helm.

  • You can launch zot as a host-level service by downloading a binary image and running it as a systemd service.

  • You can copy or clone the full zot source code and build an image with custom build flags.

Deploying a zot binary image

Executable binary images for supported server platforms and architectures are available from the zot package repository in GitHub.

You can download the appropriate binary image and run it directly on your server, or you can use a container management tool such as Podman, runc, Helm, or Docker to fetch and deploy the image in a container on your server.

💡 For convenience, you can rename the binary image file to simply zot.

Example: Deploying with a container manager

Using a container manager such as Podman, runc, Helm, or Docker, you can install a zot binary image, as in the following examples.

Using podman

podman run -p 5000:5000 ghcr.io/project-zot/zot-linux-amd64:latest
 
 podman run -p 5000:5000 ghcr.io/project-zot/zot-minimal-linux-amd64:latest
 
Click here to view an example of deploying using podman.

Using docker

docker run -p 5000:5000 ghcr.io/project-zot/zot-linux-amd64:latest
diff --git a/v2.0.2/articles/authn-authz/index.html b/v2.0.2/articles/authn-authz/index.html
index 820b0b0..c14c64c 100644
--- a/v2.0.2/articles/authn-authz/index.html
+++ b/v2.0.2/articles/authn-authz/index.html
@@ -1,4 +1,4 @@
- Authentication and Authorization - zotregistry.dev      

User Authentication and Authorization with zot

👉 A robust set of authentication/authorization options are supported:

  • Authentication

    • TLS, including mTLS
    • Username/password or token-based user authentication
    • LDAP
    • htpasswd
    • OAuth2 with bearer token
  • Authorization

    • Powerful identity-based access controls for repositories or specific repository paths
    • OpenID/OAuth2 social login with Google, GitHub, GitLab, and dex

The zot configuration model supports both authentication and authorization. Authentication credentials allow access to zot HTTP APIs. Authorization policies provide fine-grained control of the actions each authenticated user can perform in the registry.

Authentication

TLS authentication

Because authentication credentials are passed over HTTP, it is imperative that TLS be enabled. You can enable and configure TLS authentication in the zot configuration file, as shown in the following example.

"http": {
+ Authentication and Authorization - zotregistry.dev      

User Authentication and Authorization with zot

👉 A robust set of authentication/authorization options are supported:

  • Authentication

    • TLS, including mTLS
    • Username/password or token-based user authentication
    • LDAP
    • htpasswd
    • OAuth2 with bearer token
  • Authorization

    • Powerful identity-based access controls for repositories or specific repository paths
    • OpenID/OAuth2 social login with Google, GitHub, GitLab, and dex

The zot configuration model supports both authentication and authorization. Authentication credentials allow access to zot HTTP APIs. Authorization policies provide fine-grained control of the actions each authenticated user can perform in the registry.

Authentication

TLS authentication

Because authentication credentials are passed over HTTP, it is imperative that TLS be enabled. You can enable and configure TLS authentication in the zot configuration file, as shown in the following example.

"http": {
 ...
   "tls": {
     "cert": "/etc/zot/certs/server.cert",
diff --git a/v2.0.2/articles/benchmarking-with-zb/index.html b/v2.0.2/articles/benchmarking-with-zb/index.html
index 43db6dd..0642afa 100644
--- a/v2.0.2/articles/benchmarking-with-zb/index.html
+++ b/v2.0.2/articles/benchmarking-with-zb/index.html
@@ -1,4 +1,4 @@
- Benchmarking with zb - zotregistry.dev      

Benchmarking zot with zb

👉 The zb tool is useful for benchmarking OCI registry workloads in scenarios such as the following:

  • comparing configuration changes
  • comparing software versions
  • comparing hardware/deployment environments
  • comparing with other registries

With the zb tool, you can benchmark a zot registry or any other container image registry that conforms to the OCI Distribution Specification published by the Open Container Initiative (OCI).

💡 We recommend installing and benchmarking with zb when you install zot.

How to get zb

The zb project is hosted with zot on GitHub at project-zot. From GitHub, you can download the zb binary or you can build zb from the source. You can also directly run the released docker image.

Supported platforms and architectures

zb is supported for the following operating systems and platform architectures:

OS ARCH Platform
linux amd64 Intel-based Linux servers
linux arm64 ARM-based servers and Raspberry Pi4
darwin amd64 Intel-based MacOS
darwin arm64 ARM-based MacOS

Downloading zb binaries

Download the executable binary for your server platform and architecture under "Assets" on the GitHub zot releases page.

The binary image is named using the target platform and architecture from the Supported platforms and architectures table. For example, the binary for an Intel-based MacOS server is zb-darwin-amd64.

Building zb from source

To build the zb binary, copy or clone the zot project from GitHub and execute the make bench command in the zot directory. Use the same command options that you used to build zot, as shown:

make OS=os ARCH=architecture bench

For example, the following command builds zb for an Intel-based MacOS server:

make OS=darwin ARCH=amd64 bench

In this example, the resulting executable file is zb-darwin-amd64 in the zot/bin directory.

💡 A sample Dockerfile for zb is available at Dockerfile-zb.

Running zb

The original filename of the executable file will reflect the build options, such as zb-linux-amd64. For convenience, you can rename the executable to simply zb.

💡 The instructions and examples in this guide use zb as the name of the executable file.

Usage

To view the usage and options of zb, run the command with the --help option:

bin/zb --help

Command output:

    Usage:
+ Benchmarking with zb - zotregistry.dev      

Benchmarking zot with zb

👉 The zb tool is useful for benchmarking OCI registry workloads in scenarios such as the following:

  • comparing configuration changes
  • comparing software versions
  • comparing hardware/deployment environments
  • comparing with other registries

With the zb tool, you can benchmark a zot registry or any other container image registry that conforms to the OCI Distribution Specification published by the Open Container Initiative (OCI).

💡 We recommend installing and benchmarking with zb when you install zot.

How to get zb

The zb project is hosted with zot on GitHub at project-zot. From GitHub, you can download the zb binary or you can build zb from the source. You can also directly run the released docker image.

Supported platforms and architectures

zb is supported for the following operating systems and platform architectures:

OS ARCH Platform
linux amd64 Intel-based Linux servers
linux arm64 ARM-based servers and Raspberry Pi4
darwin amd64 Intel-based MacOS
darwin arm64 ARM-based MacOS

Downloading zb binaries

Download the executable binary for your server platform and architecture under "Assets" on the GitHub zot releases page.

The binary image is named using the target platform and architecture from the Supported platforms and architectures table. For example, the binary for an Intel-based MacOS server is zb-darwin-amd64.

Building zb from source

To build the zb binary, copy or clone the zot project from GitHub and execute the make bench command in the zot directory. Use the same command options that you used to build zot, as shown:

make OS=os ARCH=architecture bench

For example, the following command builds zb for an Intel-based MacOS server:

make OS=darwin ARCH=amd64 bench

In this example, the resulting executable file is zb-darwin-amd64 in the zot/bin directory.

💡 A sample Dockerfile for zb is available at Dockerfile-zb.

Running zb

The original filename of the executable file will reflect the build options, such as zb-linux-amd64. For convenience, you can rename the executable to simply zb.

💡 The instructions and examples in this guide use zb as the name of the executable file.

Usage

To view the usage and options of zb, run the command with the --help option:

bin/zb --help

Command output:

    Usage:
       zb <url> [flags]
 
     Flags:
diff --git a/v2.0.2/articles/building-ci-cd-pipeline/index.html b/v2.0.2/articles/building-ci-cd-pipeline/index.html
index 1bfae44..54f743c 100644
--- a/v2.0.2/articles/building-ci-cd-pipeline/index.html
+++ b/v2.0.2/articles/building-ci-cd-pipeline/index.html
@@ -1,4 +1,4 @@
- CI/CD Pipeline - zotregistry.dev      

Building an OCI-native Container Image CI/CD Pipeline

👉 An OCI-native secure container image build/delivery pipeline using the following tools:

  • stacker for building OCI images

  • zot as a vendor-neutral OCI image registry server

  • skopeo for performing repository interactions

  • cosign for container signing and verification

  • cri-o for deploying container images

  • cosigned for validating container images before deployment

The Open Container Initiative (OCI) is an open governance structure for the express purpose of creating open industry standards around container formats and runtimes.

This document describes a step-by-step procedure towards achieving an OCI-native secure software supply chain using zot in collaboration with other open source tools. The following diagram shows a portion of the CI/CD pipeline.

504568

Build images

stacker is a standalone tool for building OCI images via a declarative yaml format. The output of the build process is a container image in an OCI layout.

example: stacker build command

stacker build -f <stackerfile.yaml>
+ CI/CD Pipeline - zotregistry.dev      

Building an OCI-native Container Image CI/CD Pipeline

👉 An OCI-native secure container image build/delivery pipeline using the following tools:

  • stacker for building OCI images

  • zot as a vendor-neutral OCI image registry server

  • skopeo for performing repository interactions

  • cosign for container signing and verification

  • cri-o for deploying container images

  • cosigned for validating container images before deployment

The Open Container Initiative (OCI) is an open governance structure for the express purpose of creating open industry standards around container formats and runtimes.

This document describes a step-by-step procedure towards achieving an OCI-native secure software supply chain using zot in collaboration with other open source tools. The following diagram shows a portion of the CI/CD pipeline.

504568

Build images

stacker is a standalone tool for building OCI images via a declarative yaml format. The output of the build process is a container image in an OCI layout.

example: stacker build command

stacker build -f <stackerfile.yaml>
 

Image registry

zot is a production-ready vendor-neutral OCI image registry server purely based on the OCI Distribution Specification. If stacker is used to build the OCI image, it can also be used to publish the built image to an OCI registry.

example: stacker publish command

stacker publish --url <url> --username <user> --password <password>
 

Alternatively, you can use skopeo, a command line utility that performs various operations on container images and image repositories.

example: skopeo copies an image to a registry

skopeo copy --format=oci oci:<oci-dir>/image:tag \
   docker://<zot-server>/image:tag
diff --git a/v2.0.2/articles/clustering/index.html b/v2.0.2/articles/clustering/index.html
index 53d40f7..2828c81 100644
--- a/v2.0.2/articles/clustering/index.html
+++ b/v2.0.2/articles/clustering/index.html
@@ -1,4 +1,4 @@
- Clustering - zotregistry.dev      

zot Clustering

👉 High availability of the zot registry is supported by the following features:

  • Stateless zot instances to simplify scale out
  • Bare-metal and Kubernetes deployments

To ensure high-availability of the registry, zot supports a clustering scheme with stateless zot instances/replicas fronted by a loadbalancer and a shared remote backend storage. This scheme allows the registry service to remain available even if a few replicas fail or become unavailable. Loadbalancing across many zot replicas can also increase aggregate network throughput.

504569

Clustering is supported in both bare-metal and Kubernetes environments.

✏ The remote backend storage must be S3 API-compatible.

Bare-metal deployment

Prerequisites

  • A highly-available loadbalancer such as HAProxy configured to direct traffic to zot replicas.

  • Multiple zot replicas as systemd services hosted on multiple hosts or VMs.

  • AWS S3 API-compatible remote backend storage.

Kubernetes deployment

Prerequisites

  • A zot Kubernetes Deployment with required number of replicas.

  • AWS S3 API-compatible remote backend storage.

  • A zot Kubernetes Service.

  • A zot Kubernetes Ingress Gateway if the service needs to be exposed outside.

Implementing stateless zot

zot maintains two types of durable state:

  • the actual image data itself

  • the image metadata in the registry’s cache

In a stateless clustering scheme, the image data is stored in the remote storage backend and the registry cache is disabled by turning off both deduplication and garbage collection.

Ecosystem tools

The OCI Distribution Specification imposes certain rules about the HTTP URI paths to which various ecosystem tools must conform. Consider these rules when setting the HTTP prefixes during loadbalancing and ingress gateway configuration.

Examples

zot supports clustering by using multiple stateless zot replicas with shared S3 storage and an HAProxy (with sticky session) load-balancing traffic to the replicas.

YAML configuration

Click here to view a sample haproxy configuration.
global
+ Clustering - zotregistry.dev      

zot Clustering

👉 High availability of the zot registry is supported by the following features:

  • Stateless zot instances to simplify scale out
  • Bare-metal and Kubernetes deployments

To ensure high-availability of the registry, zot supports a clustering scheme with stateless zot instances/replicas fronted by a loadbalancer and a shared remote backend storage. This scheme allows the registry service to remain available even if a few replicas fail or become unavailable. Loadbalancing across many zot replicas can also increase aggregate network throughput.

504569

Clustering is supported in both bare-metal and Kubernetes environments.

✏ The remote backend storage must be S3 API-compatible.

Bare-metal deployment

Prerequisites

  • A highly-available loadbalancer such as HAProxy configured to direct traffic to zot replicas.

  • Multiple zot replicas as systemd services hosted on multiple hosts or VMs.

  • AWS S3 API-compatible remote backend storage.

Kubernetes deployment

Prerequisites

  • A zot Kubernetes Deployment with required number of replicas.

  • AWS S3 API-compatible remote backend storage.

  • A zot Kubernetes Service.

  • A zot Kubernetes Ingress Gateway if the service needs to be exposed outside.

Implementing stateless zot

zot maintains two types of durable state:

  • the actual image data itself

  • the image metadata in the registry’s cache

In a stateless clustering scheme, the image data is stored in the remote storage backend and the registry cache is disabled by turning off both deduplication and garbage collection.

Ecosystem tools

The OCI Distribution Specification imposes certain rules about the HTTP URI paths to which various ecosystem tools must conform. Consider these rules when setting the HTTP prefixes during loadbalancing and ingress gateway configuration.

Examples

zot supports clustering by using multiple stateless zot replicas with shared S3 storage and an HAProxy (with sticky session) load-balancing traffic to the replicas.

YAML configuration

Click here to view a sample haproxy configuration.
global
         log /dev/log    local0
         log /dev/log    local1 notice
         chroot /var/lib/haproxy
diff --git a/v2.0.2/articles/graphql/index.html b/v2.0.2/articles/graphql/index.html
index 20b1f94..90e659d 100644
--- a/v2.0.2/articles/graphql/index.html
+++ b/v2.0.2/articles/graphql/index.html
@@ -1,4 +1,4 @@
- Using GraphQL for Enhanced Searches - zotregistry.dev      

Using GraphQL for Enhanced Searches

👉 A GraphQL backend server within zot's registry search engine provides efficient and enhanced search capabilities. You can submit a GraphQL structured query as an API call or you can use a browser to access the GraphQL Playground, an interactive graphical environment for GraphQL queries.

How to use GraphQL for search queries

GraphQL is a query language for APIs. A GraphQL server, as implemented in zot's registry search engine, executes GraphQL queries that match schema recognized by the server. In response, the server returns a structure containing the requested information. The schema currently recognized by zot are those that correspond to the queries listed in What GraphQL queries are supported.

💡 To learn more about GraphQL, see these resources:

To perform a search, compose a GraphQL structured query for a specific search and deliver it to zot using one of the methods described in the following sections.

For examples of GraphQL queries supported in zot, see Examples of zot searches using GraphQL.

Using the search API directly

You can submit a GraphQL structured query as the HTML data payload in a direct API call using a shell tool such as cURL or Postman. GraphQL queries are sent to the zot search extension API:

/v2/_zot/ext/search
+ Using GraphQL for Enhanced Searches - zotregistry.dev      

Using GraphQL for Enhanced Searches

👉 A GraphQL backend server within zot's registry search engine provides efficient and enhanced search capabilities. You can submit a GraphQL structured query as an API call or you can use a browser to access the GraphQL Playground, an interactive graphical environment for GraphQL queries.

How to use GraphQL for search queries

GraphQL is a query language for APIs. A GraphQL server, as implemented in zot's registry search engine, executes GraphQL queries that match schema recognized by the server. In response, the server returns a structure containing the requested information. The schema currently recognized by zot are those that correspond to the queries listed in What GraphQL queries are supported.

💡 To learn more about GraphQL, see these resources:

To perform a search, compose a GraphQL structured query for a specific search and deliver it to zot using one of the methods described in the following sections.

For examples of GraphQL queries supported in zot, see Examples of zot searches using GraphQL.

Using the search API directly

You can submit a GraphQL structured query as the HTML data payload in a direct API call using a shell tool such as cURL or Postman. GraphQL queries are sent to the zot search extension API:

/v2/_zot/ext/search
 

The following example submits a zot GraphQL query using cURL:

curl -X POST -H "Content-Type: application/json" --data '{ "query": "{ ImageListForCVE (id:\"CVE-2002-1119\") { Results { Name Tags } } }" }' http://localhost:8080/v2/_zot/ext/search
 

The reply to your query is returned as a JSON payload in the HTML response.

Using the GraphQL Playground

✏ The GraphQL Playground feature is available only in a binary-debug zot build or when the zot registry was built with the debug extension label.

The GraphQL Playground is an interactive graphical web interface for GraphQL hosted by the zot registry server.

The GraphQL Playground is reachable by a browser at the following zot API:

/v2/_zot/debug/graphql-playground#
 

For example, if your zot server is located at http://localhost:8080, the GraphQL Playground can be accessed by your browser at this URL:

http://localhost:8080/v2/_zot/debug/graphql-playground#
diff --git a/v2.0.2/articles/immutable-tags/index.html b/v2.0.2/articles/immutable-tags/index.html
index b030e74..7e7340c 100644
--- a/v2.0.2/articles/immutable-tags/index.html
+++ b/v2.0.2/articles/immutable-tags/index.html
@@ -1,4 +1,4 @@
- Immutable Image Tags - zotregistry.dev      

Immutable Image Tags

👉 Immutable image tag support is achieved by leveraging authorization policies.

It is considered best practice to avoid changing the content once a software version has been released. While zot does not have an explicit configuration flag to make image tags immutable, the same effect can be achieved with authorization as follows.

Immutable For All Users

By setting the defaultPolicy to "read" and "create" for a particular repository, images can be pushed (once) and pulled but further updates are rejected.

{
+ Immutable Tags - zotregistry.dev      

Immutable Image Tags

👉 Immutable image tag support is achieved by leveraging authorization policies.

It is considered best practice to avoid changing the content once a software version has been released. While zot does not have an explicit configuration flag to make image tags immutable, the same effect can be achieved with authorization as follows.

Immutable For All Users

By setting the defaultPolicy to "read" and "create" for a particular repository, images can be pushed (once) and pulled but further updates are rejected.

{
 ...
   "repositories": {
     "**": {
diff --git a/v2.0.2/articles/kind-deploy/index.html b/v2.0.2/articles/kind-deploy/index.html
index 79d12ea..df1839a 100644
--- a/v2.0.2/articles/kind-deploy/index.html
+++ b/v2.0.2/articles/kind-deploy/index.html
@@ -1,4 +1,4 @@
- Using kind for Deployment Testing - zotregistry.dev      

Using kind for Deployment Testing

👉 Use kind to try out zot deployment with Kubernetes.

This article describes how to create a kind cluster that includes a local zot registry.

Deploying the cluster and registry

The procedure described installs a kind cluster with a zot registry at localhost:5001 and then loads and runs a "hello" app to test the installation. Although the procedure is given as a series of steps, you can find a complete shell script to perform these steps at the end of this article.

✏ This article is based on Create A Cluster And Registry, which you can find on the kind website.

Step 1: Prepare the environment

The following packages must be installed:

  • docker
  • kubernetes
  • kind
  • containerd
  • skopeo

Execute the following shell commands to set environment variables.

set -o errexit
+ Using kind for Deployment Testing - zotregistry.dev      

Using kind for Deployment Testing

👉 Use kind to try out zot deployment with Kubernetes.

This article describes how to create a kind cluster that includes a local zot registry.

Deploying the cluster and registry

The procedure described installs a kind cluster with a zot registry at localhost:5001 and then loads and runs a "hello" app to test the installation. Although the procedure is given as a series of steps, you can find a complete shell script to perform these steps at the end of this article.

✏ This article is based on Create A Cluster And Registry, which you can find on the kind website.

Step 1: Prepare the environment

The following packages must be installed:

  • docker
  • kubernetes
  • kind
  • containerd
  • skopeo

Execute the following shell commands to set environment variables.

set -o errexit
 
 # set no_proxy if applicable
 if [ ! -z "${no_proxy}" ]; then 
diff --git a/v2.0.2/articles/mirroring/index.html b/v2.0.2/articles/mirroring/index.html
index 1f386f4..847a6e2 100644
--- a/v2.0.2/articles/mirroring/index.html
+++ b/v2.0.2/articles/mirroring/index.html
@@ -1,4 +1,4 @@
- Mirroring - zotregistry.dev      

OCI Registry Mirroring With zot

👉 A zot registry can mirror one or more upstream OCI registries, including popular cloud registries such as Docker Hub and Google Container Registry (gcr.io).

A key use case for zot is to act as a mirror for upstream registries. If an upstream registry is OCI distribution-spec conformant for pulling images, you can use zot's sync feature to implement a downstream mirror, synchronizing OCI images and corresponding artifacts. Because synchronized images are stored in zot's local storage, registry mirroring allows for a fully distributed disconnected container image build pipeline. Container image operations terminate in local zot storage, which may reduce network latency and costs.

⚠ Because zot is a OCI-only registry, any upstream image stored in the Docker image format is converted to OCI format when downloading to zot. In the conversion, some non-OCI attributes may be lost. Signatures, for example, are removed due to the incompatibility between formats.

Mirroring modes

For mirroring an upstream registry, two common use cases are a fully mirrored or a pull through (on-demand) cache registry.

As with git, wherein every clone is a full repository, you can configure your local zot instance to be a fully mirrored OCI registry. For this mode, configure zot for synchronization by periodic polling, not on-demand. Zot copies and caches a full copy of every image on the upstream registry, updating the cache whenever polling discovers a change in content or image version at the upstream registry.

For a pull through cache mirrored registry, configure zot for on-demand synchronization. When an image is first requested from the local zot registry, the image is downloaded from the upstream registry and cached in local storage. Subsequent requests for the same image are served from zot's cache. Images that have not been requested are not downloaded. If a polling interval is also configured, zot periodically polls the upstream registry for changes, updating any cached images if changes are detected.

✏ Because Docker Hub rate-limits pulls and does not support catalog listing, do not use polled mirroring with Docker Hub. Use only on-demand mirroring with Docker Hub.

Migrating or updating a registry using mirroring

Mirroring zot using the sync feature allows you to easily migrate a registry. In situations such as the following, zot mirroring provides an easy solution.

  • Migrating an existing zot or non-zot registry to a new location.

    Provided that the source registry is OCI-compliant for image pulls, you can mirror the registry to a new zot registry, delete the old registry, and reroute network traffic to the new registry.

  • Updating (or downgrading) a zot registry.

    To minimize downtime during an update, or to avoid any incompatibilities between zot releases that would preclude an in-place update, you can bring up a new zot registry with the desired release and then migrate from the existing registry.

To ensure a complete migration of the registry contents, set a polling interval in the configuration of the new zot registry and set prefix to **, as shown in this example:

  {
+ Mirroring - zotregistry.dev      

OCI Registry Mirroring With zot

👉 A zot registry can mirror one or more upstream OCI registries, including popular cloud registries such as Docker Hub and Google Container Registry (gcr.io).

A key use case for zot is to act as a mirror for upstream registries. If an upstream registry is OCI distribution-spec conformant for pulling images, you can use zot's sync feature to implement a downstream mirror, synchronizing OCI images and corresponding artifacts. Because synchronized images are stored in zot's local storage, registry mirroring allows for a fully distributed disconnected container image build pipeline. Container image operations terminate in local zot storage, which may reduce network latency and costs.

⚠ Because zot is a OCI-only registry, any upstream image stored in the Docker image format is converted to OCI format when downloading to zot. In the conversion, some non-OCI attributes may be lost. Signatures, for example, are removed due to the incompatibility between formats.

Mirroring modes

For mirroring an upstream registry, two common use cases are a fully mirrored or a pull through (on-demand) cache registry.

As with git, wherein every clone is a full repository, you can configure your local zot instance to be a fully mirrored OCI registry. For this mode, configure zot for synchronization by periodic polling, not on-demand. Zot copies and caches a full copy of every image on the upstream registry, updating the cache whenever polling discovers a change in content or image version at the upstream registry.

For a pull through cache mirrored registry, configure zot for on-demand synchronization. When an image is first requested from the local zot registry, the image is downloaded from the upstream registry and cached in local storage. Subsequent requests for the same image are served from zot's cache. Images that have not been requested are not downloaded. If a polling interval is also configured, zot periodically polls the upstream registry for changes, updating any cached images if changes are detected.

✏ Because Docker Hub rate-limits pulls and does not support catalog listing, do not use polled mirroring with Docker Hub. Use only on-demand mirroring with Docker Hub.

Migrating or updating a registry using mirroring

Mirroring zot using the sync feature allows you to easily migrate a registry. In situations such as the following, zot mirroring provides an easy solution.

  • Migrating an existing zot or non-zot registry to a new location.

    Provided that the source registry is OCI-compliant for image pulls, you can mirror the registry to a new zot registry, delete the old registry, and reroute network traffic to the new registry.

  • Updating (or downgrading) a zot registry.

    To minimize downtime during an update, or to avoid any incompatibilities between zot releases that would preclude an in-place update, you can bring up a new zot registry with the desired release and then migrate from the existing registry.

To ensure a complete migration of the registry contents, set a polling interval in the configuration of the new zot registry and set prefix to **, as shown in this example:

  {
     "urls": [
         "https://registry1:5000"
     ],
diff --git a/v2.0.2/articles/monitoring/index.html b/v2.0.2/articles/monitoring/index.html
index 65cfd35..0d67931 100644
--- a/v2.0.2/articles/monitoring/index.html
+++ b/v2.0.2/articles/monitoring/index.html
@@ -1,4 +1,4 @@
- Monitoring - zotregistry.dev      

Monitoring the registry

👉 zot supports a range of monitoring tools including logging, metrics, and benchmarking.

The following sections describe how to configure logging and monitoring with zot. You can use zot's benchmarking tool to test your configuration and deployment, as described in Benchmarking zot with zb.

Logging

Logging for zot operations is configured with the log attribute in the configuration file, as shown in the following example.

"log":{
+ Monitoring - zotregistry.dev      

Monitoring the registry

👉 zot supports a range of monitoring tools including logging, metrics, and benchmarking.

The following sections describe how to configure logging and monitoring with zot. You can use zot's benchmarking tool to test your configuration and deployment, as described in Benchmarking zot with zb.

Logging

Logging for zot operations is configured with the log attribute in the configuration file, as shown in the following example.

"log":{
   "level":"debug",
   "output":"/tmp/zot.log",
   "audit": "/tmp/zot-audit.log"
diff --git a/v2.0.2/articles/pprofiling/index.html b/v2.0.2/articles/pprofiling/index.html
index 8528af5..b9acf7f 100644
--- a/v2.0.2/articles/pprofiling/index.html
+++ b/v2.0.2/articles/pprofiling/index.html
@@ -1,4 +1,4 @@
- Performance Profiling - zotregistry.dev      

Performance Profiling in zot

👉 Use zot's built-in profiling tools to collect and analyze runtime performance.

The profiling capabilities within zot allow a zot administrator to collect and export a range of diagnostic performance data such as CPU intensive function calls, memory allocations, and execution traces. The collected data can then be analyzed using Go tools and a variety of available visualization tools.

✏ If authentication is enabled, only a zot admin user can access the APIs for profiling.

✏ All examples in this article assume that the zot registry is running at localhost:8080.

What data is available?

The zot source code incorporates golang's pprof package of runtime analysis tools to collect data for the following performance-related profiles:

Profile Description
allocs A sampling of all past memory allocations.
block Stack traces that led to blocking on synchronization primitives.
cmdline The command line invocation of the current program.
goroutine Stack traces of all current goroutines. Use debug=2 as a URL query parameter to export in the same format as an unrecovered panic.
heap A sampling of memory allocations of live objects. You can specify the gc GET parameter to run GC before taking the heap sample.
mutex Stack traces of holders of contended mutexes.
profile CPU usage profile. You can specify the duration in the seconds URL query parameter. After receiving the profile file, use the go tool pprof command to investigate the profile.
threadcreate Stack traces that led to the creation of new OS threads.
trace A trace of execution of the current program. You can specify the duration in the seconds URL query parameter. After you get the trace file, use the go tool trace command to investigate the trace.

To return a current HTML-format profile list along with a count of currently available records for each profile, use the following API command:

/v2/_zot/pprof/
+ Performance Profiling - zotregistry.dev      

Performance Profiling in zot

👉 Use zot's built-in profiling tools to collect and analyze runtime performance.

The profiling capabilities within zot allow a zot administrator to collect and export a range of diagnostic performance data such as CPU intensive function calls, memory allocations, and execution traces. The collected data can then be analyzed using Go tools and a variety of available visualization tools.

✏ If authentication is enabled, only a zot admin user can access the APIs for profiling.

✏ All examples in this article assume that the zot registry is running at localhost:8080.

What data is available?

The zot source code incorporates golang's pprof package of runtime analysis tools to collect data for the following performance-related profiles:

Profile Description
allocs A sampling of all past memory allocations.
block Stack traces that led to blocking on synchronization primitives.
cmdline The command line invocation of the current program.
goroutine Stack traces of all current goroutines. Use debug=2 as a URL query parameter to export in the same format as an unrecovered panic.
heap A sampling of memory allocations of live objects. You can specify the gc GET parameter to run GC before taking the heap sample.
mutex Stack traces of holders of contended mutexes.
profile CPU usage profile. You can specify the duration in the seconds URL query parameter. After receiving the profile file, use the go tool pprof command to investigate the profile.
threadcreate Stack traces that led to the creation of new OS threads.
trace A trace of execution of the current program. You can specify the duration in the seconds URL query parameter. After you get the trace file, use the go tool trace command to investigate the trace.

To return a current HTML-format profile list along with a count of currently available records for each profile, use the following API command:

/v2/_zot/pprof/
 

✏ If authentication is enabled, only an admin user can access this API.

How do I export profile data?

To collect and export any available profile, use the following API command format:

/v2/_zot/pprof/<profile-type>[?<query-parameters>]
 

The following example shows an API request for the CPU usage profile named profile using a collection window of 30 seconds:

$ curl -s http://localhost:8080/v2/_zot/pprof/profile?seconds=30 > cpu.prof
 

This command example creates an output data file named "cpu.prof".

  • The query parameter ?seconds=<number> specifies the number of seconds to gather the profile data. If this parameter is not specified, the default is 30 seconds.
  • In this example, the raw output data is redirected to a file named "cpu.prof". Alternatively, you can use curl -O to create a file with the default profile name (in this case, "profile"). If no output file is specified by either a cURL flag or an output redirection, the cURL command fails with "Failure writing output to destination".
  • The command output file is in a machine-readable format that can be interpreted by performance analyzers.

Analyzing the CPU usage profile using go tool pprof

Go's pprof package provides a variety of presentation formats for analyzing runtime performance.

For detailed information, see the pprof documentation.

Generating a pprof web presentation

When an HTTP port is specified as a command flag, the go tool pprof command installs and opens a local web server that provides a web interface for viewing and analyzing the profile data. This example opens a localhost page at port 9090 for viewing the CPU usage data captured in the profile file named "cpu.prof".

$ go tool pprof -http=:9090 cpu.prof
diff --git a/v2.0.2/articles/retention/index.html b/v2.0.2/articles/retention/index.html
index 99d52a3..46ad6ad 100644
--- a/v2.0.2/articles/retention/index.html
+++ b/v2.0.2/articles/retention/index.html
@@ -1,4 +1,4 @@
- Retention Policies - zotregistry.dev      

Configuring zot Tag Retention Policies

👉 To optimize image storage, you can configure tag retention policies to remove images that are no longer needed.

Tag retention policies in zot can specify how many tags of a given repository to retain or how long to retain certain tags.

You can define tag retention policies that apply one or more of the following rules:

  • Top <n> tags most recently pushed
  • Top <n> tags most recently pulled
  • Tags pushed in the past <n> hours
  • Tags pulled in the past <n> hours
  • Tags matching a regular expression (regex) pattern

Configuring retention policies

Retention policies are configured in the storage section of the zot configuration file under the retention attribute. One or more policies can be grouped under the policies attribute.

By default, if no retention policies are defined, all tags are retained.

⚠ If at least one keepTags policy is defined for a repository, all tags not matching those policies are removed. To avoid unintended removals, we recommend defining a default policy, as described in Configuration notes.

Configuration example

The following example is a simple retention configuration with two policies:

  • The first includes all available configuration attributes.
  • The second acts as a default policy.

simple policy example

  "storage": {
+ Retention Policies - zotregistry.dev      

Configuring zot Tag Retention Policies

👉 To optimize image storage, you can configure tag retention policies to remove images that are no longer needed.

Tag retention policies in zot can specify how many tags of a given repository to retain or how long to retain certain tags.

You can define tag retention policies that apply one or more of the following rules:

  • Top <n> tags most recently pushed
  • Top <n> tags most recently pulled
  • Tags pushed in the past <n> hours
  • Tags pulled in the past <n> hours
  • Tags matching a regular expression (regex) pattern

Configuring retention policies

Retention policies are configured in the storage section of the zot configuration file under the retention attribute. One or more policies can be grouped under the policies attribute.

By default, if no retention policies are defined, all tags are retained.

⚠ If at least one keepTags policy is defined for a repository, all tags not matching those policies are removed. To avoid unintended removals, we recommend defining a default policy, as described in Configuration notes.

Configuration example

The following example is a simple retention configuration with two policies:

  • The first includes all available configuration attributes.
  • The second acts as a default policy.

simple policy example

  "storage": {
     "retention": {
       "dryRun": false,
       "delay": "24h",
diff --git a/v2.0.2/articles/security-posture/index.html b/v2.0.2/articles/security-posture/index.html
index a6f6404..49551e0 100644
--- a/v2.0.2/articles/security-posture/index.html
+++ b/v2.0.2/articles/security-posture/index.html
@@ -1 +1 @@
- Security Posture - zotregistry.dev      

zot Security Posture

👉 An overview of zot build-time and runtime security hardening features, including:

  • Build-time hardening such as PIE-mode builds
  • Minimal-build option for smaller attack surface
  • Open Source Security Foundation best practices for CI/CD
  • Non-root deployment
  • Robust authentication/authorization options

The zot project takes a defense-in-depth approach to security, applying industry-standard best practices at various stages. Recognizing that security hardening and product features are sometimes in conflict with each other, we also provide flexibility both at build and deployment time.

Build-time hardening

The following are the steps taken during build-time.

PIE build-mode

The zot binary is built with PIE build-mode enabled to take advantage of ASLR support in modern operating systems such as Linux ASLR. While zot is intended to be a long-running service (without frequent restarts), it prevents attackers from developing a generic attack that depends on predictable memory addresses across multiple zot deployments.

Conditional builds

Functionality in zot is broadly organized as a core Distribution Specification implementation and additional features as extensions. The rationale behind this approach is to minimize or control library dependencies that get included in the binary and consequently the attack surface.

We currently build and release two image flavors:

  • minimal, which is a minimal Distribution Specification conformant registry, and

  • full, which incorporates the minimal build and all extensions

The minimal flavor is for the security-minded and minimizes the number of dependencies and libraries. The full flavor is for the functionality-minded with the caveat that the attack surface of the binary is potentially broader. However by no means are these the only options. Our build (via the Makefile) provides the flexibility to pick and choose extensions in order to build a binary between minimal and full. For example,

make EXTENSIONS=search binary

produces a zot binary with only the search feature enabled.

CI/CD pipeline

zot CI/CD process attempts to align with the Open Source Security Foundation (OSSF) best practices guidelines to achieve high code quality.

Code reviews

zot is an open source project and all code submissions are open and transparent. Every pull request (PR) submitted to the project repository must be reviewed by the code owners. We have additional CI/CD workflows monitoring for unreviewed commits.

CI/CD checks

All PRs must pass the full CI/CD pipeline checks including unit, functional, and integration tests, code quality and style checks, and performance regressions. In addition, all binaries produced are subjected to further security scans to detect any known vulnerabilities.

Runtime hardening

The following steps can be taken to harden a zot deployment.

Unprivileged runtime process

Running zot doesn’t require root privileges. In fact, the recommended approach is to create a separate user/group ID for the zot process.

Authentication

All interactions with zot are over HTTP APIs, and htpasswd-based local authentication, LDAP, mutual TLS, and token-based authentication mechanisms are supported. We strongly recommend enabling a suitable mechanism for your deployment use case in order to prevent unauthorized access. See the provided authentication examples.

Access control

Following authentication, it is further possible to allow or deny actions by a user on a particular repository stored on the zot registry. See the provided access control examples.

Vulnerability scans

Apart from hardening the deployment itself, zot also supports security scanning of stored container images.

Reporting security issues

We understand that no software is perfect and in spite of our best efforts, security bugs may be found. Refer to our security policy for taking a responsible course of action when reporting security bugs.


Last update: December 21, 2022
\ No newline at end of file + Security Posture - zotregistry.dev

zot Security Posture

👉 An overview of zot build-time and runtime security hardening features, including:

  • Build-time hardening such as PIE-mode builds
  • Minimal-build option for smaller attack surface
  • Open Source Security Foundation best practices for CI/CD
  • Non-root deployment
  • Robust authentication/authorization options

The zot project takes a defense-in-depth approach to security, applying industry-standard best practices at various stages. Recognizing that security hardening and product features are sometimes in conflict with each other, we also provide flexibility both at build and deployment time.

Build-time hardening

The following are the steps taken during build-time.

PIE build-mode

The zot binary is built with PIE build-mode enabled to take advantage of ASLR support in modern operating systems such as Linux ASLR. While zot is intended to be a long-running service (without frequent restarts), it prevents attackers from developing a generic attack that depends on predictable memory addresses across multiple zot deployments.

Conditional builds

Functionality in zot is broadly organized as a core Distribution Specification implementation and additional features as extensions. The rationale behind this approach is to minimize or control library dependencies that get included in the binary and consequently the attack surface.

We currently build and release two image flavors:

  • minimal, which is a minimal Distribution Specification conformant registry, and

  • full, which incorporates the minimal build and all extensions

The minimal flavor is for the security-minded and minimizes the number of dependencies and libraries. The full flavor is for the functionality-minded with the caveat that the attack surface of the binary is potentially broader. However by no means are these the only options. Our build (via the Makefile) provides the flexibility to pick and choose extensions in order to build a binary between minimal and full. For example,

make EXTENSIONS=search binary

produces a zot binary with only the search feature enabled.

CI/CD pipeline

zot CI/CD process attempts to align with the Open Source Security Foundation (OSSF) best practices guidelines to achieve high code quality.

Code reviews

zot is an open source project and all code submissions are open and transparent. Every pull request (PR) submitted to the project repository must be reviewed by the code owners. We have additional CI/CD workflows monitoring for unreviewed commits.

CI/CD checks

All PRs must pass the full CI/CD pipeline checks including unit, functional, and integration tests, code quality and style checks, and performance regressions. In addition, all binaries produced are subjected to further security scans to detect any known vulnerabilities.

Runtime hardening

The following steps can be taken to harden a zot deployment.

Unprivileged runtime process

Running zot doesn’t require root privileges. In fact, the recommended approach is to create a separate user/group ID for the zot process.

Authentication

All interactions with zot are over HTTP APIs, and htpasswd-based local authentication, LDAP, mutual TLS, and token-based authentication mechanisms are supported. We strongly recommend enabling a suitable mechanism for your deployment use case in order to prevent unauthorized access. See the provided authentication examples.

Access control

Following authentication, it is further possible to allow or deny actions by a user on a particular repository stored on the zot registry. See the provided access control examples.

Vulnerability scans

Apart from hardening the deployment itself, zot also supports security scanning of stored container images.

Reporting security issues

We understand that no software is perfect and in spite of our best efforts, security bugs may be found. Refer to our security policy for taking a responsible course of action when reporting security bugs.


Last update: December 21, 2022
\ No newline at end of file diff --git a/v2.0.2/articles/storage/index.html b/v2.0.2/articles/storage/index.html index 3760231..192639c 100644 --- a/v2.0.2/articles/storage/index.html +++ b/v2.0.2/articles/storage/index.html @@ -1,4 +1,4 @@ - Storage Planning - zotregistry.dev

Storage Planning with zot

👉 zot supports the following features to provide OCI standards-based, vendor-agnostic image storage:

  • Local and remote file storage
  • Inline deduplication and garbage collection
  • Data scrubbing in background

Storage model

Data handling in zot revolves around two main principles: that data and APIs on the wire conform to the OCI Distribution Specification and that data on the disk conforms to the OCI Image Layout Specification. As a result, any client that is compliant with the Distribution Specification can read from or write to a zot registry. Furthermore, the actual storage is simply an OCI Image Layout. With only these two specification documents in hand, the entire data flow inside can be easily understood.

✏ zot does not implement, support, or require any vendor-specific protocols, including that of Docker.

Hosting an OCI image layout

Because zot supports the OCI image layout, it can readily host and serve any directories holding a valid OCI image layout even when those directories have been created elsewhere. This property of zot is suitable for use cases in which container images are independently built, stored, and transferred, but later need to be served over the network.

Storage features

Exposing flexibility in storage capabilities is a key tenet for catering to the requirements of varied environments ranging from cloud to on-premises to IoT.

Commit

Most modern filesystems buffer and flush RAM data to disk after a delay. The purpose of this function is to improve performance at the cost of higher disk memory usage. In embedded devices such as Raspberry Pi, for example, where RAM may be very limited and at a premium, it is desirable to flush data to disk more frequently. The zot storage configuration exposes an option called commit which, when enabled, causes data writes to be committed to disk immediately. This option is disabled by default.

Deduplication

Deduplication is a storage space saving feature wherein only a single copy of specific content is maintained on disk while many different image manifests may hold references to that same content. The deduplication option (dedupe) is also available for supported cloud storage backends.

Upon startup, zot enforces the dedupe status on the existing storage. If the dedupe status upon startup is true, zot deduplicates all blobs found in storage, both local and remote. If the status upon startup is false, zot restores cloud storage blobs to their original state. There is no need for zot to restore local filesystem storage if hard links are used.

Garbage collection

After an image is deleted by deleting an image manifest, the corresponding blobs can be purged to free up space. However, since Distribution Specification APIs are not transactional between blob and manifest lifecycle, care must be taken so as not to put the storage in an inconsistent state. Garbage collection in zot is an inline feature meaning that it is not necessary to take the registry offline. See Configuring garbage collection for details.

Scrub

The scrub function, available as an extension, makes it possible to ascertain data validity by computing hashes on blobs periodically and continuously so that any bit rot is caught and reported early.

Storage backends

The following types of storage backends are supported.

Local filesystem

zot can store and serve files from one or more local directories. A minimum of one root directory is required for local hosting, but additional hosted directories can be added. When accessed by HTTP APIs, all directories can appear as a single data store.

✏ Remote filesystems that are mounted and accessible locally such as NFS or fuse are treated as local filesystems.

Remote filesystem

zot can also store data remotely in the cloud, using the storage APIs of the cloud service. Currently, zot supports only the AWS s3 storage service.

Example: configuration for remote (s3) storage

Click here to view a sample zot configuration for remote storage.
{
+ Storage Planning - zotregistry.dev      

Storage Planning with zot

👉 zot supports the following features to provide OCI standards-based, vendor-agnostic image storage:

  • Local and remote file storage
  • Inline deduplication and garbage collection
  • Data scrubbing in background

Storage model

Data handling in zot revolves around two main principles: that data and APIs on the wire conform to the OCI Distribution Specification and that data on the disk conforms to the OCI Image Layout Specification. As a result, any client that is compliant with the Distribution Specification can read from or write to a zot registry. Furthermore, the actual storage is simply an OCI Image Layout. With only these two specification documents in hand, the entire data flow inside can be easily understood.

✏ zot does not implement, support, or require any vendor-specific protocols, including that of Docker.

Hosting an OCI image layout

Because zot supports the OCI image layout, it can readily host and serve any directories holding a valid OCI image layout even when those directories have been created elsewhere. This property of zot is suitable for use cases in which container images are independently built, stored, and transferred, but later need to be served over the network.

Storage features

Exposing flexibility in storage capabilities is a key tenet for catering to the requirements of varied environments ranging from cloud to on-premises to IoT.

Commit

Most modern filesystems buffer and flush RAM data to disk after a delay. The purpose of this function is to improve performance at the cost of higher disk memory usage. In embedded devices such as Raspberry Pi, for example, where RAM may be very limited and at a premium, it is desirable to flush data to disk more frequently. The zot storage configuration exposes an option called commit which, when enabled, causes data writes to be committed to disk immediately. This option is disabled by default.

Deduplication

Deduplication is a storage space saving feature wherein only a single copy of specific content is maintained on disk while many different image manifests may hold references to that same content. The deduplication option (dedupe) is also available for supported cloud storage backends.

Upon startup, zot enforces the dedupe status on the existing storage. If the dedupe status upon startup is true, zot deduplicates all blobs found in storage, both local and remote. If the status upon startup is false, zot restores cloud storage blobs to their original state. There is no need for zot to restore local filesystem storage if hard links are used.

Garbage collection

After an image is deleted by deleting an image manifest, the corresponding blobs can be purged to free up space. However, since Distribution Specification APIs are not transactional between blob and manifest lifecycle, care must be taken so as not to put the storage in an inconsistent state. Garbage collection in zot is an inline feature meaning that it is not necessary to take the registry offline. See Configuring garbage collection for details.

Scrub

The scrub function, available as an extension, makes it possible to ascertain data validity by computing hashes on blobs periodically and continuously so that any bit rot is caught and reported early.

Storage backends

The following types of storage backends are supported.

Local filesystem

zot can store and serve files from one or more local directories. A minimum of one root directory is required for local hosting, but additional hosted directories can be added. When accessed by HTTP APIs, all directories can appear as a single data store.

✏ Remote filesystems that are mounted and accessible locally such as NFS or fuse are treated as local filesystems.

Remote filesystem

zot can also store data remotely in the cloud, using the storage APIs of the cloud service. Currently, zot supports only the AWS s3 storage service.

Example: configuration for remote (s3) storage

Click here to view a sample zot configuration for remote storage.
{
     "distSpecVersion": "1.0.1-dev",
     "storage": {
         "rootDirectory": "/tmp/zot",
diff --git a/v2.0.2/articles/verifying-signatures/index.html b/v2.0.2/articles/verifying-signatures/index.html
index 4ae19d2..fccb757 100644
--- a/v2.0.2/articles/verifying-signatures/index.html
+++ b/v2.0.2/articles/verifying-signatures/index.html
@@ -1,4 +1,4 @@
- Verifying Image Signatures - zotregistry.dev      

Verifying image signatures

Images stored in zot can be signed with a digital signature to verify the source and integrity of the image. The digital signature can be verified by zot using public keys or certificates uploaded by the user.

To verify image signatures, zot supports the following tools:

Enabling image signature verification

To enable image signature verification, add the trust attribute under extensions in the zot configuration file and enable one or more verification tools, as shown in the following example:

"extensions": {
+ Verifying Image Signatures - zotregistry.dev      

Verifying image signatures

Images stored in zot can be signed with a digital signature to verify the source and integrity of the image. The digital signature can be verified by zot using public keys or certificates uploaded by the user.

To verify image signatures, zot supports the following tools:

Enabling image signature verification

To enable image signature verification, add the trust attribute under extensions in the zot configuration file and enable one or more verification tools, as shown in the following example:

"extensions": {
   "trust": {
     "enable": true,
     "cosign": true,
diff --git a/v2.0.2/articles/workflow/index.html b/v2.0.2/articles/workflow/index.html
index 3109c6c..7d2c668 100644
--- a/v2.0.2/articles/workflow/index.html
+++ b/v2.0.2/articles/workflow/index.html
@@ -1,4 +1,4 @@
- Software Provenance Workflow Using OCI Artifacts - zotregistry.dev      

Software Provenance Workflow Using OCI Artifacts

👉 This article demonstrates an end-to-end workflow for installing a zot registry, then pushing and signing an image and a related artifact, such as an SBOM.

Workflow

The following sections describe the step-by-step workflow. To view the steps combined into a single script, see Reference: Full workflow script.

For the workflow examples, the zot registry is assumed to be installed and running at localhost:8080.

Step 1: Download the client tools

This workflow uses the regctl registry client and the cosign image signing tool. As a first step, we download binaries for these tools in a tools directory.

TEST_TMPDIR=$(mktemp -d "${PWD}/artifact-test-${1:+-$1}.XXXXXX")
+ Software Provenance Workflow Using OCI Artifacts - zotregistry.dev      

Software Provenance Workflow Using OCI Artifacts

👉 This article demonstrates an end-to-end workflow for installing a zot registry, then pushing and signing an image and a related artifact, such as an SBOM.

Workflow

The following sections describe the step-by-step workflow. To view the steps combined into a single script, see Reference: Full workflow script.

For the workflow examples, the zot registry is assumed to be installed and running at localhost:8080.

Step 1: Download the client tools

This workflow uses the regctl registry client and the cosign image signing tool. As a first step, we download binaries for these tools in a tools directory.

TEST_TMPDIR=$(mktemp -d "${PWD}/artifact-test-${1:+-$1}.XXXXXX")
 
 TOOLSDIR=$(pwd)/hack/tools
 mkdir -p ${TOOLSDIR}/bin
diff --git a/v2.0.2/developer-guide/api-reference/index.html b/v2.0.2/developer-guide/api-reference/index.html
index 73ef003..71664a5 100644
--- a/v2.0.2/developer-guide/api-reference/index.html
+++ b/v2.0.2/developer-guide/api-reference/index.html
@@ -1,4 +1,4 @@
- API Reference - zotregistry.dev      

zot API Command Reference

👉 This article describes the zot REST API commands, parameters, and responses.

The information presented here is adapted from the interactive OpenAPI (formerly swagger) JSON file in the zot Github project.

For instructions and examples of how to use the zot API, see Using the zot API.

/zot/auth/apikey

DELETE /zot/auth/apikey

Revokes one current user API key based on given key ID

Parameters

Name In Type Required Description
id query string true api token id (UUID)

Example responses

200 Response

"string"
+ API Reference - zotregistry.dev      

zot API Command Reference

👉 This article describes the zot REST API commands, parameters, and responses.

The information presented here is adapted from the interactive OpenAPI (formerly swagger) JSON file in the zot Github project.

For instructions and examples of how to use the zot API, see Using the zot API.

/zot/auth/apikey

DELETE /zot/auth/apikey

Revokes one current user API key based on given key ID

Parameters

Name In Type Required Description
id query string true api token id (UUID)

Example responses

200 Response

"string"
 

Responses

Status Meaning Description Schema
200 OK ok string
400 Bad Request bad request string
401 Unauthorized unauthorized string
500 Internal Server Error internal server error string

This operation does not require authentication

GET /zot/auth/apikey

Get list of all API keys for a logged in user

Example responses

200 Response

"string"
 

Responses

Status Meaning Description Schema
200 OK ok string
401 Unauthorized unauthorized string
500 Internal Server Error internal server error string

This operation does not require authentication

POST /zot/auth/apikey

Can create an api key for a logged in user, based on the provided label and scopes.

Body parameter

{
   "expirationDate": "string",
diff --git a/v2.0.2/developer-guide/api-user-guide/index.html b/v2.0.2/developer-guide/api-user-guide/index.html
index b957856..2e03637 100644
--- a/v2.0.2/developer-guide/api-user-guide/index.html
+++ b/v2.0.2/developer-guide/api-user-guide/index.html
@@ -1,4 +1,4 @@
- Using the API - zotregistry.dev      

Using the zot API

👉 This document describes how to use the zot REST API and provides a number of examples.

For comprehensive details of all zot API commands, see Viewing the complete zot API reference.

The zot API implements the OCI Distribution endpoints along with additional endpoints for supported extensions. You can access the REST API at the same URL and port number used by the GUI and by datapath tools.

✏ The examples in this article assume that the zot registry is located at localhost:8080.

Supported API endpoints

The following is a list of zot API endpoints along with the conditions under which each endpoint is available.

✏ Some API endpoints are available only when a specific extension is enabled in the zot configuration file, or when an extension build label is specified in the make command (for example, make binary EXTENSIONS=ui), or both.

For comprehensive details of the API endpoints, see Viewing the complete zot API reference.

OCI endpoints

Endpoint Actions Description
/v2/ GET OCI specification endpoints
/v2/_catalog GET Lists repositories in a registry.
/v2/_oci/ext/discover GET Discover extensions per the OCI specification
/v2/{repo}/blobs/{digest} DELETE, GET, HEAD Lists or deletes an image's blob/layer given a digest
/v2/{repo}/blobs/uploads POST Creates an image blob/layer upload
/v2/{repo}/blobs/uploads/{session_id} DELETE, GET, PATCH, PUT Creates, lists, or deletes an image's blob/layer upload given a session_id
/v2/{repo}/manifests/{reference} DELETE, GET, HEAD, PUT Creates, lists, or deletes references for an image
/v2/{repo}/referrers/{digest} GET Lists referrers given a digest
/v2/{repo}/tags/list GET List all image tags in a repository

zot OCI extension endpoints

Endpoint Actions Description Availability
/v2/_zot/ext/mgmt GET Mgmt extension endpoints Enabled by using the mgmt build label and enabling the search extension in the configuration file.
/v2/_zot/ext/notation POST With query parameters, uploads certificates for signature verification Enabled by using the imagetrust build label and enabling the trust extension with the notation option enabled.
/v2/_zot/ext/search Enhanced search Enabled by using the search build label and enabling the search extension in the configuration file.
/v2/_zot/ext/cosign POST Uploads keys for signature verification Enabled by using the imagetrust build label and enabling the trust extension with the cosign option enabled.
/v2/_zot/ext/userprefs PUT User preferences endpoints Enabled by using the userprefs build label and enabling both the search and the ui extensions in the configuration file.

zot auth endpoints

Endpoint Actions Description Availability
/zot/auth/apikey DELETE, GET, POST Creates, lists, or deletes API keys Available when API key authentication is enabled in the configuration file ("apikey": true).
/zot/auth/login POST Opens an API session Available when authentication is available. This includes not only OpenID, but all session-based authentication.
/zot/auth/logout POST Ends an API session Available when authentication is available. This includes not only OpenID, but all session-based authentication.
/zot/auth/callback/\<provider> POST Specifies a social authentication service provider for redirecting logins, such as Google or dex. Enabled when an OpenID authentication service provider is specified in the configuration file.

other zot endpoints

Endpoint Actions Description Availability
/v2/_zot/pprof/ GET Returns a current HTML-format profile list along with a count of currently available records for each profile. See Performance Profiling in zot for usage details. Always enabled.
/v2/_zot/debug/graphql-playground# See Using GraphQL for details. Enabled only in a binary-debug zot build or when the zot registry has been built with the debug extension label.

ORAS endpoints

Endpoint Actions Description Availability
/oras/artifacts/v1/{repo}/ manifests/{digest}/referrers GET OCI Registry As Storage (ORAS) endpoints Always enabled.

prometheus endpoint

Endpoint Actions Description Availability
/metrics GET Returns extended metrics for monitoring by prometheus Enabled when the metrics extension is enabled in the configuration file.

OpenAPI (swagger) endpoints

✏ This endpoint is accessed with a browser.

Endpoint Action Description Availability
/swagger/v2/ (browser) Displays an interactive OpenAPI (swagger) API reference. Enabled only in a binary-debug zot build or when the zot registry has been built with the debug extension label.

API authentication

✏ If zot authentication is not configured, any user can access the zot API.

When pushing and pulling images using API calls, your identity can be authenticated by either a password or an API key.

With a valid password, you can specify your credentials in a cURL request as shown in this example:

curl -u <user>:<password> -X GET http://<server>/<endpoint>
+ Using the API - zotregistry.dev      

Using the zot API

👉 This document describes how to use the zot REST API and provides a number of examples.

For comprehensive details of all zot API commands, see Viewing the complete zot API reference.

The zot API implements the OCI Distribution endpoints along with additional endpoints for supported extensions. You can access the REST API at the same URL and port number used by the GUI and by datapath tools.

✏ The examples in this article assume that the zot registry is located at localhost:8080.

Supported API endpoints

The following is a list of zot API endpoints along with the conditions under which each endpoint is available.

✏ Some API endpoints are available only when a specific extension is enabled in the zot configuration file, or when an extension build label is specified in the make command (for example, make binary EXTENSIONS=ui), or both.

For comprehensive details of the API endpoints, see Viewing the complete zot API reference.

OCI endpoints

Endpoint Actions Description
/v2/ GET OCI specification endpoints
/v2/_catalog GET Lists repositories in a registry.
/v2/_oci/ext/discover GET Discover extensions per the OCI specification
/v2/{repo}/blobs/{digest} DELETE, GET, HEAD Lists or deletes an image's blob/layer given a digest
/v2/{repo}/blobs/uploads POST Creates an image blob/layer upload
/v2/{repo}/blobs/uploads/{session_id} DELETE, GET, PATCH, PUT Creates, lists, or deletes an image's blob/layer upload given a session_id
/v2/{repo}/manifests/{reference} DELETE, GET, HEAD, PUT Creates, lists, or deletes references for an image
/v2/{repo}/referrers/{digest} GET Lists referrers given a digest
/v2/{repo}/tags/list GET List all image tags in a repository

zot OCI extension endpoints

Endpoint Actions Description Availability
/v2/_zot/ext/mgmt GET Mgmt extension endpoints Enabled by using the mgmt build label and enabling the search extension in the configuration file.
/v2/_zot/ext/notation POST With query parameters, uploads certificates for signature verification Enabled by using the imagetrust build label and enabling the trust extension with the notation option enabled.
/v2/_zot/ext/search Enhanced search Enabled by using the search build label and enabling the search extension in the configuration file.
/v2/_zot/ext/cosign POST Uploads keys for signature verification Enabled by using the imagetrust build label and enabling the trust extension with the cosign option enabled.
/v2/_zot/ext/userprefs PUT User preferences endpoints Enabled by using the userprefs build label and enabling both the search and the ui extensions in the configuration file.

zot auth endpoints

Endpoint Actions Description Availability
/zot/auth/apikey DELETE, GET, POST Creates, lists, or deletes API keys Available when API key authentication is enabled in the configuration file ("apikey": true).
/zot/auth/login POST Opens an API session Available when authentication is available. This includes not only OpenID, but all session-based authentication.
/zot/auth/logout POST Ends an API session Available when authentication is available. This includes not only OpenID, but all session-based authentication.
/zot/auth/callback/\<provider> POST Specifies a social authentication service provider for redirecting logins, such as Google or dex. Enabled when an OpenID authentication service provider is specified in the configuration file.

other zot endpoints

Endpoint Actions Description Availability
/v2/_zot/pprof/ GET Returns a current HTML-format profile list along with a count of currently available records for each profile. See Performance Profiling in zot for usage details. Always enabled.
/v2/_zot/debug/graphql-playground# See Using GraphQL for details. Enabled only in a binary-debug zot build or when the zot registry has been built with the debug extension label.

ORAS endpoints

Endpoint Actions Description Availability
/oras/artifacts/v1/{repo}/ manifests/{digest}/referrers GET OCI Registry As Storage (ORAS) endpoints Always enabled.

prometheus endpoint

Endpoint Actions Description Availability
/metrics GET Returns extended metrics for monitoring by prometheus Enabled when the metrics extension is enabled in the configuration file.

OpenAPI (swagger) endpoints

✏ This endpoint is accessed with a browser.

Endpoint Action Description Availability
/swagger/v2/ (browser) Displays an interactive OpenAPI (swagger) API reference. Enabled only in a binary-debug zot build or when the zot registry has been built with the debug extension label.

API authentication

✏ If zot authentication is not configured, any user can access the zot API.

When pushing and pulling images using API calls, your identity can be authenticated by either a password or an API key.

With a valid password, you can specify your credentials in a cURL request as shown in this example:

curl -u <user>:<password> -X GET http://<server>/<endpoint>
 

An API key has advantages in situations where the primary zot authentication does not use the command line, such as a GUI login or social login. Also, you can reduce your security exposure by using an API key instead of your broader credentials, such as an LDAP username and password.

Using API keys

Enabling API keys

To enable the use of API keys, you must set the apikey attribute to true in the zot configuration file, as shown in the following example:

  "http": {
     "auth": {
       "apikey": true
diff --git a/v2.0.2/developer-guide/contributing/index.html b/v2.0.2/developer-guide/contributing/index.html
index 7be687e..8b2da79 100644
--- a/v2.0.2/developer-guide/contributing/index.html
+++ b/v2.0.2/developer-guide/contributing/index.html
@@ -1 +1 @@
- Contributing - zotregistry.dev      

Contributing to zot Development

👉 The zot project is built for developers by developers. The zot project welcomes the participation of the open source community in extending and improving zot.

Submission Requirements

Summary: All contributions must meet these requirements:

  • Adhere to the Apache license
  • Be submitted by a pull request (PR) from your fork
  • Commits must have a

License

zot is released under the Apache License 2.0. All contributions must adhere to this license and must explicitly state adherence.

Submitting a Pull Request (PR)

First, fork the zot project on GitHub and submit a commit to your fork. Then open a new pull request (PR) to the zot project. All pull requests must meet these requirements:

  • License statement

Either the commit message or the PR description must contain the following statement:

"By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license."

  • Developer Certificate of Origin (DCO) and sign-off

All commits require a Developer Certificate of Origin via the "Signed-off-by:" commit message and commit signatures using GPG keys. Include the -s flag in your git commit command.

  • Commit message format

The commit message must follow the Convention Commits format. The message must begin with a keyword that categorizes the commit, followed by a colon. Validation of a commit message is determined by this expression:

"^((build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\(.+\))?(!)?(: (.*\s*)*))"

An example of a valid commit message is "docs: Fixes a typo in module.md."

In addition, any new PR requires a brief form to be completed by the submitter with details about the PR. Appropriate code owners are automatically identified and will be notified of the new PR.

CI/CD Checks

We take code quality very seriously. All PRs must pass various CI/CD checks that enforce code quality such as code coverage, security scanning, performance regressions, distribution spec conformance, ecosystem client tool compatibility, etc.

Reporting Issues

Issues are broadly classified as functional bugs and security issues. The latter is treated a little differently due to the sensitive nature.

Filing a Functional Issue

No software is perfect, and we expect users to find issues with the zot code base. First, check whether your issue has already been filed by someone else by performing an issue search. If the issue is not found, file a new issue by clicking the New issue button on the zot/issues page and answering the questions. The more information that you can provide, the easier it becomes to triage the issue.

Filing a Security Issue

Security issues are best filed by sending an email to security@zotregistry.dev. After 45 days, we will make the issue public and give credit to the original filer of the issue.

Code of Conduct

The zot project follows the CNCF Code of Conduct.

Reporting Conduct Incidents

To report a conduct-related incident occurring on the zot project, contact the zot project conduct committee by sending an email to conduct@zotregistry.dev. You can expect a response within three business days.


Last update: January 16, 2024
\ No newline at end of file + Contributing - zotregistry.dev

Contributing to zot Development

👉 The zot project is built for developers by developers. The zot project welcomes the participation of the open source community in extending and improving zot.

Submission Requirements

Summary: All contributions must meet these requirements:

  • Adhere to the Apache license
  • Be submitted by a pull request (PR) from your fork
  • Commits must have a

License

zot is released under the Apache License 2.0. All contributions must adhere to this license and must explicitly state adherence.

Submitting a Pull Request (PR)

First, fork the zot project on GitHub and submit a commit to your fork. Then open a new pull request (PR) to the zot project. All pull requests must meet these requirements:

  • License statement

Either the commit message or the PR description must contain the following statement:

"By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license."

  • Developer Certificate of Origin (DCO) and sign-off

All commits require a Developer Certificate of Origin via the "Signed-off-by:" commit message and commit signatures using GPG keys. Include the -s flag in your git commit command.

  • Commit message format

The commit message must follow the Convention Commits format. The message must begin with a keyword that categorizes the commit, followed by a colon. Validation of a commit message is determined by this expression:

"^((build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\(.+\))?(!)?(: (.*\s*)*))"

An example of a valid commit message is "docs: Fixes a typo in module.md."

In addition, any new PR requires a brief form to be completed by the submitter with details about the PR. Appropriate code owners are automatically identified and will be notified of the new PR.

CI/CD Checks

We take code quality very seriously. All PRs must pass various CI/CD checks that enforce code quality such as code coverage, security scanning, performance regressions, distribution spec conformance, ecosystem client tool compatibility, etc.

Reporting Issues

Issues are broadly classified as functional bugs and security issues. The latter is treated a little differently due to the sensitive nature.

Filing a Functional Issue

No software is perfect, and we expect users to find issues with the zot code base. First, check whether your issue has already been filed by someone else by performing an issue search. If the issue is not found, file a new issue by clicking the New issue button on the zot/issues page and answering the questions. The more information that you can provide, the easier it becomes to triage the issue.

Filing a Security Issue

Security issues are best filed by sending an email to security@zotregistry.dev. After 45 days, we will make the issue public and give credit to the original filer of the issue.

Code of Conduct

The zot project follows the CNCF Code of Conduct.

Reporting Conduct Incidents

To report a conduct-related incident occurring on the zot project, contact the zot project conduct committee by sending an email to conduct@zotregistry.dev. You can expect a response within three business days.


Last update: January 16, 2024
\ No newline at end of file diff --git a/v2.0.2/developer-guide/extensions-dev/index.html b/v2.0.2/developer-guide/extensions-dev/index.html index 7a61ee9..91bffb6 100644 --- a/v2.0.2/developer-guide/extensions-dev/index.html +++ b/v2.0.2/developer-guide/extensions-dev/index.html @@ -1,4 +1,4 @@ - Extensions - zotregistry.dev

Developing New Extensions

👉 You can add new functionality to the zot registry by developing extensions for integration into zot.

The OCI Distribution Specification supports extending the functionality of an OCI-compliant registry implementation by adding extensions. Extensions are new APIs developed outside of the core OCI specs. Developers may propose their extensions to the OCI for possible future addition to the Distribution Specification.

✏ When planning the development of a new extension, be sure to familiarize yourself with the OCI documentation and guidelines for extensions.

Current extensions

The following extensions are currently available in the zot project:

  • metrics
  • sync
  • search
  • scrub
  • lint

You can examine the implementation of these extensions in the zot project extensions section. The operation and configuration of the current extensions is described in Configuring zot.

Guidelines for developing new extensions

  • Each file to be included in the binary for only a specific extension must contain the following syntax at the beginning of the file. For example, a file to be included in the build for extension foo must begin with the following lines:
  //go:build foo
+ Extensions - zotregistry.dev      

Developing New Extensions

👉 You can add new functionality to the zot registry by developing extensions for integration into zot.

The OCI Distribution Specification supports extending the functionality of an OCI-compliant registry implementation by adding extensions. Extensions are new APIs developed outside of the core OCI specs. Developers may propose their extensions to the OCI for possible future addition to the Distribution Specification.

✏ When planning the development of a new extension, be sure to familiarize yourself with the OCI documentation and guidelines for extensions.

Current extensions

The following extensions are currently available in the zot project:

  • metrics
  • sync
  • search
  • scrub
  • lint

You can examine the implementation of these extensions in the zot project extensions section. The operation and configuration of the current extensions is described in Configuring zot.

Guidelines for developing new extensions

  • Each file to be included in the binary for only a specific extension must contain the following syntax at the beginning of the file. For example, a file to be included in the build for extension foo must begin with the following lines:
  //go:build foo
   // +build foo
 
   package foo
diff --git a/v2.0.2/developer-guide/onboarding/index.html b/v2.0.2/developer-guide/onboarding/index.html
index f4e3f64..c488fb0 100644
--- a/v2.0.2/developer-guide/onboarding/index.html
+++ b/v2.0.2/developer-guide/onboarding/index.html
@@ -1,4 +1,4 @@
- Onboarding - zotregistry.dev      

Onboarding zot for Development

👉 zot is a production-ready, open-source, extensible OCI-native image registry, built for developers by developers.

Getting Started

Supported Developer Platforms

Development is officially supported on Linux and Apple MacOS platforms. However, development should be possible on any platform that supports the golang toolchain.

OS ARCH Platform
linux amd64 Intel-based Linux servers
linux arm64 ARM-based servers and Raspberry Pi4
darwin amd64 Intel-based MacOS
darwin arm64 ARM-based MacOS (Apple M1)

Supported platforms and architectures

Prerequisites

Install golang

Follow the golang instructions to install the golang toolchain. After installation, make sure that the path environment variable or your IDE can find the toolchain.

✏ You must use a golang version of at least the minimum specified in go.mod or the build will fail.

Cloning zot

The zot registry code base is hosted on GitHub at https://github.com/project-zot/zot.

To clone the zot project, use this command:

$ git clone https://github.com/project-zot/zot.git
+ Onboarding - zotregistry.dev      

Onboarding zot for Development

👉 zot is a production-ready, open-source, extensible OCI-native image registry, built for developers by developers.

Getting Started

Supported Developer Platforms

Development is officially supported on Linux and Apple MacOS platforms. However, development should be possible on any platform that supports the golang toolchain.

OS ARCH Platform
linux amd64 Intel-based Linux servers
linux arm64 ARM-based servers and Raspberry Pi4
darwin amd64 Intel-based MacOS
darwin arm64 ARM-based MacOS (Apple M1)

Supported platforms and architectures

Prerequisites

Install golang

Follow the golang instructions to install the golang toolchain. After installation, make sure that the path environment variable or your IDE can find the toolchain.

✏ You must use a golang version of at least the minimum specified in go.mod or the build will fail.

Cloning zot

The zot registry code base is hosted on GitHub at https://github.com/project-zot/zot.

To clone the zot project, use this command:

$ git clone https://github.com/project-zot/zot.git
 

Building zot

To build zot, execute the make command in the zot directory using the following general syntax:

$ make OS=os ARCH=architecture {binary | binary-minimal}

  • The operating system and architecture options are listed in the Supported platforms and architectures table. If an option is not specified, the defaults are linux and amd64.

  • The binary option builds the full zot binary image with all extensions.

  • The binary-minimal option builds the minimal distribution-spec conformant zot binary image without extensions, reducing the attack surface.

For example, to build a zot image with extensions for an Intel-based linux server, use the following command:

make OS=linux ARCH=amd64 binary
 

The make command builds an executable image in the zot/bin directory. The original filename of the zot executable image will indicate the build options. For example, the filename of an Intel-based linux minimal image is zot-minimal-linux-amd64.

Click here to view an example of the getting started process.

Running zot

The behavior of zot is controlled via configuration only. To launch the zot server, execute the following command:

$  bin/zot-linux-amd64 serve examples/config-minimal.json
 

Debugging zot

To produce a zot binary that includes extensive debugging information, build zot with the binary-debug option, as shown in this example:

make OS=linux ARCH=amd64 binary-debug
diff --git a/v2.0.2/general/architecture/index.html b/v2.0.2/general/architecture/index.html
index 284de57..cc73678 100644
--- a/v2.0.2/general/architecture/index.html
+++ b/v2.0.2/general/architecture/index.html
@@ -1 +1 @@
- Architecture - zotregistry.dev      

Architecture

👉 zot is an OCI-native container image registry. This document discusses the design goals, the overall architecture, and the design choices made in the implementation of the design goals.

Design Goals

OCI-first

  • HTTP APIs strictly conforms to the OCI Distribution Specification

    zot intends to be a production reference implementation for the OCI Distribution Specification. In fact, zot does not support any other vendor protocol or specification.

  • Storage layout follows the OCI Image Specification

    The default and only supported storage layout is the OCI Image Layout. The implications of this choice are that any OCI image layout can be served by zot and conversely, zot converts data on-the-wire into an OCI image layout.

Single binary model

zot is a single binary image with all features included so that deployment is extremely simple in various environments, including bare-metal, cloud, and embedded devices. Behavior is controlled by a single configuration file.

Enable Only What You Need

A clear separation exists between (1) the core OCI-compliant HTTP APIs and storage functionality, and (2) other add-on features modeled as extensions. The extension features can be selectively enabled both at build-time and run-time.

For more information, see "Conditional Builds" in zot's security posture document.

Overall Architecture

As shown in the following figure, the architecture of zot is organized as:

👉 zot-full = zot-minimal + extensions

504567.jpg

The minimal build is the core OCI-compliant registry functionality as described by the OCI Distribution Specification.

The full build adds features that are not a part of the Distribution Specification, but are allowed to be added as Extensions.

External Interaction

External interaction with zot consists of the following two types:

  • Client-initiated data or meta-data queries

  • Admin-initiated configuration

All client-side interaction occurs over HTTP APIs. The core data path queries are governed by the OCI Distribution Specification. All additional meta-data queries are handled based on the setting of the search extension:

  • If the search extension is enabled, enhanced registry searching and filtering is supported, using graphQL. A database is maintained by zot to efficiently answer complex queries on data stored in the database.

  • If the search extension is not enabled, basic queries are supported using the core APIs. These queries are less efficient and search actual storage, which is limited in content.

Configuration

A single configuration file governs zot instance behavior. An exception can be made for security concerns, wherein configuration items containing sensitive credentials can be stored in separate files referenced by the main configuration file. Using separate files allows stricter permissions to be enforced on those files if stored locally. Also, modeling as external files allows for storing Kubernetes Secrets.

The configuration file is divided into sections for http, storage, log, and extension, governing the behavior of the respective components.

Authentication and Authorization

A robust set of authentication and authorization options are supported natively in zot. These controls are enforced before access is allowed into the storage layer.

For more information, see User Authentication and Authorization with zot.

Storage Driver Support

zot supports any modern local filesystem. Remote filesystems, such as AWS S3 or any AWS S3-compatible storage system, are supported. Additional driver support is planned in the roadmap.

✏ Deduplication is supported for both local and remote filesystems, but deduplication requires a filesystem with hard-link support.

For more information, see Storage Planning with zot.

Security Scanning

zot integrates with the trivy security scanner to scan container images for vulnerabilities. The database is kept current by periodically downloading any vulnerability database updates at a configurable interval. The user remains agnostic of the actual scanner implementation, which may change over time.

Extensions

Additional registry features that are not a part of the Distribution Specification are added as Extensions.

✏ Extension features of zot are available only with a full zot image. They are not supported in a minimal zot image.

For more information about zot's extensions, see Extensions.

Background Tasks

Several periodic tasks occur in the registry, such as garbage collection, sync mirroring, and scrubbing. A task scheduler handles these tasks in the background, taking care not to degrade or interrupt foreground tasks running in the context of HTTP APIs.


Last update: September 13, 2023
\ No newline at end of file + Architecture - zotregistry.dev

Architecture

👉 zot is an OCI-native container image registry. This document discusses the design goals, the overall architecture, and the design choices made in the implementation of the design goals.

Design Goals

OCI-first

  • HTTP APIs strictly conforms to the OCI Distribution Specification

    zot intends to be a production reference implementation for the OCI Distribution Specification. In fact, zot does not support any other vendor protocol or specification.

  • Storage layout follows the OCI Image Specification

    The default and only supported storage layout is the OCI Image Layout. The implications of this choice are that any OCI image layout can be served by zot and conversely, zot converts data on-the-wire into an OCI image layout.

Single binary model

zot is a single binary image with all features included so that deployment is extremely simple in various environments, including bare-metal, cloud, and embedded devices. Behavior is controlled by a single configuration file.

Enable Only What You Need

A clear separation exists between (1) the core OCI-compliant HTTP APIs and storage functionality, and (2) other add-on features modeled as extensions. The extension features can be selectively enabled both at build-time and run-time.

For more information, see "Conditional Builds" in zot's security posture document.

Overall Architecture

As shown in the following figure, the architecture of zot is organized as:

👉 zot-full = zot-minimal + extensions

504567.jpg

The minimal build is the core OCI-compliant registry functionality as described by the OCI Distribution Specification.

The full build adds features that are not a part of the Distribution Specification, but are allowed to be added as Extensions.

External Interaction

External interaction with zot consists of the following two types:

  • Client-initiated data or meta-data queries

  • Admin-initiated configuration

All client-side interaction occurs over HTTP APIs. The core data path queries are governed by the OCI Distribution Specification. All additional meta-data queries are handled based on the setting of the search extension:

  • If the search extension is enabled, enhanced registry searching and filtering is supported, using graphQL. A database is maintained by zot to efficiently answer complex queries on data stored in the database.

  • If the search extension is not enabled, basic queries are supported using the core APIs. These queries are less efficient and search actual storage, which is limited in content.

Configuration

A single configuration file governs zot instance behavior. An exception can be made for security concerns, wherein configuration items containing sensitive credentials can be stored in separate files referenced by the main configuration file. Using separate files allows stricter permissions to be enforced on those files if stored locally. Also, modeling as external files allows for storing Kubernetes Secrets.

The configuration file is divided into sections for http, storage, log, and extension, governing the behavior of the respective components.

Authentication and Authorization

A robust set of authentication and authorization options are supported natively in zot. These controls are enforced before access is allowed into the storage layer.

For more information, see User Authentication and Authorization with zot.

Storage Driver Support

zot supports any modern local filesystem. Remote filesystems, such as AWS S3 or any AWS S3-compatible storage system, are supported. Additional driver support is planned in the roadmap.

✏ Deduplication is supported for both local and remote filesystems, but deduplication requires a filesystem with hard-link support.

For more information, see Storage Planning with zot.

Security Scanning

zot integrates with the trivy security scanner to scan container images for vulnerabilities. The database is kept current by periodically downloading any vulnerability database updates at a configurable interval. The user remains agnostic of the actual scanner implementation, which may change over time.

Extensions

Additional registry features that are not a part of the Distribution Specification are added as Extensions.

✏ Extension features of zot are available only with a full zot image. They are not supported in a minimal zot image.

For more information about zot's extensions, see Extensions.

Background Tasks

Several periodic tasks occur in the registry, such as garbage collection, sync mirroring, and scrubbing. A task scheduler handles these tasks in the background, taking care not to degrade or interrupt foreground tasks running in the context of HTTP APIs.


Last update: September 13, 2023
\ No newline at end of file diff --git a/v2.0.2/general/concepts/index.html b/v2.0.2/general/concepts/index.html index 6d6d979..5d3693e 100644 --- a/v2.0.2/general/concepts/index.html +++ b/v2.0.2/general/concepts/index.html @@ -1 +1 @@ - Concepts - zotregistry.dev

Concepts

What is zot?

👉 zot is a production-ready, open-source, vendor-neutral container image registry server based purely on OCI standards.

Two broad trends are changing how we build, distribute, and consume software. The first trend is the increasing adoption of container technologies. The second trend is that software solutions are being composed by combining elements from various sources rather than being built entirely from scratch. The latter trend raises the importance of software provenance and supply chain security. In both trends, zot intends to play an important role by providing a production-ready, open-source, vendor-neutral container image registry server based purely on OCI standards.

What is an OCI image registry?

An OCI image registry is a server-based application that allows you to store, manage, and share container images. A developer uploads (pushes) an image to the registry for distribution. Users can then download (pull) the image to run on their systems. The OCI Distribution Specification, published by the Open Container Initiative (OCI), defines a standard API protocol for these and other image registry operations.

An image registry can be a part of your continuous integration and continuous deployment (CI/CD) pipeline when you host zot on your public or private server. In its minimal form, you can also embed a zot registry in a product. In either case, zot provides a secure software supply chain for container images.

Why zot?

👉 zot = OCI Distribution Specification + OCI Image Format

At its heart, zot is a production-ready, vendor-neutral OCI image registry with images stored in the OCI image format and with the OCI distribution specification on-the-wire. zot is built for developers by developers, offering features such as minimal deployment using a single binary image, built-in authentication and authorization, and inline garbage collection and storage deduplication.

504566

Some of the principal advantages of zot are:

  • Open source

  • OCI standards-only both on-the-wire and on-disk

  • Clear separation between core distribution spec and zot-specific extensions

  • Software supply chain security, including support for cosign and notation

  • Security hardening

  • Single binary with many features built-in

  • Suitable for deployments in cloud, bare-metal, and embedded devices

zot fully conforms to the OCI Distribution Specification.

The following table lists additional advantages of zot:

Distribution Spec conformance yes
CNCF project accepted as a Sandbox Project
License Apache 2.0
On-premises deployment yes
OCI conformance* yes
Single binary image* yes
Minimal build* yes
Storage Layout OCI v1 Image Layout
Authentication built-in
Authorization built-in
Garbage collection inline
Storage deduplication inline
Cloud storage support yes
Delete by tag yes
Vulnerability scanning built-in
Command line interface (cli) yes
UI yes
External contributions beta available
Image signatures built-in

✏ * The minimal build feature is the ability to build a minimal Distribution Spec compliant registry in order to reduce library dependencies and the possible attack surface.


Last update: May 18, 2023
\ No newline at end of file + Concepts - zotregistry.dev

Concepts

What is zot?

👉 zot is a production-ready, open-source, vendor-neutral container image registry server based purely on OCI standards.

Two broad trends are changing how we build, distribute, and consume software. The first trend is the increasing adoption of container technologies. The second trend is that software solutions are being composed by combining elements from various sources rather than being built entirely from scratch. The latter trend raises the importance of software provenance and supply chain security. In both trends, zot intends to play an important role by providing a production-ready, open-source, vendor-neutral container image registry server based purely on OCI standards.

What is an OCI image registry?

An OCI image registry is a server-based application that allows you to store, manage, and share container images. A developer uploads (pushes) an image to the registry for distribution. Users can then download (pull) the image to run on their systems. The OCI Distribution Specification, published by the Open Container Initiative (OCI), defines a standard API protocol for these and other image registry operations.

An image registry can be a part of your continuous integration and continuous deployment (CI/CD) pipeline when you host zot on your public or private server. In its minimal form, you can also embed a zot registry in a product. In either case, zot provides a secure software supply chain for container images.

Why zot?

👉 zot = OCI Distribution Specification + OCI Image Format

At its heart, zot is a production-ready, vendor-neutral OCI image registry with images stored in the OCI image format and with the OCI distribution specification on-the-wire. zot is built for developers by developers, offering features such as minimal deployment using a single binary image, built-in authentication and authorization, and inline garbage collection and storage deduplication.

504566

Some of the principal advantages of zot are:

  • Open source

  • OCI standards-only both on-the-wire and on-disk

  • Clear separation between core distribution spec and zot-specific extensions

  • Software supply chain security, including support for cosign and notation

  • Security hardening

  • Single binary with many features built-in

  • Suitable for deployments in cloud, bare-metal, and embedded devices

zot fully conforms to the OCI Distribution Specification.

The following table lists additional advantages of zot:

Distribution Spec conformance yes
CNCF project accepted as a Sandbox Project
License Apache 2.0
On-premises deployment yes
OCI conformance* yes
Single binary image* yes
Minimal build* yes
Storage Layout OCI v1 Image Layout
Authentication built-in
Authorization built-in
Garbage collection inline
Storage deduplication inline
Cloud storage support yes
Delete by tag yes
Vulnerability scanning built-in
Command line interface (cli) yes
UI yes
External contributions beta available
Image signatures built-in

✏ * The minimal build feature is the ability to build a minimal Distribution Spec compliant registry in order to reduce library dependencies and the possible attack surface.


Last update: May 18, 2023
\ No newline at end of file diff --git a/v2.0.2/general/extensions/index.html b/v2.0.2/general/extensions/index.html index 686ac9c..418eb6f 100644 --- a/v2.0.2/general/extensions/index.html +++ b/v2.0.2/general/extensions/index.html @@ -1 +1 @@ - Extensions - zotregistry.dev

Extensions

👉 Extensions provide additional registry features that are not a part of the Distribution Specification.

The following extensions are currently available with zot:

  • Search (enhanced)
  • Sync
  • Lint
  • Scrub
  • Trust
  • Metrics
  • Graphical user interface
  • User preferences

💡 For detailed information about configuring zot extensions, see Configuring zot.

About extensions

The OCI Distribution Specification supports extending the functionality of an OCI-compliant registry implementation by adding extensions. Extensions are new APIs developed outside of the core OCI specs. Developers may propose their extensions to the OCI for possible future addition to the Distribution Specification.

Wherever applicable, extensions can be dynamically discovered using the extensions support of the OCI Distribution Specification.

⚠ Extension features of zot are available only with a full zot image. They are excluded from the minimal zot image.

Extensions implemented in zot

The extensions implemented in zot include administrator-configured functionality and end-user features.

✏ Currently, search, trust, and userprefs are the only zot extensions operable by end users. Only these extensions are accessible through HTTP APIs and are discoverable using the OCI extensions mechanism.

The following extensions are currently supported by zot:

One of the key functions of a container image registry (which is essentially a graph of blobs) is the ability to perform interesting image and graph traversal queries. The user interacts with the search extension via a graphQL endpoint. The schema is published with every release.

Examples of queries are:

  • "Does an image exist?"
  • "What is its size?"
  • "Does an image depend on this image via its layers?"
  • "What vulnerabilities exist in an image or its dependent images?"

Sync

You can deploy a local mirror pointing to an upstream zot instance with various container image download policies, including on-demand and periodic downloads. The sync function is useful to avoid overwhelming the upstream instance, or if the upstream instance has rate-limited access.

💡 docker.io is supported as an upstream mirror.

Lint

The lint extension helps to avoid image compliance issues by enforcing certain policies about the image or the image metadata. Currently, lint can check an uploaded image to enforce the presence of required annotations such as the author or the license.

Scrub

Although container images are content-addressable with their SHA256 checksums, and validations are performed during storage and retrieval, it is possible that bit-rot sets in when not in use. The scrub extension actively scans container images in the background to proactively detect errors.

Trust

Images stored in zot can be signed with a digital signature to verify the source and integrity of the image. The digital signature can be verified by zot using public keys or certificates uploaded by the user through the zot API. The trust extension enables and configures this function.

Metrics

The metrics extension adds a node exporter, which is not present in the minimal build.

Graphical user interface

Using the zot graphical user interface (GUI), you can browse a zot registry for container images and artifacts. From the web interface, you can copy the shell commands for downloading an image using popular third-party tools such as docker, podman, and skopeo.

User preferences

The userprefs extension provides an API endpoint for adding configurable user preferences for a repository. This custom extension, not a part of the OCI distribution, is accessible only by authenticated users of the registry. Unauthenticated users are denied access.

The functions currently implemented by this extension include:

  • Toggling the star (favorites) icon for a repository.
  • Toggling the bookmark icon for a repository.

💡 For information about configuring zot extensions, see Configuring zot.


Last update: September 13, 2023
\ No newline at end of file + Extensions - zotregistry.dev

Extensions

👉 Extensions provide additional registry features that are not a part of the Distribution Specification.

The following extensions are currently available with zot:

  • Search (enhanced)
  • Sync
  • Lint
  • Scrub
  • Trust
  • Metrics
  • Graphical user interface
  • User preferences

💡 For detailed information about configuring zot extensions, see Configuring zot.

About extensions

The OCI Distribution Specification supports extending the functionality of an OCI-compliant registry implementation by adding extensions. Extensions are new APIs developed outside of the core OCI specs. Developers may propose their extensions to the OCI for possible future addition to the Distribution Specification.

Wherever applicable, extensions can be dynamically discovered using the extensions support of the OCI Distribution Specification.

⚠ Extension features of zot are available only with a full zot image. They are excluded from the minimal zot image.

Extensions implemented in zot

The extensions implemented in zot include administrator-configured functionality and end-user features.

✏ Currently, search, trust, and userprefs are the only zot extensions operable by end users. Only these extensions are accessible through HTTP APIs and are discoverable using the OCI extensions mechanism.

The following extensions are currently supported by zot:

One of the key functions of a container image registry (which is essentially a graph of blobs) is the ability to perform interesting image and graph traversal queries. The user interacts with the search extension via a graphQL endpoint. The schema is published with every release.

Examples of queries are:

  • "Does an image exist?"
  • "What is its size?"
  • "Does an image depend on this image via its layers?"
  • "What vulnerabilities exist in an image or its dependent images?"

Sync

You can deploy a local mirror pointing to an upstream zot instance with various container image download policies, including on-demand and periodic downloads. The sync function is useful to avoid overwhelming the upstream instance, or if the upstream instance has rate-limited access.

💡 docker.io is supported as an upstream mirror.

Lint

The lint extension helps to avoid image compliance issues by enforcing certain policies about the image or the image metadata. Currently, lint can check an uploaded image to enforce the presence of required annotations such as the author or the license.

Scrub

Although container images are content-addressable with their SHA256 checksums, and validations are performed during storage and retrieval, it is possible that bit-rot sets in when not in use. The scrub extension actively scans container images in the background to proactively detect errors.

Trust

Images stored in zot can be signed with a digital signature to verify the source and integrity of the image. The digital signature can be verified by zot using public keys or certificates uploaded by the user through the zot API. The trust extension enables and configures this function.

Metrics

The metrics extension adds a node exporter, which is not present in the minimal build.

Graphical user interface

Using the zot graphical user interface (GUI), you can browse a zot registry for container images and artifacts. From the web interface, you can copy the shell commands for downloading an image using popular third-party tools such as docker, podman, and skopeo.

User preferences

The userprefs extension provides an API endpoint for adding configurable user preferences for a repository. This custom extension, not a part of the OCI distribution, is accessible only by authenticated users of the registry. Unauthenticated users are denied access.

The functions currently implemented by this extension include:

  • Toggling the star (favorites) icon for a repository.
  • Toggling the bookmark icon for a repository.

💡 For information about configuring zot extensions, see Configuring zot.


Last update: September 13, 2023
\ No newline at end of file diff --git a/v2.0.2/general/features/index.html b/v2.0.2/general/features/index.html index 8980be7..e3d43e0 100644 --- a/v2.0.2/general/features/index.html +++ b/v2.0.2/general/features/index.html @@ -1 +1 @@ - Key Features - zotregistry.dev

Summary of Key Features

  • Conforms to OCI distribution spec APIs
  • Uses OCI image layout for image storage
    • Can serve any OCI image layout as a registry
  • Single binary for all the features
  • Doesn't require root privileges
  • Clear separation between core dist-spec and zot-specific extensions
  • Supports container image signatures - cosign and notation
  • Supports helm charts
  • Behavior controlled via configuration
  • Binaries released for multiple operating systems and architectures
  • Supports advanced image queries using search extension
  • Supports image deletion by tag
  • Currently suitable for on-premises deployments (e.g. colocated with Kubernetes)
  • Compatible with ecosystem tools such as skopeo and cri-o
  • Vulnerability scanning of images
  • TLS support Authentication via:
    • TLS mutual authentication
    • HTTP Basic (local htpasswd and LDAP)
    • HTTP Bearer token
  • Supports Identity-Based Access Control
  • Supports live modifications on the configuration file while zot is running (Authorization configuration only)
  • Inline storage optimizations:
    • Automatic garbage collection of orphaned blobs
    • Layer deduplication using hard links when content is identical
    • Data scrubbing
  • Serve multiple storage paths (and backends) using a single zot server
  • Pull and synchronize from other dist-spec conformant registries
  • Supports rate limiting including per HTTP method
  • Metrics with Prometheus
    • Using a node exporter in case of minimal zot
  • Swagger based documentation
  • zli: command-line client support
  • zb: a benchmarking tool for dist-spec conformant registries
  • Released under Apache 2.0 License

Last update: September 13, 2023
\ No newline at end of file + Key Features - zotregistry.dev

Summary of Key Features

  • Conforms to OCI distribution spec APIs
  • Uses OCI image layout for image storage
    • Can serve any OCI image layout as a registry
  • Single binary for all the features
  • Doesn't require root privileges
  • Clear separation between core dist-spec and zot-specific extensions
  • Supports container image signatures - cosign and notation
  • Supports helm charts
  • Behavior controlled via configuration
  • Binaries released for multiple operating systems and architectures
  • Supports advanced image queries using search extension
  • Supports image deletion by tag
  • Currently suitable for on-premises deployments (e.g. colocated with Kubernetes)
  • Compatible with ecosystem tools such as skopeo and cri-o
  • Vulnerability scanning of images
  • TLS support Authentication via:
    • TLS mutual authentication
    • HTTP Basic (local htpasswd and LDAP)
    • HTTP Bearer token
  • Supports Identity-Based Access Control
  • Supports live modifications on the configuration file while zot is running (Authorization configuration only)
  • Inline storage optimizations:
    • Automatic garbage collection of orphaned blobs
    • Layer deduplication using hard links when content is identical
    • Data scrubbing
  • Serve multiple storage paths (and backends) using a single zot server
  • Pull and synchronize from other dist-spec conformant registries
  • Supports rate limiting including per HTTP method
  • Metrics with Prometheus
    • Using a node exporter in case of minimal zot
  • Swagger based documentation
  • zli: command-line client support
  • zb: a benchmarking tool for dist-spec conformant registries
  • Released under Apache 2.0 License

Last update: September 13, 2023
\ No newline at end of file diff --git a/v2.0.2/general/glossary/index.html b/v2.0.2/general/glossary/index.html index 7db41bd..71a2d09 100644 --- a/v2.0.2/general/glossary/index.html +++ b/v2.0.2/general/glossary/index.html @@ -1 +1 @@ - Glossary - zotregistry.dev

Glossary

Documentation Icons

Icon Description
✏ Note — A point of emphasis or caution.
💡 Tip — A helpful suggestion or a reference to additional material not covered in this document.
⚠ Warning — A suggestion or advisory intended to avoid a loss of service or data.

Definitions

Term Description
artifact A file of any kind produced during a container build process or associated with the operation of a container. For example, a Helm chart is an artifact that might be stored along with a container.
CNCF As part of the Linux Foundation, the Cloud Native Computing Foundation provides support, oversight, and direction for open-source, cloud native projects.
cosign cosign is a tool that performs container signing, verification, and storage in an OCI registry.
cosigned cosigned is an image admission controller that validates container images before deploying them.
cri-o cri-o is an implementation of the Kubernetes Container Runtime Interface (CRI) to enable using OCI compatible runtimes. It is a lightweight alternative to using Docker as the runtime for Kubernetes.
deduplication A storage space saving feature wherein only a single copy of specific content is maintained on disk while many different image manifests may hold references to that same content.
digest A hashed checksum, such as SHA-256, for verifying the integrity of the downloaded image.
Distribution Specification The OCI Distribution Specification project defines an API protocol to facilitate and standardize the distribution of content.
extensions Additional registry features (APIs) that are not a part of the Distribution Specification can be added as Extensions.
helm chart A helm chart is a package of files that orchestrate the deployment of Kubernetes resources into a Kubernetes cluster.
manifest An image manifest provides a configuration and set of layers for a single container image for a specific architecture and operating system.
node exporter A software component that collects hardware and operating system level metrics exposed by the kernel.
OCI The Open Container Initiative (OCI) is an open governance structure for the express purpose of creating open industry standards around container formats and runtimes.
ORAS OCI Registry as Storage (ORAS) is a tool for distributing OCI artifacts across OCI registries.
prometheus Prometheus is a node exporter that exposes a wide variety of hardware- and kernel-related metrics.
referrer An image containing a non-nil subject field with a descriptor to the referred image.
registry A service that stores and distributes container images and artifacts.
repository A collection of images with the same name, differentiated by tags.
skopeo skopeo is a command line utility that performs various operations on container images and image repositories.
stacker stacker is a standalone tool for building OCI images via a declarative yaml format. The output of the build process is a container image in an OCI layout.
tag A label applied to an image that distinguishes the image from other images in the same repository. A common example is a version tag.
zb A benchmarking tool, available as a zot companion binary, for benchmarking a zot registry or any other container image registry that conforms to the OCI Distribution Specification.
zli A zot companion binary that implements a set of command line commands for interacting with the zot registry server.
zui A zot companion binary that implements a graphical user interface (GUI) for interacting with the zot registry server.
zxp A node exporter, available as a zot companion binary, that can be deployed with a minimal zot image in order to scrape metrics from the zot server.

Last update: August 4, 2023
\ No newline at end of file + Glossary - zotregistry.dev

Glossary

Documentation Icons

Icon Description
✏ Note — A point of emphasis or caution.
💡 Tip — A helpful suggestion or a reference to additional material not covered in this document.
⚠ Warning — A suggestion or advisory intended to avoid a loss of service or data.

Definitions

Term Description
artifact A file of any kind produced during a container build process or associated with the operation of a container. For example, a Helm chart is an artifact that might be stored along with a container.
CNCF As part of the Linux Foundation, the Cloud Native Computing Foundation provides support, oversight, and direction for open-source, cloud native projects.
cosign cosign is a tool that performs container signing, verification, and storage in an OCI registry.
cosigned cosigned is an image admission controller that validates container images before deploying them.
cri-o cri-o is an implementation of the Kubernetes Container Runtime Interface (CRI) to enable using OCI compatible runtimes. It is a lightweight alternative to using Docker as the runtime for Kubernetes.
deduplication A storage space saving feature wherein only a single copy of specific content is maintained on disk while many different image manifests may hold references to that same content.
digest A hashed checksum, such as SHA-256, for verifying the integrity of the downloaded image.
Distribution Specification The OCI Distribution Specification project defines an API protocol to facilitate and standardize the distribution of content.
extensions Additional registry features (APIs) that are not a part of the Distribution Specification can be added as Extensions.
helm chart A helm chart is a package of files that orchestrate the deployment of Kubernetes resources into a Kubernetes cluster.
manifest An image manifest provides a configuration and set of layers for a single container image for a specific architecture and operating system.
node exporter A software component that collects hardware and operating system level metrics exposed by the kernel.
OCI The Open Container Initiative (OCI) is an open governance structure for the express purpose of creating open industry standards around container formats and runtimes.
ORAS OCI Registry as Storage (ORAS) is a tool for distributing OCI artifacts across OCI registries.
prometheus Prometheus is a node exporter that exposes a wide variety of hardware- and kernel-related metrics.
referrer An image containing a non-nil subject field with a descriptor to the referred image.
registry A service that stores and distributes container images and artifacts.
repository A collection of images with the same name, differentiated by tags.
skopeo skopeo is a command line utility that performs various operations on container images and image repositories.
stacker stacker is a standalone tool for building OCI images via a declarative yaml format. The output of the build process is a container image in an OCI layout.
tag A label applied to an image that distinguishes the image from other images in the same repository. A common example is a version tag.
zb A benchmarking tool, available as a zot companion binary, for benchmarking a zot registry or any other container image registry that conforms to the OCI Distribution Specification.
zli A zot companion binary that implements a set of command line commands for interacting with the zot registry server.
zui A zot companion binary that implements a graphical user interface (GUI) for interacting with the zot registry server.
zxp A node exporter, available as a zot companion binary, that can be deployed with a minimal zot image in order to scrape metrics from the zot server.

Last update: August 4, 2023
\ No newline at end of file diff --git a/v2.0.2/general/project/index.html b/v2.0.2/general/project/index.html index d5bb372..a8fdd52 100644 --- a/v2.0.2/general/project/index.html +++ b/v2.0.2/general/project/index.html @@ -1 +1 @@ - About - zotregistry.dev
\ No newline at end of file + About - zotregistry.dev
\ No newline at end of file diff --git a/v2.0.2/general/releases/index.html b/v2.0.2/general/releases/index.html index e18a2ee..f708807 100644 --- a/v2.0.2/general/releases/index.html +++ b/v2.0.2/general/releases/index.html @@ -1,3 +1,3 @@ - Released Images - zotregistry.dev

Released Images for zot

👉 This document describes the available zot images for the various supported hardware and software platforms, along with information about image variations, image locations, and image naming formats.

Supported platforms

zot is supported on Linux and Apple MacOS platforms with Intel or ARM processors.

Table: Supported platforms and architectures

OS ARCH Platform
linux amd64 Intel-based Linux servers
linux arm64 ARM-based servers and Raspberry Pi4
darwin amd64 Intel-based MacOS
darwin arm64 ARM-based MacOS (Apple M1)
freebsd amd64 Intel-based FreeBSD*
freebsd arm64 ARM-based FreeBSD*

**NOTE:* While binary images are available for FreeBSD, building container images is not supported at this time.

Full and minimal binary images

In addition to variations for specific platforms and architectures, binary images are also available in full and minimal flavors:

  • A full zot binary image is compiled with all extensions. Extensions include functions such as metrics, registry synchronization, search, and scrub.

  • A minimal distribution-spec conformant zot binary image is compiled with only a minimal set of code and libraries, reducing the attack surface. This option might be optimal for a registry embedded in a shipping product.

Binary image file naming

An executable binary image for zot is named using the target platform and architecture from the Supported platforms and architectures table. The general format of a binary image file name is one of these two:

zot-<os>-<architecture>

  • A full zot binary image with all extensions has a filename of the form zot-<os>-<architecture>. For example, the full binary image for an Intel-based linux server is zot-linux-amd64.

zot-<os>-<architecture>-minimal

  • A minimal distribution-spec conformant zot binary image has a filename of the form zot-<os>-<architecture>-minimal. For example, the minimal binary image for an Intel-based linux server is zot-linux-amd64-minimal.

💡 For convenience, you can rename the binary image file to simply zot after downloading.

Where to get zot

You can download native executable binary images or container (Docker) images.

Getting binary images

The zot project is hosted on GitHub at project-zot.

To download a binary image, go to the zot releases and select a release. Go to the Assets section of the release page and download the binary for your platform and architecture.

✏ You may need to use the chmod command to make the image executable.

✏ When downloading a binary image for MacOS, download the darwin image.

Getting container images

You can download a container image from ghcr.io by forming a URL with the desired image name, such as:

https://ghcr.io/project-zot/zot-<os>-<architecture>[-<build>]
+ Released Images - zotregistry.dev      

Released Images for zot

👉 This document describes the available zot images for the various supported hardware and software platforms, along with information about image variations, image locations, and image naming formats.

Supported platforms

zot is supported on Linux and Apple MacOS platforms with Intel or ARM processors.

Table: Supported platforms and architectures

OS ARCH Platform
linux amd64 Intel-based Linux servers
linux arm64 ARM-based servers and Raspberry Pi4
darwin amd64 Intel-based MacOS
darwin arm64 ARM-based MacOS (Apple M1)
freebsd amd64 Intel-based FreeBSD*
freebsd arm64 ARM-based FreeBSD*

**NOTE:* While binary images are available for FreeBSD, building container images is not supported at this time.

Full and minimal binary images

In addition to variations for specific platforms and architectures, binary images are also available in full and minimal flavors:

  • A full zot binary image is compiled with all extensions. Extensions include functions such as metrics, registry synchronization, search, and scrub.

  • A minimal distribution-spec conformant zot binary image is compiled with only a minimal set of code and libraries, reducing the attack surface. This option might be optimal for a registry embedded in a shipping product.

Binary image file naming

An executable binary image for zot is named using the target platform and architecture from the Supported platforms and architectures table. The general format of a binary image file name is one of these two:

zot-<os>-<architecture>

  • A full zot binary image with all extensions has a filename of the form zot-<os>-<architecture>. For example, the full binary image for an Intel-based linux server is zot-linux-amd64.

zot-<os>-<architecture>-minimal

  • A minimal distribution-spec conformant zot binary image has a filename of the form zot-<os>-<architecture>-minimal. For example, the minimal binary image for an Intel-based linux server is zot-linux-amd64-minimal.

💡 For convenience, you can rename the binary image file to simply zot after downloading.

Where to get zot

You can download native executable binary images or container (Docker) images.

Getting binary images

The zot project is hosted on GitHub at project-zot.

To download a binary image, go to the zot releases and select a release. Go to the Assets section of the release page and download the binary for your platform and architecture.

✏ You may need to use the chmod command to make the image executable.

✏ When downloading a binary image for MacOS, download the darwin image.

Getting container images

You can download a container image from ghcr.io by forming a URL with the desired image name, such as:

https://ghcr.io/project-zot/zot-<os>-<architecture>[-<build>]
 

If <build> is not specified, the default is full. For example, to download the minimal binary image for an Intel-based linux server. The URL is:

https://ghcr.io/project-zot/zot-linux-amd64-minimal
 

✏ When downloading a container image for MacOS, download the linux image, not the darwin image.

Licensing

zot is released under the Apache License 2.0.


Last update: July 31, 2023
\ No newline at end of file diff --git a/v2.0.2/general/whats-new/index.html b/v2.0.2/general/whats-new/index.html index 07fd76f..7f45c4a 100644 --- a/v2.0.2/general/whats-new/index.html +++ b/v2.0.2/general/whats-new/index.html @@ -1,2 +1,2 @@ - What's New - zotregistry.dev

What's New

v2.0.2

CVE Query Enhancements

It is now possible to bisect CVEs (zli cve diff) between two image tags/versions in the same repository. Furthermore, a CVE query for a particular image tag can return a detailed description of CVEs.

Documentation for "Immutable Image Tags"

A new article has been added to document how image tags can be made immutable.

Cross-repo tag search in UI

You can now search for a tag across all repos by starting your query as ':' in the UI, which will return all images that have that tag.

Support for ORAS Artifacts removed

OCI distribution spec 1.1.0 has added support "artifacts" which is likely to gain wider adoption. ORAS artifacts are not widely used or supported.

:warning:  Support is removed starting from this version.
+ What's New - zotregistry.dev      

What's New

v2.0.2

CVE Query Enhancements

It is now possible to bisect CVEs (zli cve diff) between two image tags/versions in the same repository. Furthermore, a CVE query for a particular image tag can return a detailed description of CVEs.

Documentation for "Immutable Image Tags"

A new article has been added to document how image tags can be made immutable.

Cross-repo tag search in UI

You can now search for a tag across all repos by starting your query as ':' in the UI, which will return all images that have that tag.

Support for ORAS Artifacts removed

OCI distribution spec 1.1.0 has added support "artifacts" which is likely to gain wider adoption. ORAS artifacts are not widely used or supported.

:warning:  Support is removed starting from this version.
 

v2.0.1

Support for hot reloading of LDAP credentials file

Since v2.0.0, LDAP credentials have been specified in a separate file. Starting with this version, the file is watched and changes applied without restarting zot.

Bugfixes and performance improvements

Under some configurations, zot consumes significant CPU and memory resources. This has been fixed in this release.

v2.0.0

Updated OCI support

Built-in UI support

  • Using the new zot GUI, you can browse a zot registry for container images and artifacts. The web interface provides the shell commands for downloading an image using popular third-party tools such as docker, podman, and skopeo.

Support for social logins

Group policies for authorization

  • When creating authorization policies, you can assign multiple users to a named group. A group-specific authorization policy can then be defined, specifying allowed access and actions for the group.

    ✏  Configuration syntax change: In the previous release, authorization policies were defined directly under the accessControl key in the zot configuration file. With the new ability to create authorization groups, it becomes necessary to add a new repositories key below accessControl. Beginning with zot v2.0.0, the set of authorization policies are now defined under the repositories key.

Signature verification

  • The validity of an image's signature can be verified by zot. Users can upload public keys or certificates to zot.

LDAP credentials stored separately from configuration

  • The LDAP credentials are removed from zot's LDAP configuration and stored in a separate file. See zot's LDAP documentation.

    ⚠ This LDAP configuration change is incompatible with previous zot releases. When upgrading, you must reconfigure your LDAP credentials if you use LDAP.

Storage deduplication on startup

  • Deduplication, a storage space saving feature, now runs or reverts at startup depending on whether the feature is enabled or disabled. You can trigger deduplication by enabling it and then restarting zot.

Retention policies

  • To optimize image storage, you can configure tag retention policies to remove images that are no longer needed.

CVE scanning support for image indexes

  • The trivy backend now supports vulnerability scanning of image indexes. Previously, only images were scanned.

Bookmarks

  • In the zot GUI, you can bookmark an image so that it can be easily found later. Bookmarked images appear in search queries when the bookmarked option is enabled.

Ability to delete tags from the UI

  • The zli search command allows smart searching for a repository by its name or for an image by its repo:tag.

Search by digest

  • You can perform a global search for a digest (SHA hash) using either the UI or the CLI. This function is useful when an issue is found in a layer that is used by multiple images. In the UI Search box, for example, begin typing sha256: followed by a partial or complete digest value to see a dropdown list of images that contain the layer with the digest value.
  • A GraphQL backend server within zot's registry search engine provides efficient and enhanced search capabilities. In addition to supporting direct GraphQL queries through the API, zot hosts the GraphQL Playground, which provides an interactive graphical environment for GraphQL queries.

Scheduling of background tasks

  • You can adjust the background scheduler based on your deployment requirements for tasks that are handled in the background, such as garbage collection. See Configuring zot.

Performance profiling for troubleshooting

Binaries for FreeBSD

  • zot binary images are available for the FreeBSD operating system. Supported architectures are amd64 and arm64.

    ✏  zot container images for FreeBSD will be available in a future release.


v1.4.3

Remote-only Storage Support

  • The two types of state (images and image metadata) can both now be on remote storage so that zot process lifecycle and its storage can be managed and scaled independently.

Digest Collision Detection During Image Deletion

  • When two or more image tags point to the same image digest and the image is deleted by digest causes data loss and dangling references. A new behavior-based policy called detectManifestCollision was added to prevent this.

Last update: March 13, 2024
\ No newline at end of file diff --git a/v2.0.2/index.html b/v2.0.2/index.html index 57435e5..7aa2d3f 100644 --- a/v2.0.2/index.html +++ b/v2.0.2/index.html @@ -1 +1 @@ - Zot Registry - zotregistry.dev

Zot Registry

OCI-native container image registry, simplified

  accepted as a CNCF Sandbox Project

@zothub #zot Community

Get Started User Guide

Try out our beta deployment at zothub.io

Pair zot with stacker, an OCI-native Image Builder and other ecosystem tools

OCI-native Image Registry

  • OCI Standards

    Strongly conforms to OCI Standards (Distribution and Image Specifications)

  • Single Binary

    One statically built binary for simplified download and install with no additional dependencies or services.

  • Unprivileged

    Doesn't require elevated privileges on host.

  • Features vs Security

    Separate Full (all features included) or Minimal (stripped for security) builds.

  • Support For Multiple Platforms

    Linux, MacOS, Intel, Arm, Raspberry PI, Cloud, Bare-metal ...

  • Batteries Included

    All features such as security scanning, authentication, authorization, garbage collection, deduplication and so on, included in the same binary.

  • Open Source

    Released as an open source project under Apache2 License.

  • Sponsors

  • Adopters

\ No newline at end of file + Zot Registry - zotregistry.dev

Zot Registry

OCI-native container image registry, simplified

  accepted as a CNCF Sandbox Project

@zothub #zot Community

Get Started User Guide

Try out our beta deployment at zothub.io

Pair zot with stacker, an OCI-native Image Builder and other ecosystem tools

OCI-native Image Registry

  • OCI Standards

    Strongly conforms to OCI Standards (Distribution and Image Specifications)

  • Single Binary

    One statically built binary for simplified download and install with no additional dependencies or services.

  • Unprivileged

    Doesn't require elevated privileges on host.

  • Features vs Security

    Separate Full (all features included) or Minimal (stripped for security) builds.

  • Support For Multiple Platforms

    Linux, MacOS, Intel, Arm, Raspberry PI, Cloud, Bare-metal ...

  • Batteries Included

    All features such as security scanning, authentication, authorization, garbage collection, deduplication and so on, included in the same binary.

  • Open Source

    Released as an open source project under Apache2 License.

  • Sponsors

  • Adopters

\ No newline at end of file diff --git a/v2.0.2/install-guides/install-guide-k8s/index.html b/v2.0.2/install-guides/install-guide-k8s/index.html index 01f9230..f447e84 100644 --- a/v2.0.2/install-guides/install-guide-k8s/index.html +++ b/v2.0.2/install-guides/install-guide-k8s/index.html @@ -1,4 +1,4 @@ - Installing zot with Kubernetes and Helm - zotregistry.dev

Installing zot with Kubernetes and Helm

👉 Using Kubernetes with Helm charts for zot, you can easily deploy zot as an application in a Kubernetes cluster.

Before you begin

Prerequisites

  • kubectl must be installed and a Kubernetes cluster must be ready.

  • Helm must be installed.

Supported platforms

You can install zot on standard Linux platforms with Intel or ARM processors and with systemd installed.

OS ARCH Platform
linux amd64 Intel-based Linux servers
linux arm64 ARM-based servers and Raspberry Pi4

Supported platforms and architectures

About binary images

Refer to Released Images for zot for information about available zot images along with information about image variations, image locations, and image naming formats.

Installing zot

Step 1: Locate the Helm charts in a remote repository

  1. Specify a remote repository that contains the Helm charts for zot. Give the repo a local name, such as project-zot, as in this example:

    helm repo add project-zot http://zotregistry.dev/helm-charts

    "project-zot" has been added to your repositories
    + Installing zot with Kubernetes and Helm - zotregistry.dev      

    Installing zot with Kubernetes and Helm

    👉 Using Kubernetes with Helm charts for zot, you can easily deploy zot as an application in a Kubernetes cluster.

    Before you begin

    Prerequisites

    • kubectl must be installed and a Kubernetes cluster must be ready.

    • Helm must be installed.

    Supported platforms

    You can install zot on standard Linux platforms with Intel or ARM processors and with systemd installed.

    OS ARCH Platform
    linux amd64 Intel-based Linux servers
    linux arm64 ARM-based servers and Raspberry Pi4

    Supported platforms and architectures

    About binary images

    Refer to Released Images for zot for information about available zot images along with information about image variations, image locations, and image naming formats.

    Installing zot

    Step 1: Locate the Helm charts in a remote repository

    1. Specify a remote repository that contains the Helm charts for zot. Give the repo a local name, such as project-zot, as in this example:

      helm repo add project-zot http://zotregistry.dev/helm-charts

      "project-zot" has been added to your repositories
       

      ✏

      The Helm charts for zot are currently hosted in these publicly-accessible repositories:
      - zotregistry.dev
      - artifacthub.io

    2. Search the repository to see the Helm charts for zot installation. Search using the keyword 'project-zot' or 'zot', as in this example:

      helm search repo project-zot

      NAME             CHART VERSION  APP VERSION  DESCRIPTION
       project-zot/zot  <chart-version>          v2.0.2       A Helm chart for Kubernetes
       

      ✏

      The APP VERSION is the version/tag of the zot image used for the deployment.

    3. Update to the latest information of available charts from the chart repository, as shown in this example:

      helm repo update project-zot

      Hang tight while we grab the latest from your chart repositories...
      diff --git a/v2.0.2/install-guides/install-guide-linux/index.html b/v2.0.2/install-guides/install-guide-linux/index.html
      index 96ed18d..77415eb 100644
      --- a/v2.0.2/install-guides/install-guide-linux/index.html
      +++ b/v2.0.2/install-guides/install-guide-linux/index.html
      @@ -1,4 +1,4 @@
      - Installing zot on Bare Metal Linux - zotregistry.dev      

      Installing zot on Bare Metal Linux

      👉 Using an available executable zot image, you can easily deploy zot on a Linux server.

      Before you begin

      About binary images

      Executable binary zot images are available for multiple platforms and architectures and with full or minimal implementations.

      Refer to Released Images for zot for information about available zot images along with information about image variations, image locations, and image naming formats.

      Installation

      Step 1: Get zot

      Using wget, download the appropriate zot binary image for your platform from the zot GitHub project. Download the image to the`/usr/bin/` directory and rename it to zot, as in this example:

      sudo wget -O /usr/bin/zot https://github.com/project-zot/zot/releases/download/v2.0.2/zot-linux-amd64
      + Installing zot on Bare Metal Linux - zotregistry.dev      

      Installing zot on Bare Metal Linux

      👉 Using an available executable zot image, you can easily deploy zot on a Linux server.

      Before you begin

      About binary images

      Executable binary zot images are available for multiple platforms and architectures and with full or minimal implementations.

      Refer to Released Images for zot for information about available zot images along with information about image variations, image locations, and image naming formats.

      Installation

      Step 1: Get zot

      Using wget, download the appropriate zot binary image for your platform from the zot GitHub project. Download the image to the`/usr/bin/` directory and rename it to zot, as in this example:

      sudo wget -O /usr/bin/zot https://github.com/project-zot/zot/releases/download/v2.0.2/zot-linux-amd64
       

      Then fix permissions to it:

      sudo chmod +x /usr/bin/zot
       sudo chown root:root /usr/bin/zot
       

      Step 2: Create a zot configuration file

      Create a zot configuration file as /etc/zot/config.json.

      See Configuration file options for an example file with options and recommendations. You can find other configuration file examples in the zot GitHub project and in Configuring zot.

      Step 3: Configure a local authentication account

      If you want to use local authentication with zot, create a /etc/zot/htpasswd file with an initial account entry using the htpasswd command as in this example:

      htpasswd -bnB myUserName myPassword > /etc/zot/htpasswd
      diff --git a/v2.0.2/pdf/document.pdf b/v2.0.2/pdf/document.pdf
      index dc1b69b..16fe8ad 100644
      Binary files a/v2.0.2/pdf/document.pdf and b/v2.0.2/pdf/document.pdf differ
      diff --git a/v2.0.2/sitemap.xml b/v2.0.2/sitemap.xml
      index 6bc7811..cfa4412 100644
      --- a/v2.0.2/sitemap.xml
      +++ b/v2.0.2/sitemap.xml
      @@ -2,182 +2,182 @@
       
           
                https://zotregistry.dev/v2.0.2/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/admin-guide/admin-configuration/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/admin-guide/admin-getting-started/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/authn-authz/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/benchmarking-with-zb/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/building-ci-cd-pipeline/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/clustering/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/graphql/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/immutable-tags/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/kind-deploy/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/mirroring/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/monitoring/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/pprofiling/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/retention/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/security-posture/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/storage/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/verifying-signatures/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/articles/workflow/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/developer-guide/api-reference/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/developer-guide/api-user-guide/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/developer-guide/contributing/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/developer-guide/extensions-dev/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/developer-guide/onboarding/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/general/architecture/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/general/concepts/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/general/extensions/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/general/features/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/general/glossary/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/general/project/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/general/releases/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/general/whats-new/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/install-guides/install-guide-k8s/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/install-guides/install-guide-linux/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/user-guides/user-guide-datapath/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/user-guides/user-guide-gui/
      -         2024-03-13
      +         2024-03-18
                daily
           
           
                https://zotregistry.dev/v2.0.2/user-guides/zli/
      -         2024-03-13
      +         2024-03-18
                daily
           
       
      \ No newline at end of file
      diff --git a/v2.0.2/sitemap.xml.gz b/v2.0.2/sitemap.xml.gz
      index 7725090..fc04f31 100644
      Binary files a/v2.0.2/sitemap.xml.gz and b/v2.0.2/sitemap.xml.gz differ
      diff --git a/v2.0.2/user-guides/user-guide-datapath/index.html b/v2.0.2/user-guides/user-guide-datapath/index.html
      index 799acb3..460b14d 100644
      --- a/v2.0.2/user-guides/user-guide-datapath/index.html
      +++ b/v2.0.2/user-guides/user-guide-datapath/index.html
      @@ -1,4 +1,4 @@
      - Push and Pull Image Content - zotregistry.dev      

      Push and Pull Image Content

      👉 zot is an OCI image registry that allows you to store, manage, and share container images.

      A zot registry can store and serve a variety of content, but the type of content may dictate your choice of a client tool.

      For various content types, this document shows examples of using a third-party client tool that supports the content. The following table shows which content and client tools are demonstrated.

      Content Type Client
      OCI images skopeo
      OCI images regclient (regctl)
      OCI images crane
      OCI artifacts oras
      Helm charts helm

      ✏ zot is compatible with kubernetes/cri-o using docker:// transport, which is the default.

      ✏ In the following examples, the zot registry is located at localhost, using port number 5000.

      Common tasks using skopeo for OCI images

      skopeo is a command line client that performs various operations on OCI container images and image repositories.

      ✏ For detailed information about using skopeo, see the skopeo man page.

      Push an OCI image

      This example pushes the latest container image for the busybox application to a zot registry.

      $ skopeo --insecure-policy copy --dest-tls-verify=false --multi-arch=all \
      + Push and Pull Image Content - zotregistry.dev      

      Push and Pull Image Content

      👉 zot is an OCI image registry that allows you to store, manage, and share container images.

      A zot registry can store and serve a variety of content, but the type of content may dictate your choice of a client tool.

      For various content types, this document shows examples of using a third-party client tool that supports the content. The following table shows which content and client tools are demonstrated.

      Content Type Client
      OCI images skopeo
      OCI images regclient (regctl)
      OCI images crane
      OCI artifacts oras
      Helm charts helm

      ✏ zot is compatible with kubernetes/cri-o using docker:// transport, which is the default.

      ✏ In the following examples, the zot registry is located at localhost, using port number 5000.

      Common tasks using skopeo for OCI images

      skopeo is a command line client that performs various operations on OCI container images and image repositories.

      ✏ For detailed information about using skopeo, see the skopeo man page.

      Push an OCI image

      This example pushes the latest container image for the busybox application to a zot registry.

      $ skopeo --insecure-policy copy --dest-tls-verify=false --multi-arch=all \
          --format=oci docker://busybox:latest \
          docker://localhost:5000/busybox:latest
       

      Pull an OCI image

      This example pulls the latest container image for the busybox application and stores the image to a local OCI-layout directory (/oci/images).

      $ skopeo --insecure-policy copy --src-tls-verify=false --multi-arch=all \
      diff --git a/v2.0.2/user-guides/user-guide-gui/index.html b/v2.0.2/user-guides/user-guide-gui/index.html
      index 0756e90..4484569 100644
      --- a/v2.0.2/user-guides/user-guide-gui/index.html
      +++ b/v2.0.2/user-guides/user-guide-gui/index.html
      @@ -1 +1 @@
      - Use the Web Interface to Find Images - zotregistry.dev      

      Use the Web Interface to Find Images

      👉 Using a browser, you can browse a zot repository for container images and artifacts. The web interface also provides the commands for downloading an image using popular third-party tools.

      If a zot registry is built with the optional zui package, the registry has a web interface.

      Access the registry

      ✏ Depending on the security configuration of the zot registry, you might need to authenticate before being given access.

      The initial page of the registry displays a sampling of the most popular images and recently updated images. To view all available images in the registry, click the View all link in the upper right of the page to go to the /explore page.

      screen-initial

      💡 Wherever an image name appears, two icons follow the name, indicating the results of the vulnerability scan and the signature status. These icons are described in Icons and their meanings.

      Find an image

      To assist you in finding images specific to your requirements, the /explore page provides several sorting options along with faceted navigation in addition to a general search box.

      • Sorting criteria include relevance, most recently updated, alphabetical, and most downloaded.

      • Navigation facets include operating system, CPU architecture, and signature status.

      screen-initial

      When you locate the desired image, click its tile.

      tile

      Inspect the image properties

      The OVERVIEW tab of the initial image description page contains a brief description of the image along with several details, such as the repository URL, number of downloads, last published, size, and license type.

      Click the TAGS tab to view the available versions of the image.

      screen-tags

      Click the tag link of the desired version of the image. In the resulting page, you can view detailed information about the image, including its digest hash, and you can obtain a command to pull the image from the repository.

      screen-layers

      Tabs on this page provide the following information:

      Tab Description
      LAYERS The build command and the digest hash
      USES A list of images used by this image
      USED BY A list of images that use this image
      VULNERABILITIES A list of known vulnerabilities

      From the LAYERS tab, click Details to view an example of the image build command and the layer's digest hash.

      layers-details

      Pull an image

      After opening the tag link of the desired image, click the Pull Image drop-down list to display the available pull commands. Docker, podman, and skopeo image management tools are supported.

      pull-image

      Select a tool and click the pages icon next to the command to copy the full command to your clipboard. An example of the pull command using podman is:

      podman pull zothub.io/c3/debian/base-amd64:bullseye

      Paste the pull command into your terminal to pull the image.

      💡 For information about using image management tools to pull images, see Push and Pull Image Content.

      Adding Bookmarks

      To mark an image so that it can be easily found later, click the bookmark icon on the image page. Bookmarked images appear in search queries when the Bookmarked option is enabled.

      The bookmark icon before selection:

      The bookmark icon after selection:

      Icons and their meanings

      These icons appear next to the image name, indicating the results of the vulnerability scan and the signature status.

      Icon Description
      A vulnerability scan of the image found no vulnerabilities
      A vulnerability scan of the image failed
      (See severity icon in VULNERABILITIES tab)
            Critical severity
            High severity
            Medium severity
            Low severity
      The image signature is verified
      The image signature is not verified
      The image is not bookmarked by the user
      The image is bookmarked by the user

      Last update: August 4, 2023
      \ No newline at end of file + Use the Web Interface to Find Images - zotregistry.dev

      Use the Web Interface to Find Images

      👉 Using a browser, you can browse a zot repository for container images and artifacts. The web interface also provides the commands for downloading an image using popular third-party tools.

      If a zot registry is built with the optional zui package, the registry has a web interface.

      Access the registry

      ✏ Depending on the security configuration of the zot registry, you might need to authenticate before being given access.

      The initial page of the registry displays a sampling of the most popular images and recently updated images. To view all available images in the registry, click the View all link in the upper right of the page to go to the /explore page.

      screen-initial

      💡 Wherever an image name appears, two icons follow the name, indicating the results of the vulnerability scan and the signature status. These icons are described in Icons and their meanings.

      Find an image

      To assist you in finding images specific to your requirements, the /explore page provides several sorting options along with faceted navigation in addition to a general search box.

      • Sorting criteria include relevance, most recently updated, alphabetical, and most downloaded.

      • Navigation facets include operating system, CPU architecture, and signature status.

      screen-initial

      When you locate the desired image, click its tile.

      tile

      Inspect the image properties

      The OVERVIEW tab of the initial image description page contains a brief description of the image along with several details, such as the repository URL, number of downloads, last published, size, and license type.

      Click the TAGS tab to view the available versions of the image.

      screen-tags

      Click the tag link of the desired version of the image. In the resulting page, you can view detailed information about the image, including its digest hash, and you can obtain a command to pull the image from the repository.

      screen-layers

      Tabs on this page provide the following information:

      Tab Description
      LAYERS The build command and the digest hash
      USES A list of images used by this image
      USED BY A list of images that use this image
      VULNERABILITIES A list of known vulnerabilities

      From the LAYERS tab, click Details to view an example of the image build command and the layer's digest hash.

      layers-details

      Pull an image

      After opening the tag link of the desired image, click the Pull Image drop-down list to display the available pull commands. Docker, podman, and skopeo image management tools are supported.

      pull-image

      Select a tool and click the pages icon next to the command to copy the full command to your clipboard. An example of the pull command using podman is:

      podman pull zothub.io/c3/debian/base-amd64:bullseye

      Paste the pull command into your terminal to pull the image.

      💡 For information about using image management tools to pull images, see Push and Pull Image Content.

      Adding Bookmarks

      To mark an image so that it can be easily found later, click the bookmark icon on the image page. Bookmarked images appear in search queries when the Bookmarked option is enabled.

      The bookmark icon before selection:

      The bookmark icon after selection:

      Icons and their meanings

      These icons appear next to the image name, indicating the results of the vulnerability scan and the signature status.

      Icon Description
      A vulnerability scan of the image found no vulnerabilities
      A vulnerability scan of the image failed
      (See severity icon in VULNERABILITIES tab)
            Critical severity
            High severity
            Medium severity
            Low severity
      The image signature is verified
      The image signature is not verified
      The image is not bookmarked by the user
      The image is bookmarked by the user

      Last update: August 4, 2023
      \ No newline at end of file diff --git a/v2.0.2/user-guides/zli/index.html b/v2.0.2/user-guides/zli/index.html index 902f5bc..3c9edaf 100644 --- a/v2.0.2/user-guides/zli/index.html +++ b/v2.0.2/user-guides/zli/index.html @@ -1,4 +1,4 @@ - Command Line (zli) - zotregistry.dev

      Using the command line interface (zli)

      👉 zli: The command line tool for zot servers

      What is zli?

      zli is a binary that implements a set of command line commands for interacting with the zot registry server.

      💡 We recommend installing zli when you install zot.

      How to get zli

      zli is hosted with zot on GitHub at project-zot. From GitHub, you can download the zli binary or you can build zli from the source.

      Supported platforms

      zli is supported for the following operating systems and platform architectures:

      OS ARCH Platform
      linux amd64 Intel-based Linux servers
      linux arm64 ARM-based servers and Raspberry Pi4
      darwin amd64 Intel-based MacOS
      darwin arm64 ARM-based MacOS

      Downloading zli binaries

      You can download the executable binary for your server platform and architecture under "Assets" on the GitHub zot releases page.

      The binary image is named using the OS and architecture from the Supported platforms table. For example, the binary for an Intel-based MacOS server is zli-darwin-amd64.

      Building zli from source

      To build the zli binary, copy or clone the zot project from GitHub and execute the make cli command in the zot directory. Use the same command options that you used to build zot, as shown:

      make OS=os ARCH=architecture cli

      For example, the following command builds zli for an Intel-based MacOS server:

      make OS=darwin ARCH=amd64 cli
      + Command Line (zli) - zotregistry.dev      

      Using the command line interface (zli)

      👉 zli: The command line tool for zot servers

      What is zli?

      zli is a binary that implements a set of command line commands for interacting with the zot registry server.

      💡 We recommend installing zli when you install zot.

      How to get zli

      zli is hosted with zot on GitHub at project-zot. From GitHub, you can download the zli binary or you can build zli from the source.

      Supported platforms

      zli is supported for the following operating systems and platform architectures:

      OS ARCH Platform
      linux amd64 Intel-based Linux servers
      linux arm64 ARM-based servers and Raspberry Pi4
      darwin amd64 Intel-based MacOS
      darwin arm64 ARM-based MacOS

      Downloading zli binaries

      You can download the executable binary for your server platform and architecture under "Assets" on the GitHub zot releases page.

      The binary image is named using the OS and architecture from the Supported platforms table. For example, the binary for an Intel-based MacOS server is zli-darwin-amd64.

      Building zli from source

      To build the zli binary, copy or clone the zot project from GitHub and execute the make cli command in the zot directory. Use the same command options that you used to build zot, as shown:

      make OS=os ARCH=architecture cli

      For example, the following command builds zli for an Intel-based MacOS server:

      make OS=darwin ARCH=amd64 cli
       

      In this example, the resulting executable file is zli-darwin-amd64 in the zot/bin directory.

      Common tasks using zli

      This section includes examples of common zot server tasks using the zli command line interface. For a detailed listing of zli commands, see the zli Command Reference in this guide.

      💡 The original filename of the zli executable file will reflect the build options, such as zli-linux-amd64. For convenience, you can rename the executable to simply zli. The instructions and examples in this guide use zli as the name of the executable file.

      Adding a zot server URL

      You can modify the zot server configuration using the zli config add command. This example adds a zot server URL with an alias of remote-zot:

      $ bin/zli config add remote-zot https://server-example:8080
       

      Use the zli config command to list all configured URLs with their aliases:

      $ bin/zli config -l