Product Docs
-
- Overview
- FAQs
- Verifying Images
- How to Use
- Going Distroless
-
-
-
-
-
- Minimal Runtime Images
- Using the Static Base Image
- Software Versions
- Chainguard Security Advisories & Diff API
- Image Digests
- Up-to-date Images with Digestabot
- Migrating Go Applications to Chainguard
- Reproducible Dockerfiles with Frizbee and Digestabot
- Why our images have Low-to-No CVEs
- Reproducibility and Chainguard Images
- Debugging Distroless Containers
- Debugging with Kubectl and CDebug
- Migrate Node.js Applications to Chainguard
- Migrate Java Applications to Chainguard
-
- gpu-operator-validator
- contour
- contour-bitnami
- authservice
- authservice-fips
- cfssl-self-sign
- local-path-provisioner
- neuvector-controller-fips
- neuvector-enforcer-fips
- neuvector-updater-fips
- openresty
- prometheus-blackbox-exporter-fips
- sonar-scanner-cli
- tomcat-fips
- teleport
- kubernetes-dashboard-metrics-scraper-fips
- calico-apiserver-fips
- neuvector-controller
- neuvector-enforcer
- neuvector-manager
- neuvector-updater
- nvidia-gpu-driver
- tomcat-jdk8
- aws-for-fluent-bit-fips
- redis-cluster-bitnami-fips
- redis-sentinel-bitnami-fips
- redis-server-bitnami-fips
- spdx-tools
- redis-bitnami-fips-cluster-bitnami
- redis-bitnami-fips-sentinel-bitnami
- redis-bitnami-fips-server-bitnami
- fluent-operator-fips
- zookeeper-fips
- openscap
- rabbitmq-bitnami-fips
- calico-apiserver
- airflow
- flink
- kibana
- rabbitmq-default-user-credential-updater
- jitsucom-console
- jitsucom-rotor
- tempo-fips
- fluent-bit-plugin-loki
- grafana-rollout-operator
- octo-sts
- mlflow-bitnami
- go-openssl
- jitsucom-bulker
- jitsucom-bulker-bulker
- jitsucom-bulker-ingest
- jitsucom-bulker-syncctl
- jitsucom-ingest
- jitsucom-syncctl
- mlflow
- rabbitmq-bitnami
- eck-operator
- elasticsearch-fips
- superset
- argocd-repo-server-fips
- argocd-server-fips
- grafana-operator-bitnami-fips
- harbor-core-fips
- harbor-db-fips
- harbor-jobservice-fips
- harbor-portal-fips
- harbor-registry-fips
- harbor-registryctl-fips
- harbor-trivy-adapter-fips
- kube-vip-fips
- opentelemetry-collector-fips
- kube-vip
- opentelemetry-collector
- harbor-fips-db
- step-ca-fips
- step-cli-fips
- wave-fips
- wave
- local-volume-node-cleanup
- datadog-cluster-agent
- karpenter-fips
- local-volume-provisioner
- gha-runner-scale-set-controller
- gha-runner-scale-set-controller-fips
- kube-rbac-proxy
- valkey
- grafana-operator
- grafana-operator-fips
- kubeflow-katib-suggestion-nas-darts
- litestream
- step-issuer
- step-issuer-fips
- vertical-pod-autoscaler-fips-admission-controller
- vertical-pod-autoscaler-fips-recommender
- vertical-pod-autoscaler-fips-updater
- prometheus-pushgateway-bitnami-bitnami
- redis-bitnami-cluster-bitnami
- redis-bitnami-sentinel-bitnami
- redis-bitnami-server-bitnami
- tesseract-fips
- kubernetes-autoscaler-addon-resizer
- kubernetes-autoscaler-addon-resizer-fips
- node-feature-discovery
- laravel
- argocd-extension-installer-fips
- cortex-fips
- hubble-ui-backend
- step-ca
- step-cli
- kyverno-fips-background-controller
- kyverno-fips-cleanup-controller
- kyverno-fips-cli
- kyverno-fips-reports-controller
- kyverno-fipspre
- aws-volume-modifier-for-k8s-fips
- azure-aad-pod-identity-mic
- azure-aad-pod-identity-nmi
- chainguard-base
- chainguard-base-fips
- configurable-http-proxy-fips
- dex-k8s-authenticator
- eks-distro-coredns
- eks-distro-kubernetes-csi-external-attacher
- eks-distro-kubernetes-csi-external-provisioner
- eks-distro-kubernetes-csi-external-resizer
- eks-distro-kubernetes-csi-external-snapshot-controller
- eks-distro-kubernetes-csi-external-snapshot-validation-webhook
- eks-distro-kubernetes-csi-external-snapshotter
- eks-distro-kubernetes-csi-livenessprobe
- eks-distro-kubernetes-csi-node-driver-registrar
- elasticsearch
- glibc-openssl
- glibc-openssl-fips
- gpu-operator
- grafana-operator-fips-bitnami
- hubble-ui
- hubble-ui-backend-fips
- hubble-ui-fips
- jdk-fips
- jre-fips
- jupyterhub-k8s-hub-fips
- k8ssandra-system-logger-fips
- keycloak-fips
- kiam
- kots
- kube-oidc-proxy
- kube-rbac-proxy-fips
- kubeflow-pipelines
- kubernetes-csi-external-snapshotter-snaphot-validation-webhook
- kubernetes-dashboard-metrics-scraper
- kubernetes-event-exporter-bitnami
- kyvernopre
- memcached-bitnami
- mongodb-bitnami
- mysql
- postgres-bitnami
- postgres-bitnami-fips
- prometheus-beat-exporter-fips
- prometheus-bitnami
- prometheus-elasticsearch-exporter-bitnami
- prometheus-mongodb-exporter-bitnami
- prometheus-node-exporter-bitnami
- prometheus-postgres-exporter-bitnami
- prometheus-pushgateway-exporter
- prometheus-pushgateway-exporter-bitnami
- prometheus-pushgateway-fips
- pulumi-kubernetes-operator
- python-fips
- rabbitmq-fips
- renovate
- spark-bitnami
- vault-k8s-fips
- wavefront-collector-for-kubernetes
- zookeeper-bitnami
- apache-nifi
- apko
- argo-cli
- argo-cli-fips
- argo-exec
- argo-exec-fips
- argo-workflowcontroller
- argo-workflowcontroller-fips
- argocd
- argocd-extension-installer
- argocd-fips
- argocd-fips-repo-server
- argocd-repo-server
- aspnet-runtime
- aspnet-runtime-fips
- atlantis
- atlantis-fips
- aws-cli
- aws-cli-fips
- aws-cli-v2
- aws-cli-v2-fips
- aws-ebs-csi-driver
- aws-ebs-csi-driver-fips
- aws-efs-csi-driver
- aws-for-fluent-bit
- aws-load-balancer-controller
- aws-load-balancer-controller-fips
- az
- az-fips
- bank-vaults
- bank-vaults-fips
- bash
- bazel
- bincapz
- boring-registry
- boring-registry-fips
- buck2
- buildkit
- bun
- busybox
- busybox-fips
- caddy
- caddy-fips
- cadvisor
- cadvisor-fips
- calico
- calico-calicoctl
- calico-calicoctl-fips
- calico-cni
- calico-cni-fips
- calico-csi
- calico-csi-fips
- calico-key-cert-provisioner
- calico-kube-controllers
- calico-kube-controllers-fips
- calico-node
- calico-node-driver-registrar
- calico-node-driver-registrar-fips
- calico-node-fips
- calico-pod2daemon
- calico-pod2daemon-flexvol
- calico-pod2daemon-flexvol-fips
- calico-typha
- calico-typha-fips
- calicoctl
- cass-config-builder
- cass-operator
- cass-operator-fips
- cassandra
- cassandra-medusa
- cassandra-medusa-fips
- cassandra-reaper
- cc-dynamic
- cedar
- cert-exporter
- cert-exporter-fips
- cert-manager-acmesolver
- cert-manager-acmesolver-fips
- cert-manager-cainjector
- cert-manager-cainjector-fips
- cert-manager-cmctl
- cert-manager-cmctl-fips
- cert-manager-controller
- cert-manager-controller-fips
- cert-manager-webhook
- cert-manager-webhook-fips
- cert-manager-webhook-pdns
- cert-manager-webhook-pdns-fips
- cfssl
- chromium
- cilium-agent
- cilium-agent-fips
- cilium-hubble-relay
- cilium-hubble-relay-fips
- cilium-hubble-ui
- cilium-hubble-ui-backend
- cilium-hubble-ui-backend-fips
- cilium-hubble-ui-fips
- cilium-operator-generic
- cilium-operator-generic-fips
- clang
- clickhouse
- cluster-autoscaler
- cluster-autoscaler-fips
- cluster-proportional-autoscaler
- conda
- conda-fips
- configmap-reload
- configmap-reload-fips
- confluent-kafka
- consul
- consul-fips
- coredns
- coredns-fips
- cortex
- cosign
- cosign-fips
- crane
- crossplane
- crossplane-aws
- crossplane-aws-cloudfront
- crossplane-aws-cloudwatchlogs
- crossplane-aws-dynamodb
- crossplane-aws-ec2
- crossplane-aws-eks
- crossplane-aws-firehose
- crossplane-aws-iam
- crossplane-aws-kms
- crossplane-aws-lambda
- crossplane-aws-rds
- crossplane-aws-s3
- crossplane-aws-sns
- crossplane-aws-sqs
- crossplane-azure
- crossplane-azure-authorization
- crossplane-azure-managedidentity
- crossplane-azure-sql
- crossplane-azure-storage
- crossplane-xfn
- ctlog-trillian-ctserver
- ctlog-trillian-ctserver-fips
- curl
- dask-gateway
- dask-gateway-dask-gateway
- dask-gateway-dask-gateway-server
- dask-gateway-server
- datadog-agent
- datadog-agent-fips
- deno
- dependency-track
- dex
- dex-fips
- dive
- docker-cli
- docker-selenium
- doppler-kubernetes-operator
- dotnet-runtime
- dotnet-runtime-fips
- dotnet-sdk
- dotnet-sdk-fips
- dragonfly
- dynamic-localpv-provisioner
- envoy
- envoy-fips
- envoy-ratelimit
- envoy-ratelimit-fips
- erlang
- erlang-fips
- etcd
- etcd-fips
- external-dns
- external-dns-fips
- external-secrets
- external-secrets-fips
- falco-no-driver
- falco-no-driver-fips
- falcoctl
- falcoctl-fips
- falcosidekick
- falcosidekick-fips
- ffmpeg
- filebeat
- filebeat-fips
- fluent-bit
- fluent-bit-fips
- fluent-operator
- fluentd
- fluentd-fips
- flux
- flux-helm-controller
- flux-image-automation-controller
- flux-image-reflector-controller
- flux-kustomize-controller
- flux-notification-controller
- flux-source-controller
- fulcio
- fulcio-fips
- gatekeeper
- gatekeeper-fips
- gcc-glibc
- git
- gitlab-exporter
- gitlab-kas
- gitlab-pages
- gitlab-shell
- gitness
- glibc-dynamic
- go
- go-fips
- go-ipfs
- go-ipfs-fips
- google-cloud-sdk
- gotenberg
- gptscript
- gpu-feature-discovery
- graalvm-native
- gradle
- grafana
- grafana-agent-operator
- grafana-fips
- grafana-mimir
- grype
- guacamole-server
- haproxy
- haproxy-fips
- haproxy-ingress
- harbor-core
- harbor-db
- harbor-fips-core
- harbor-fips-jobservice
- harbor-fips-portal
- harbor-fips-registry
- harbor-fips-registryctl
- harbor-fips-trivy-adapter
- harbor-jobservice
- harbor-portal
- harbor-registry
- harbor-registryctl
- harbor-trivy-adapter
- helm
- helm-chartmuseum
- helm-fips
- helm-operator
- helm-operator-fips
- http-echo
- hugo
- influxdb
- ingress-nginx-controller
- ingress-nginx-controller-fips
- ip-masq-agent
- istio-install-cni
- istio-install-cni-fips
- istio-operator
- istio-operator-fips
- istio-pilot
- istio-pilot-fips
- istio-proxy
- istio-proxy-fips
- jdk
- jdk-lts
- jellyfin
- jenkins
- jre
- jre-lts
- k3s
- k3s-allinone
- k8s-sidecar
- k8s-sidecar-fips
- k8sgpt
- k8sgpt-operator
- k8ssandra-operator
- k8ssandra-operator-fips
- kafka
- karpenter
- keda
- keda-adapter
- keda-adapter-fips
- keda-admission-webhooks
- keda-admission-webhooks-fips
- keda-fips
- keycloak
- keycloak-operator
- ko
- kor
- kube-bench
- kube-bench-fips
- kube-downscaler
- kube-fluentd-operator
- kube-logging-operator
- kube-logging-operator-fluentd
- kube-state-metrics
- kube-state-metrics-fips
- kube-webhook-certgen
- kube-webhook-certgen-fips
- kubectl
- kubectl-fips
- kubeflow-centraldashboard
- kubeflow-jupyter-web-app
- kubeflow-katib-controller
- kubeflow-katib-db-manager
- kubeflow-katib-earlystopping-medianstop
- kubeflow-katib-file-metrics-collector
- kubeflow-katib-suggestion-darts
- kubeflow-katib-suggestion-goptuna
- kubeflow-katib-suggestion-hyperband
- kubeflow-katib-suggestion-hyperopt
- kubeflow-katib-suggestion-optuna
- kubeflow-katib-suggestion-pbt
- kubeflow-katib-suggestion-skopt
- kubeflow-pipelines-api-server
- kubeflow-pipelines-cache-deployer
- kubeflow-pipelines-cache-server
- kubeflow-pipelines-frontend
- kubeflow-pipelines-metadata-envoy
- kubeflow-pipelines-metadata-writer
- kubeflow-pipelines-persistenceagent
- kubeflow-pipelines-scheduledworkflow
- kubeflow-pipelines-viewer-crd-controller
- kubeflow-pipelines-visualization-server
- kubeflow-volumes-web-app
- kuberay-operator
- kubernetes-csi-external-attacher
- kubernetes-csi-external-attacher-fips
- kubernetes-csi-external-provisioner
- kubernetes-csi-external-resizer
- kubernetes-csi-external-resizer-fips
- kubernetes-csi-external-snapshot-controller
- kubernetes-csi-external-snapshot-validation-webhook
- kubernetes-csi-external-snapshotter
- kubernetes-csi-livenessprobe
- kubernetes-csi-livenessprobe-fips
- kubernetes-csi-node-driver-registrar
- kubernetes-csi-node-driver-registrar-fips
- kubernetes-dashboard
- kubernetes-dashboard-fips
- kubernetes-dns-node-cache
- kubernetes-event-exporter
- kubernetes-ingress-defaultbackend
- kubewatch
- kyverno
- kyverno-background-controller
- kyverno-background-controller-fips
- kyverno-cleanup-controller
- kyverno-cleanup-controller-fips
- kyverno-cli
- kyverno-cli-fips
- kyverno-fips
- kyverno-policy-reporter
- kyverno-policy-reporter-plugin
- kyverno-policy-reporter-reporter
- kyverno-policy-reporter-ui
- kyverno-pre-fips
- kyverno-reports-controller
- kyverno-reports-controller-fips
- logstash-oss-with-opensearch-output-plugin
- loki
- management-api-for-apache-cassandra
- mariadb
- maven
- mdbook
- meilisearch
- melange
- memcached
- memcached-exporter
- memcached-exporter-bitnami
- metacontroller
- metallb-controller
- metallb-controller-fips
- metallb-speaker
- metallb-speaker-fips
- metrics-server
- metrics-server-fips
- min-toolkit-debug
- minio
- minio-client
- minio-client-fips
- minio-fips
- ml-metadata-store-server
- mongodb
- mongodb-fips
- multus-cni
- multus-cni-fips
- nats
- nemo
- netcat
- neuvector-prometheus-exporter
- neuvector-prometheus-exporter-fips
- neuvector-scanner
- neuvector-scanner-fips
- newrelic-fluent-bit-output
- newrelic-infrastructure-bundle
- newrelic-infrastructure-k8s
- newrelic-k8s-events-forwarder
- newrelic-kube-events
- newrelic-kubernetes
- newrelic-nri-statsd
- newrelic-prometheus
- newrelic-prometheus-configurator
- nfs-subdir-external-provisioner
- nfs-subdir-external-provisioner-fips
- nginx
- nginx-fips
- node
- node-fips
- node-lts
- node-problem-detector
- nodetaint
- ntia-conformance-checker
- ntpd-rs
- nvidia-container-toolkit
- nvidia-device-plugin
- oauth2-proxy
- openai
- opensearch
- opensearch-dashboards
- opensearch-dashboards-fips
- opentelemetry-collector-contrib
- opentelemetry-collector-contrib-fips
- opentf
- opentofu
- paranoia
- percona-server
- pgbouncer
- pgbouncer-fips
- php
- php-fpm_exporter
- postgres
- postgres-fips
- postgres-helm-compat
- postgres-operator
- postgres-operator-fips
- powershell
- prometheus
- prometheus-adapter
- prometheus-adapter-fips
- prometheus-alertmanager
- prometheus-alertmanager-fips
- prometheus-blackbox-exporter
- prometheus-cloudwatch-exporter
- prometheus-config-reloader
- prometheus-config-reloader-fips
- prometheus-elasticsearch-exporter
- prometheus-elasticsearch-exporter-fips
- prometheus-fips
- prometheus-logstash-exporter
- prometheus-logstash-exporter-fips
- prometheus-mongodb-exporter
- prometheus-mongodb-exporter-fips
- prometheus-mysqld-exporter
- prometheus-node-exporter
- prometheus-node-exporter-fips
- prometheus-operator
- prometheus-operator-fips
- prometheus-postgres-exporter
- prometheus-postgres-exporter-fips
- prometheus-pushgateway
- prometheus-pushgateway-bitnami
- prometheus-redis-exporter
- prometheus-redis-exporter-fips
- prometheus-statsd-exporter
- prometheus-statsd-exporter-fips
- promtail
- proxysql
- pulumi
- python
- pytorch-cuda12
- qdrant
- r-base
- rabbitmq
- rabbitmq-cluster-operator
- rabbitmq-messaging-topology-operator
- redis
- redis-cluster-bitnami
- redis-fips
- redis-sentinel
- redis-sentinel-bitnami
- redis-server-bitnami
- rekor-backfill-redis
- rekor-backfill-redis-fips
- rekor-cli
- rekor-cli-fips
- rekor-server
- rekor-server-fips
- rqlite
- rstudio
- rstudio-fips
- ruby
- rust
- secrets-store-csi-driver
- secrets-store-csi-driver-provider-gcp
- semgrep
- shadowsocks-rust-sslocal
- shadowsocks-rust-ssserver
- sigstore-policy-controller
- sigstore-policy-controller-fips
- sigstore-scaffolding-cloudsqlproxy
- sigstore-scaffolding-cloudsqlproxy-fips
- sigstore-scaffolding-ctlog-createctconfig
- sigstore-scaffolding-ctlog-createctconfig-fips
- sigstore-scaffolding-ctlog-managectroots
- sigstore-scaffolding-ctlog-managectroots-fips
- sigstore-scaffolding-ctlog-verifyfulcio
- sigstore-scaffolding-ctlog-verifyfulcio-fips
- sigstore-scaffolding-fulcio-createcerts
- sigstore-scaffolding-fulcio-createcerts-fips
- sigstore-scaffolding-getoidctoken
- sigstore-scaffolding-getoidctoken-fips
- sigstore-scaffolding-rekor-createsecret
- sigstore-scaffolding-rekor-createsecret-fips
- sigstore-scaffolding-trillian-createdb
- sigstore-scaffolding-trillian-createdb-fips
- sigstore-scaffolding-trillian-createtree
- sigstore-scaffolding-trillian-createtree-fips
- sigstore-scaffolding-trillian-updatetree
- sigstore-scaffolding-trillian-updatetree-fips
- sigstore-scaffolding-tsa-createcertchain
- sigstore-scaffolding-tsa-createcertchain-fips
- sigstore-scaffolding-tuf-createsecret
- sigstore-scaffolding-tuf-createsecret-fips
- sigstore-scaffolding-tuf-server
- sigstore-scaffolding-tuf-server-fips
- skaffold
- slim-toolkit-debug
- smarter-device-manager
- smarter-device-manager-fips
- solr
- spark-operator
- spire-agent
- spire-agent-fips
- spire-oidc-discovery-provider
- spire-oidc-discovery-provider-fips
- spire-server
- spire-server-fips
- sqlpad
- sqlpad-fips
- squid-proxy
- squid-proxy-fips
- stakater-reloader
- static
- statsd
- stunnel
- tekton-chains
- tekton-chains-fips
- tekton-cli
- tekton-cli-fips
- tekton-controller
- tekton-controller-fips
- tekton-entrypoint
- tekton-entrypoint-fips
- tekton-events
- tekton-events-fips
- tekton-nop
- tekton-nop-fips
- tekton-resolvers
- tekton-resolvers-fips
- tekton-sidecarlogresults
- tekton-sidecarlogresults-fips
- tekton-webhook
- tekton-webhook-fips
- tekton-workingdirinit
- tekton-workingdirinit-fips
- telegraf
- tempo
- temporal-admin-tools
- temporal-admin-tools-fips
- temporal-server
- temporal-server-fips
- temporal-ui-server
- temporal-ui-server-fips
- terraform
- tesseract
- thanos
- thanos-fips
- thanos-operator
- thanos-operator-fips
- tigera-operator
- tigera-operator-fips
- timestamp-authority-cli
- timestamp-authority-server
- timoni
- tomcat
- traefik
- traefik-fips
- trillian-logserver
- trillian-logserver-fips
- trillian-logsigner
- trillian-logsigner-fips
- trino
- trust-manager
- trust-manager-fips
- vault
- vault-fips
- vault-k8s
- vector
- vela-cli
- velero
- velero-fips
- velero-plugin-for-aws
- velero-plugin-for-aws-fips
- velero-plugin-for-csi
- velero-plugin-for-csi-fips
- velero-restore-helper
- velero-restore-helper-fips
- vertical-pod-autoscaler-admission-controller
- vertical-pod-autoscaler-recommender
- vertical-pod-autoscaler-updater
- vt
- wait-for-it
- wasmer
- wasmtime
- wavefront-proxy
- wazero
- weaviate
- wolfi-base
- yara
- zig
- zookeeper
- zot
- How Images are Tested
- Product Release Lifecycle
- Debugging
-
-
-
-
- chainctl
- chainctl auth
- chainctl auth configure-docker
- chainctl auth login
- chainctl auth logout
- chainctl auth status
- chainctl auth token
- chainctl config
- chainctl config edit
- chainctl config reset
- chainctl config save
- chainctl config set
- chainctl config unset
- chainctl config validate
- chainctl config view
- chainctl events
- chainctl events subscriptions
- chainctl events subscriptions create
- chainctl events subscriptions delete
- chainctl events subscriptions list
- chainctl iam
- chainctl iam account-associations
- chainctl iam account-associations check
- chainctl iam account-associations check aws
- chainctl iam account-associations check gcp
- chainctl iam account-associations describe
- chainctl iam account-associations set
- chainctl iam account-associations set aws
- chainctl iam account-associations set gcp
- chainctl iam account-associations unset
- chainctl iam account-associations unset aws
- chainctl iam account-associations unset gcp
- chainctl iam folders
- chainctl iam folders delete
- chainctl iam folders describe
- chainctl iam folders list
- chainctl iam folders update
- chainctl iam identities
- chainctl iam identities create
- chainctl iam identities create github
- chainctl iam identities create gitlab
- chainctl iam identities delete
- chainctl iam identities describe
- chainctl iam identities list
- chainctl iam identities update
- chainctl iam identity-providers
- chainctl iam identity-providers create
- chainctl iam identity-providers delete
- chainctl iam identity-providers list
- chainctl iam identity-providers update
- chainctl iam invites
- chainctl iam invites create
- chainctl iam invites delete
- chainctl iam invites list
- chainctl iam organizations
- chainctl iam organizations delete
- chainctl iam organizations describe
- chainctl iam organizations list
- chainctl iam role-bindings
- chainctl iam role-bindings create
- chainctl iam role-bindings delete
- chainctl iam role-bindings list
- chainctl iam role-bindings update
- chainctl iam roles
- chainctl iam roles capabilities
- chainctl iam roles capabilities list
- chainctl iam roles create
- chainctl iam roles delete
- chainctl iam roles list
- chainctl iam roles update
- chainctl images
- chainctl images diff
- chainctl images list
- chainctl images repos
- chainctl images repos list
- chainctl update
- chainctl version
Open Source
Education
Getting Started with apko
apko is a command-line tool to build container images using a declarative language based on YAML. apko is so named as it uses the apk package format and is inspired by the ko build tool. It is part of the open source tooling Chainguard developed to create the Wolfi operating system which is used in Chainguard Images.
Why apko
Container images are typically assembled in multiple steps. A tool like Docker, for example, combines building steps (as in, running commands to copy files, build and deploy applications) and composition (as in, composing a base image with pre-built packages) in a single piece of software. apko, on the other hand, is solely a composition tool that focuses on producing lightweight, “flat” base images that are fully reproducible and contain auto generated SBOM files for every successful build.
Instead of building your application together with your components and system dependencies, you can build your application once and compose it into different architectures and distributions, using a tool such as melange in combination with apko. For more information on how melange and apko work together, you can check this blog post: Secure your Software Factory with melange and apko.
In this guide, we’ll learn how to use apko to build a base Wolfi image.
Requirements
The fastest way to get apko up and running on your system is by using the official apko image with Docker. This method is compatible with all operating systems that support Docker and shared volumes. Please follow the appropriate Docker installation instructions for your operating system.
If you want to run apko on CI/CD pipelines built on top of GitHub Actions, check the apko build action on GitHub.
The instructions in this document were validated on an Ubuntu 22.04 workstation running Docker 20.10.
Step 1 — Download the apko Image
Start by pulling the official apko image into your local system:
docker pull cgr.dev/chainguard/apko
This will download the latest version of the distroless apko image, which is rebuilt every night for extra freshness.
Check that you’re able to run apko with:
docker run --rm cgr.dev/chainguard/apko version
You should get output similar to this:
_ ____ _ __ ___
/ \ | _ \ | |/ / / _ \
/ _ \ | |_) | | ' / | | | |
/ ___ \ | __/ | . \ | |_| |
/_/ \_\ |_| |_|\_\ \___/
apko
GitVersion: v0.6.0
...
In the next step, you’ll build your first apko image.
Step 2 — Build a Test Image
To test that you’re able to build images, you can use one of the example yaml
definition files that are included in the official apko code repository. Here we’ll use the wolfi-base.yaml
for demonstration.
Create a new folder to save your image files, them move to that directory:
mkdir ~/apko
cd ~/apko
Next, create a file named wolfi-base.yaml
to save your image definition. You can use nano
for that:
nano wolfi-base.yaml
The wolfi-base.yaml
example image is defined as follows:
contents:
keyring:
- https://packages.wolfi.dev/os/wolfi-signing.rsa.pub
repositories:
- https://packages.wolfi.dev/os
packages:
- ca-certificates-bundle
- wolfi-base
entrypoint:
command: /bin/sh -l
archs:
- x86_64
The contents
node is used to define allowed package sources and which packages should be included in the image. Here we’ll be using only packages from the main Wolfi APK repository. In the packages
section, we require the wolfi-base package, which is a meta-package to set up a bare minimum Wolfi system.
The command
field within the entrypoint
node defines the image entry point command /bin/sh -l
, which will land you in a shell prompt whenever the image is executed. Finally, the archs
node specifies that this image will be built for the x86-64
architecture.
Save and close the file after you’re done including these contents. With nano
, you can do that by pressing CTRL+X
, then confirming with Y
and ENTER
.
The only thing left to do now is run apko to build this image. The following build command will:
- set up a volume share in the current directory, synchronizing its contents with apko’s image workdir; this way, the generated artifacts will be available on your host system.
- execute the
cgr.dev/chainguard/apko
image with thebuild
command, tagging the image aswolfi-base:test-amd64
and saving the build aswolfi-test.tar
.
docker run --rm -v ${PWD}:/work -w /work cgr.dev/chainguard/apko build wolfi-base.yaml wolfi-base:test wolfi-test.tar
You should get output similar to this:
. . .
Mar 15 20:17:02.023 [INFO] [arch:x86_64] Building images for 1 architectures: [amd64]
Mar 15 20:17:02.023 [INFO] [arch:x86_64] building tags [wolfi-base:test]
. . .
Mar 15 20:17:04.261 [INFO] loading config file: wolfi-base.yaml
Mar 15 20:17:04.416 [INFO] [arch:x86_64] adding amd64 to index
Mar 15 20:17:04.419 [INFO] [arch:x86_64] Generating index SBOM
Mar 15 20:17:04.420 [INFO] [arch:x86_64] Final index tgz at: wolfi-test.tar
From the output, you can notice that the image was successfully built as wolfi-test.tar
in the container, which is shared with your local folder on the host thanks to the volume you created when running the docker run
command.
Step 3 — Test the Image with Docker
To test the generated image with Docker, you’ll need to use the docker load
command and import the .tar
file you created in the previous step:
docker load < wolfi-test.tar
You’ll get output like this:
bf6e72d71c13: Loading layer [==================================================>] 5.491MB/5.491MB
Loaded image: wolfi-base:test-amd64
You can check that the image is available at the host system with:
docker image list
You should be able to find the wolfi-base
image with the test-amd64
tag among the results.
Now you can run the image with:
docker run -it wolfi-base:test-amd64
This will get you into a container running the apko-built image wolfi-base:test-amd64
. It’s a regular shell that you can explore to see what’s included - just keep in mind that this is a minimalist image with only the base Wolfi system. To include additional software packages, check the Wolfi repository to find the packages you’ll need for your specific use case, or check out melange, apko’s companion project that allows users to build their own APK packages from source.
Conclusion
In this guide, you learned what apko is and what makes it a powerful resource in your cloud-native tooling.
If you need help debugging your build, check our Troubleshooting apko page for more information. Check the official apko repository if you want to report an issue or suggest new features.
Last updated: 2024-05-02 16:49