<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Migration Guides on</title><link>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/</link><description>Recent content in Migration Guides on</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>Copyright (c) 2023 Chainguard</copyright><lastBuildDate>Mon, 26 Feb 2024 08:48:45 +0000</lastBuildDate><atom:link href="https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/index.xml" rel="self" type="application/rss+xml"/><item><title>Overview of migrating to Chainguard Containers</title><link>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/migrations-overview/</link><pubDate>Mon, 22 Jul 2024 12:56:52 +0000</pubDate><guid>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/migrations-overview/</guid><description>&lt;p&gt;&lt;a href="https://www.chainguard.dev/chainguard-images?utm_source=cg-academy&amp;amp;utm_medium=referral&amp;amp;utm_campaign=dev-enablement"&gt;Chainguard Containers&lt;/a&gt; are a collection of container images designed for security and minimalism. Many Chainguard Containers are &lt;a href="https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/chainguard-images/getting-started-distroless/"&gt;distroless&lt;/a&gt;; they contain only an open-source application and its runtime dependencies. These container images do not even contain a shell or package manager, because fewer dependencies reduce the potential attack surface of images.&lt;/p&gt;
&lt;p&gt;By minimizing the number of dependencies and thus reducing their potential attack surface, Chainguard Containers inherently contain few to zero CVEs. Chainguard Containers are rebuilt nightly to ensure they are completely up-to-date and contain all available security patches. With this nightly build approach, our engineering team sometimes &lt;a href="https://www.chainguard.dev/unchained/how-chainguard-fixes-vulnerabilities?utm_source=cg-academy&amp;amp;utm_medium=referral&amp;amp;utm_campaign=dev-enablement"&gt;fixes vulnerabilities before they’re detected&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Tips for migrating to Chainguard Containers</title><link>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-tips/</link><pubDate>Thu, 29 May 2025 12:56:52 +0000</pubDate><guid>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-tips/</guid><description>&lt;p&gt;The process of migrating over to Chainguard Containers isn&amp;rsquo;t always straightforward. To help customers become acquainted with Chainguard Containers as they go through the migration process, we&amp;rsquo;ve assembled this list of tips and strategies for migrating over their applications.&lt;/p&gt;
&lt;h2 id="use-development-variants-when-you-need-a-shell" class="heading-2" data-heading-level="2"&gt;
&lt;span class="heading-text"&gt;Use development variants when you need a shell&lt;/span&gt;
&lt;a href="#use-development-variants-when-you-need-a-shell" class="anchor" aria-label="Link to Use development variants when you need a shell" title="Link to this section"&gt;
&lt;svg width="16" height="9" viewBox="0 0 16 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"&gt;
&lt;path d="M6.833 8.125H4C3 8.125 2.146 7.77067 1.438 7.062C0.729333 6.354 0.375 5.5 0.375 4.5C0.375 3.5 0.729333 2.646 1.438 1.938C2.146 1.22933 3 0.875 4 0.875H6.833V1.958H4C3.30533 1.958 2.708 2.208 2.208 2.708C1.708 3.208 1.458 3.80533 1.458 4.5C1.458 5.19467 1.708 5.792 2.208 6.292C2.708 6.792 3.30533 7.042 4 7.042H6.833V8.125ZM5.208 5.042V3.958H10.792V5.042H5.208ZM9.167 8.125V7.042H12C12.6947 7.042 13.292 6.792 13.792 6.292C14.292 5.792 14.542 5.19467 14.542 4.5C14.542 3.80533 14.292 3.208 13.792 2.708C13.292 2.208 12.6947 1.958 12 1.958H9.167V0.875H12C13 0.875 13.854 1.22933 14.562 1.938C15.2707 2.646 15.625 3.5 15.625 4.5C15.625 5.5 15.2707 6.354 14.562 7.062C13.854 7.77067 13 8.125 12 8.125H9.167Z" fill="currentColor"/&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Chainguard provides development (or &lt;code&gt;-dev&lt;/code&gt;) variants of its containers which include a shell and package manager to allow users to more easily debug and modify the image.&lt;/p&gt;</description></item><item><title>How to Port a Sample Application to Chainguard Containers</title><link>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/porting-apps-to-chainguard/</link><pubDate>Wed, 10 Apr 2024 12:56:52 +0000</pubDate><guid>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/porting-apps-to-chainguard/</guid><description>&lt;h3 id="porting-key-points" class="heading-3" data-heading-level="3"&gt;
&lt;span class="heading-text"&gt;Porting Key Points&lt;/span&gt;
&lt;a href="#porting-key-points" class="anchor" aria-label="Link to Porting Key Points" title="Link to this section"&gt;
&lt;svg width="16" height="9" viewBox="0 0 16 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"&gt;
&lt;path d="M6.833 8.125H4C3 8.125 2.146 7.77067 1.438 7.062C0.729333 6.354 0.375 5.5 0.375 4.5C0.375 3.5 0.729333 2.646 1.438 1.938C2.146 1.22933 3 0.875 4 0.875H6.833V1.958H4C3.30533 1.958 2.708 2.208 2.208 2.708C1.708 3.208 1.458 3.80533 1.458 4.5C1.458 5.19467 1.708 5.792 2.208 6.292C2.708 6.792 3.30533 7.042 4 7.042H6.833V8.125ZM5.208 5.042V3.958H10.792V5.042H5.208ZM9.167 8.125V7.042H12C12.6947 7.042 13.292 6.792 13.792 6.292C14.292 5.792 14.542 5.19467 14.542 4.5C14.542 3.80533 14.292 3.208 13.792 2.708C13.292 2.208 12.6947 1.958 12 1.958H9.167V0.875H12C13 0.875 13.854 1.22933 14.562 1.938C15.2707 2.646 15.625 3.5 15.625 4.5C15.625 5.5 15.2707 6.354 14.562 7.062C13.854 7.77067 13 8.125 12 8.125H9.167Z" fill="currentColor"/&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Chainguard&amp;rsquo;s distroless Containers have no shell or package manager by default. This is great for security, but sometimes you need these things, especially in builder images. For those cases we have &lt;code&gt;-dev&lt;/code&gt; variants (such as &lt;code&gt;cgr.dev/chainguard/python:latest-dev&lt;/code&gt;) which do include a shell and package manager.&lt;/li&gt;
&lt;li&gt;Chainguard Containers typically don&amp;rsquo;t run as root, so a &lt;code&gt;USER root&lt;/code&gt; statement may be required before installing software. This should be a temporary escalation only; after completing any root-level operations, you should create and switch to a dedicated non-root user (for example, using &lt;code&gt;addgroup&lt;/code&gt; and &lt;code&gt;adduser&lt;/code&gt;) or use the image&amp;rsquo;s built-in non-root user. Leaving the container running as root defeats the security purpose of using minimal images.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;-dev&lt;/code&gt; variants and &lt;code&gt;wolfi-base&lt;/code&gt; / &lt;code&gt;chainguard-base&lt;/code&gt; use BusyBox by default, so any &lt;code&gt;groupadd&lt;/code&gt; or &lt;code&gt;useradd&lt;/code&gt; commands will need to be ported to &lt;code&gt;addgroup&lt;/code&gt; and &lt;code&gt;adduser&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/chainguard-images/about/images-categories/#starter-containers"&gt;Free tier&lt;/a&gt; of Containers provides &lt;code&gt;:latest&lt;/code&gt; and &lt;code&gt;:latest-dev&lt;/code&gt; versions. Our paid Production Containers offer tags for major and minor versions.&lt;/li&gt;
&lt;li&gt;We use apk tooling, so &lt;code&gt;apt install&lt;/code&gt; commands will become &lt;code&gt;apk add&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Chainguard Containers are based on &lt;code&gt;glibc&lt;/code&gt; and our packages cannot be mixed with Alpine packages.&lt;/li&gt;
&lt;li&gt;In some cases, the entrypoint in Chainguard Containers can be different from equivalent container images based on other distros, which can lead to unexpected behavior. You should always check the image&amp;rsquo;s specific documentation to understand how the entrypoint works.&lt;/li&gt;
&lt;li&gt;When needed, Chainguard recommends using a Base Container like &lt;code&gt;chainguard-base&lt;/code&gt; or a &lt;code&gt;-dev&lt;/code&gt; variant to install an application&amp;rsquo;s OS-level dependencies.&lt;/li&gt;
&lt;li&gt;Although &lt;code&gt;-dev&lt;/code&gt; variants are still more secure than most popular container images based on other distros, for increased security on production environments we recommend combining them with a distroless variant in a multi-stage build.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-sample-application" class="heading-2" data-heading-level="2"&gt;
&lt;span class="heading-text"&gt;The Sample Application&lt;/span&gt;
&lt;a href="#the-sample-application" class="anchor" aria-label="Link to The Sample Application" title="Link to this section"&gt;
&lt;svg width="16" height="9" viewBox="0 0 16 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"&gt;
&lt;path d="M6.833 8.125H4C3 8.125 2.146 7.77067 1.438 7.062C0.729333 6.354 0.375 5.5 0.375 4.5C0.375 3.5 0.729333 2.646 1.438 1.938C2.146 1.22933 3 0.875 4 0.875H6.833V1.958H4C3.30533 1.958 2.708 2.208 2.208 2.708C1.708 3.208 1.458 3.80533 1.458 4.5C1.458 5.19467 1.708 5.792 2.208 6.292C2.708 6.792 3.30533 7.042 4 7.042H6.833V8.125ZM5.208 5.042V3.958H10.792V5.042H5.208ZM9.167 8.125V7.042H12C12.6947 7.042 13.292 6.792 13.792 6.292C14.292 5.792 14.542 5.19467 14.542 4.5C14.542 3.80533 14.292 3.208 13.792 2.708C13.292 2.208 12.6947 1.958 12 1.958H9.167V0.875H12C13 0.875 13.854 1.22933 14.562 1.938C15.2707 2.646 15.625 3.5 15.625 4.5C15.625 5.5 15.2707 6.354 14.562 7.062C13.854 7.77067 13 8.125 12 8.125H9.167Z" fill="currentColor"/&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;The application in question is &lt;a href="https://github.com/using-docker/identidock"&gt;identidock&lt;/a&gt;. This application was written for the book &lt;a href="https://learning.oreilly.com/library/view/using-docker/9781491915752/"&gt;Using Docker&lt;/a&gt; about ten years ago, which shows that we can still migrate software of this age to a new container while realizing the benefits of a no-to-low CVE count. The application itself will create &lt;a href="https://en.wikipedia.org/wiki/Identicon"&gt;identicons&lt;/a&gt; for a user name, similar to what &lt;a href="https://github.blog/2013-08-14-identicons/"&gt;GitHub generates for users with no avatar&lt;/a&gt;. It was designed at the time to demonstrate a &amp;ldquo;microservices&amp;rdquo; approach, and as such it&amp;rsquo;s made up of 3 services:&lt;/p&gt;</description></item><item><title>Migrating Dockerfiles to Chainguard Containers</title><link>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/migrating-to-chainguard-images/</link><pubDate>Mon, 25 Mar 2024 15:56:52 -0700</pubDate><guid>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/migrating-to-chainguard-images/</guid><description>&lt;p&gt;Chainguard Containers provide enhanced security through minimal design and built-in provenance attestation, requiring some adjustments when migrating from traditional base images. Built on the &lt;a href="https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/open-source/wolfi/overview/"&gt;Wolfi&lt;/a&gt; Linux distribution, these images offer compatibility with most applications while significantly reducing attack surface and vulnerabilities.&lt;/p&gt;
&lt;p&gt;A general migration process would involve the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Identify the base image you need&lt;/strong&gt;. Check out the &lt;a href="https://images.chainguard.dev/directory?utm_source=cg-academy&amp;amp;utm_medium=referral&amp;amp;utm_campaign=dev-enablement&amp;amp;utm_content=edu-content-chainguard-migration-migrating-to-chainguard-images"&gt;Chainguard Containers Directory&lt;/a&gt; to identify the image that is the closest match to what you currently use. You may also use &lt;a href="https://images.chainguard.dev/directory/image/wolfi-base/overview?utm_source=cg-academy&amp;amp;utm_medium=referral&amp;amp;utm_campaign=dev-enablement&amp;amp;utm_content=edu-content-chainguard-migration-migrating-to-chainguard-images"&gt;wolfi-base&lt;/a&gt; as a flexible starting point for your experimentation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Try the &lt;code&gt;-dev&lt;/code&gt; variant of the image first.&lt;/strong&gt; Chainguard Containers typically have a &lt;strong&gt;distroless&lt;/strong&gt; variant, which is very minimal and doesn&amp;rsquo;t include &lt;code&gt;apk&lt;/code&gt;, and a &lt;strong&gt;dev&lt;/strong&gt; variant that contains tooling necessary to build applications and install new packages. Start with the &lt;strong&gt;dev&lt;/strong&gt; variant or the &lt;strong&gt;wolfi-base&lt;/strong&gt; image to have more room for customization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identify packages you need to install&lt;/strong&gt;. Depending on your current base image, you may need to include additional packages to meet dependencies. Refer to the &lt;a href="https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/migrating-to-chainguard-images/#searching-for-packages"&gt;Searching for Packages&lt;/a&gt; section for more details on how to find packages. Make sure the packages you intend to install will work with the base image you select — for example, if you select an older base image built with an older release of &lt;code&gt;glibc&lt;/code&gt; and want to install newer packages built with a newer release, you will encounter problems. It&amp;rsquo;s a good rule of thumb to use the newest base image you can with the newest packages that match the build.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Migrate to a distroless image&lt;/strong&gt;. Evaluate the option of using a Docker multi-stage build to create a final distroless image containing only what you need. Check the &lt;a href="https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/chainguard-images/getting-started-distroless/"&gt;Getting Started with Distroless images&lt;/a&gt; for more details of how to work with distroless images. Although not required, this process should give you a smaller image with additional safeguards.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There are some differences in Wolfi&amp;rsquo;s &lt;code&gt;busybox&lt;/code&gt; and &lt;code&gt;coreutils&lt;/code&gt; packages when compared to their counterparts in distros such as Debian or even Alpine. Some binaries and scripts are not included by default, which contributes to a smaller package size. This was done in order to keep images to a minimum, but be aware that some commands might still be available through separate packages.&lt;/p&gt;</description></item><item><title>The Guardener</title><link>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/the-guardener/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/the-guardener/</guid><description>&lt;p&gt;The Guardener migrates your Dockerfiles to use Chainguard Containers. It uses AI to iteratively convert instructions, build images, compare results, and fix issues until the Dockerfile works as expected.&lt;/p&gt;
&lt;p&gt;You interact with it through &lt;code&gt;chainctl agent dockerfile&lt;/code&gt; commands. The AI runs server-side and scans your workspace to perform its analysis. Docker builds and file access remain local to your machine, and only the data necessary for analysis is processed.&lt;/p&gt;
&lt;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The Guardener is in beta.&lt;/p&gt;</description></item><item><title>Dockerfile Converter</title><link>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/dockerfile-conversion/</link><pubDate>Tue, 18 Mar 2025 15:22:20 +0100</pubDate><guid>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/dockerfile-conversion/</guid><description>&lt;p&gt;Chainguard&amp;rsquo;s &lt;a href="https://github.com/chainguard-dev/dfc"&gt;Dockerfile Converter (dfc)&lt;/a&gt; was designed to facilitate the process of porting existing Dockerfiles to use Chainguard Containers. The following platforms are currently supported:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Alpine (&lt;code&gt;apk&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Debian / Ubuntu (&lt;code&gt;apt&lt;/code&gt;, &lt;code&gt;apt-get&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Fedora / RedHat / UBI (&lt;code&gt;yum&lt;/code&gt;, &lt;code&gt;dnf&lt;/code&gt;, &lt;code&gt;microdnf&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you prefer a fully automated approach, &lt;a href="https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/the-guardener/"&gt;The Guardener&lt;/a&gt; is an AI-powered agent that can migrate, optimize, and validate your Dockerfiles with minimal manual intervention.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="installation" class="heading-2" data-heading-level="2"&gt;
&lt;span class="heading-text"&gt;Installation&lt;/span&gt;
&lt;a href="#installation" class="anchor" aria-label="Link to Installation" title="Link to this section"&gt;
&lt;svg width="16" height="9" viewBox="0 0 16 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"&gt;
&lt;path d="M6.833 8.125H4C3 8.125 2.146 7.77067 1.438 7.062C0.729333 6.354 0.375 5.5 0.375 4.5C0.375 3.5 0.729333 2.646 1.438 1.938C2.146 1.22933 3 0.875 4 0.875H6.833V1.958H4C3.30533 1.958 2.708 2.208 2.208 2.708C1.708 3.208 1.458 3.80533 1.458 4.5C1.458 5.19467 1.708 5.792 2.208 6.292C2.708 6.792 3.30533 7.042 4 7.042H6.833V8.125ZM5.208 5.042V3.958H10.792V5.042H5.208ZM9.167 8.125V7.042H12C12.6947 7.042 13.292 6.792 13.792 6.292C14.292 5.792 14.542 5.19467 14.542 4.5C14.542 3.80533 14.292 3.208 13.792 2.708C13.292 2.208 12.6947 1.958 12 1.958H9.167V0.875H12C13 0.875 13.854 1.22933 14.562 1.938C15.2707 2.646 15.625 3.5 15.625 4.5C15.625 5.5 15.2707 6.354 14.562 7.062C13.854 7.77067 13 8.125 12 8.125H9.167Z" fill="currentColor"/&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;If you use Homebrew, you can install dfc with:&lt;/p&gt;</description></item><item><title>Migration best practices and checklist</title><link>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-checklist/</link><pubDate>Mon, 03 Feb 2025 10:42:57 +0000</pubDate><guid>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-checklist/</guid><description>&lt;p&gt;Chainguard container images are designed to be minimal and to include special features for increased security and provenance attestation. Depending on your current base image and customizations, you may need to make some adjustments when migrating your current workloads to use Chainguard Containers. This checklist provides a high-level overview of the steps you should consider when migrating to Chainguard Containers.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Download the &lt;a href="https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/downloads/migrating-to-chainguard-images.pdf"&gt;PDF version&lt;/a&gt; of this checklist &lt;a href="https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/downloads/migrating-to-chainguard-images.pdf"&gt;here&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="important-to-know" class="heading-2" data-heading-level="2"&gt;
&lt;span class="heading-text"&gt;Important to know&lt;/span&gt;
&lt;a href="#important-to-know" class="anchor" aria-label="Link to Important to know" title="Link to this section"&gt;
&lt;svg width="16" height="9" viewBox="0 0 16 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"&gt;
&lt;path d="M6.833 8.125H4C3 8.125 2.146 7.77067 1.438 7.062C0.729333 6.354 0.375 5.5 0.375 4.5C0.375 3.5 0.729333 2.646 1.438 1.938C2.146 1.22933 3 0.875 4 0.875H6.833V1.958H4C3.30533 1.958 2.708 2.208 2.208 2.708C1.708 3.208 1.458 3.80533 1.458 4.5C1.458 5.19467 1.708 5.792 2.208 6.292C2.708 6.792 3.30533 7.042 4 7.042H6.833V8.125ZM5.208 5.042V3.958H10.792V5.042H5.208ZM9.167 8.125V7.042H12C12.6947 7.042 13.292 6.792 13.792 6.292C14.292 5.792 14.542 5.19467 14.542 4.5C14.542 3.80533 14.292 3.208 13.792 2.708C13.292 2.208 12.6947 1.958 12 1.958H9.167V0.875H12C13 0.875 13.854 1.22933 14.562 1.938C15.2707 2.646 15.625 3.5 15.625 4.5C15.625 5.5 15.2707 6.354 14.562 7.062C13.854 7.77067 13 8.125 12 8.125H9.167Z" fill="currentColor"/&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Most Chainguard Containers don’t have a package manager or a shell by default. These are &lt;strong&gt;distroless&lt;/strong&gt; images intended to be used as slim runtimes for production environments.&lt;/li&gt;
&lt;li&gt;For every version of an image, a complimentary &lt;strong&gt;standard&lt;/strong&gt; image is provided with a shell and the apk package manager. These are identified by the &lt;code&gt;-dev&lt;/code&gt; suffix and can be customized.&lt;/li&gt;
&lt;li&gt;When possible, we recommend using multistage builds that combine a build stage based on a &lt;code&gt;-dev&lt;/code&gt; variant and a runtime stage based on a distroless image.&lt;/li&gt;
&lt;li&gt;Chainguard Containers typically don’t run as root, so a &lt;code&gt;USER root&lt;/code&gt; statement may be required before installing software.&lt;/li&gt;
&lt;li&gt;Chainguard Containers are based on &lt;strong&gt;apk&lt;/strong&gt;. If you’re coming from Debian or Ubuntu you’ll need to replace &lt;code&gt;apt&lt;/code&gt; commands with their &lt;code&gt;apk&lt;/code&gt; equivalents. This also applies for other distros that are not based on &lt;strong&gt;apk&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Some images may behave differently than their equivalent in other distros, due to differences in entrypoint and shell availability. Always check the image documentation for usage details.&lt;/li&gt;
&lt;li&gt;For a number of our most popular Containers, a &lt;strong&gt;full&lt;/strong&gt; variant (tagged &lt;code&gt;-full&lt;/code&gt;) maps to the upstream image to ease initial migration. It&amp;rsquo;s a useful starting point if your pipeline depends on packages from your previous image, though we recommend moving to a slimmer variant once you&amp;rsquo;ve migrated. See &lt;a href="https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/chainguard-images/about/differences-development-production/#full-container-variants"&gt;Full container variants&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="migration-checklist" class="heading-2" data-heading-level="2"&gt;
&lt;span class="heading-text"&gt;Migration checklist&lt;/span&gt;
&lt;a href="#migration-checklist" class="anchor" aria-label="Link to Migration checklist" title="Link to this section"&gt;
&lt;svg width="16" height="9" viewBox="0 0 16 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"&gt;
&lt;path d="M6.833 8.125H4C3 8.125 2.146 7.77067 1.438 7.062C0.729333 6.354 0.375 5.5 0.375 4.5C0.375 3.5 0.729333 2.646 1.438 1.938C2.146 1.22933 3 0.875 4 0.875H6.833V1.958H4C3.30533 1.958 2.708 2.208 2.208 2.708C1.708 3.208 1.458 3.80533 1.458 4.5C1.458 5.19467 1.708 5.792 2.208 6.292C2.708 6.792 3.30533 7.042 4 7.042H6.833V8.125ZM5.208 5.042V3.958H10.792V5.042H5.208ZM9.167 8.125V7.042H12C12.6947 7.042 13.292 6.792 13.792 6.292C14.292 5.792 14.542 5.19467 14.542 4.5C14.542 3.80533 14.292 3.208 13.792 2.708C13.292 2.208 12.6947 1.958 12 1.958H9.167V0.875H12C13 0.875 13.854 1.22933 14.562 1.938C15.2707 2.646 15.625 3.5 15.625 4.5C15.625 5.5 15.2707 6.354 14.562 7.062C13.854 7.77067 13 8.125 12 8.125H9.167Z" fill="currentColor"/&gt;
&lt;/svg&gt;
&lt;/a&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Check the image’s overview page on the &lt;a href="https://images.chainguard.dev"&gt;Containers Directory&lt;/a&gt; for usage details and any compatibility remarks.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Replace your current base image with a standard &lt;code&gt;-dev&lt;/code&gt; (such as &lt;code&gt;latest-dev&lt;/code&gt;) variant as a starting point.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Add a &lt;code&gt;USER root&lt;/code&gt; statement before package installations or other commands that must run as an administrative user.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Replace any instances of &lt;code&gt;apt install&lt;/code&gt; (or equivalent) with &lt;code&gt;apk add&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Use &lt;code&gt;apk search&lt;/code&gt; on a running container or the &lt;a href="https://apk.dag.dev/"&gt;APK Explorer&lt;/a&gt; tool to identify packages you need – some commands might be available with different names or bundled with different packages.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; When copying application files to the image, make sure proper permissions are set.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Switch back to a non-root user so that the image does not run as root by default.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Build and test your image to validate your setup.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Optional: migrate your setup to a multi-stage build that uses a distroless image variant as runtime. Our &lt;a href="https://edu.chainguard.dev/chainguard/chainguard-images/about/getting-started-distroless/"&gt;Getting Started with Distroless&lt;/a&gt; guide has detailed information on how to work with distroless images and multi-stage builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For detailed migration guidance, please refer to our &lt;a href="https://edu.chainguard.dev/chainguard/migration/"&gt;Migration Docs&lt;/a&gt; on Chainguard Academy. For troubleshooting, check our &lt;a href="https://edu.chainguard.dev/chainguard/chainguard-images/troubleshooting/debugging-distroless-images/"&gt;Debugging distroless containers&lt;/a&gt; resource.&lt;/p&gt;</description></item><item><title>Compatibility Guides</title><link>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/compatibility/</link><pubDate>Thu, 16 Jan 2025 18:42:57 +0000</pubDate><guid>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/compatibility/</guid><description/></item><item><title>Image Matcher</title><link>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/image-matcher/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/image-matcher/</guid><description/></item><item><title>Migration Guides</title><link>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/</link><pubDate>Thu, 16 Jan 2025 18:42:57 +0000</pubDate><guid>https://deploy-preview-3420--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/</guid><description/></item></channel></rss>