<?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-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/</link><description>Recent content in Migration Guides on</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>Copyright (c) 2023 Chainguard</copyright><lastBuildDate>Thu, 16 Jan 2025 18:42:57 +0000</lastBuildDate><atom:link href="https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/index.xml" rel="self" type="application/rss+xml"/><item><title>Migrating to PHP Chainguard Containers</title><link>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/migrating-php/</link><pubDate>Thu, 04 Apr 2024 15:56:52 -0700</pubDate><guid>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/migrating-php/</guid><description>&lt;p&gt;Chainguard&amp;rsquo;s PHP containers provide enhanced security for PHP applications through minimal, purpose-built images that significantly reduce attack surface. Built on &lt;a href="https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/open-source/wolfi/"&gt;Wolfi&lt;/a&gt;, these containers achieve &lt;a href="https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/chainguard-images/vuln-comparison/php/"&gt;dramatically fewer vulnerabilities&lt;/a&gt; compared to traditional PHP images while maintaining full compatibility with PHP workloads. Daily automated builds ensure applications receive the latest security patches without manual intervention.&lt;/p&gt;
&lt;p&gt;This article will assist you in the process of migrating your existing PHP Dockerfiles to leverage the benefits of Chainguard Containers, including a smaller attack surface and a more secure application footprint.&lt;/p&gt;</description></item><item><title>Migrating to Node.js Chainguard Containers</title><link>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/migrating-node/</link><pubDate>Thu, 09 May 2024 15:56:52 -0700</pubDate><guid>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/migrating-node/</guid><description>&lt;p&gt;Chainguard&amp;rsquo;s Node.js containers offer a streamlined migration path for applications seeking enhanced security posture through minimal, distroless design. Built on &lt;a href="https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/open-source/wolfi/"&gt;Wolfi&lt;/a&gt;, these containers significantly reduce attack surface compared to traditional Node.js images, resulting in &lt;a href="https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/chainguard-images/vuln-comparison/node/"&gt;fewer vulnerabilities&lt;/a&gt; and smaller image sizes. Daily automated builds ensure your applications always have the latest security patches without manual intervention.&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;What is Distroless?&lt;/summary&gt;
Distroless container images are minimal container images containing only essential software required to build or execute an application. That means no package manager, no shell, and no bloat from software that only makes sense on bare metal servers.&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;What is Wolfi OS?&lt;/summary&gt;
&lt;a href="https://github.com/wolfi-dev/"&gt;Wolfi&lt;/a&gt; is a community Linux undistro created specifically for containers. This brings distroless to a new level, including additional features targeted at securing the software supply chain of your application environment: comprehensive SBOMs, signatures, daily updates, and timely CVE fixes.&lt;/details&gt;
&lt;details&gt;
&lt;summary&gt;What are multi-stage builds?&lt;/summary&gt;
&lt;p&gt;&lt;a href="https://docs.docker.com/build/building/multi-stage/"&gt;Multi-stage builds&lt;/a&gt; are a Docker feature that allow you to use multiple &lt;code&gt;FROM&lt;/code&gt; statements in a single Dockerfile, where each statement begins a new build stage. In a typical pattern, an early stage uses a full-featured builder image to compile code or generate artifacts, while a later stage uses a minimal runtime image and copies in only what's needed to run the application. Only what you explicitly copy from one stage carries forward — everything else is discarded when that stage completes.&lt;/p&gt;</description></item><item><title>How to Migrate a Node.js Application to Chainguard Containers</title><link>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/node-images/</link><pubDate>Thu, 25 Apr 2024 15:21:01 +0000</pubDate><guid>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/node-images/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/hfpVS-UP4Yw?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="tools-used-in-this-video" class="heading-2" data-heading-level="2"&gt;
&lt;span class="heading-text"&gt;Tools used in this video&lt;/span&gt;
&lt;a href="#tools-used-in-this-video" class="anchor" aria-label="Link to Tools used in this video" 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;a href="https://docker.com"&gt;Docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="resources" class="heading-2" data-heading-level="2"&gt;
&lt;span class="heading-text"&gt;Resources&lt;/span&gt;
&lt;a href="#resources" class="anchor" aria-label="Link to Resources" 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;Tutorial on &lt;a href="https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/porting-apps-to-chainguard/"&gt;Porting a Sample Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/chainguard-dev/identidock-cg/"&gt;Example Application Git repository&lt;/a&gt; with code used in demo&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;What are multi-stage builds?&lt;/summary&gt;
&lt;p&gt;&lt;a href="https://docs.docker.com/build/building/multi-stage/"&gt;Multi-stage builds&lt;/a&gt; are a Docker feature that allow you to use multiple &lt;code&gt;FROM&lt;/code&gt; statements in a single Dockerfile, where each statement begins a new build stage. In a typical pattern, an early stage uses a full-featured builder image to compile code or generate artifacts, while a later stage uses a minimal runtime image and copies in only what's needed to run the application. Only what you explicitly copy from one stage carries forward — everything else is discarded when that stage completes.&lt;/p&gt;</description></item><item><title>Migrating to Python Chainguard Containers</title><link>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/migrating-python/</link><pubDate>Thu, 02 May 2024 15:06:00 -0700</pubDate><guid>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/migrating-python/</guid><description>&lt;p&gt;Chainguard&amp;rsquo;s Python containers provide a migration path to significantly reduce vulnerabilities in Python applications while maintaining full compatibility with existing workloads. This guide explains how to migrate your containerized Python applications to benefit from Chainguard&amp;rsquo;s enhanced security posture and daily updates.&lt;/p&gt;
&lt;p&gt;Chainguard Containers are built on &lt;a href="https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/open-source/wolfi/"&gt;Wolfi&lt;/a&gt;, a &lt;a href="https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/software-security/videos/distroless/"&gt;distroless&lt;/a&gt; Linux distribution designed for security and a reduced attack surface. Chainguard Containers are smaller and have &lt;a href="https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/chainguard-images/vuln-comparison/python/"&gt;low to no CVE&lt;/a&gt;. Our Chainguard Containers for Python are built nightly for extra freshness, so they&amp;rsquo;re always up-to-date with the latest remediations.&lt;/p&gt;</description></item><item><title>Migrating to .NET Chainguard Containers</title><link>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/migrating-dotnet/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/migrating-dotnet/</guid><description>&lt;p&gt;Chainguard&amp;rsquo;s &lt;a href="https://images.chainguard.dev/directory/image/dotnet-sdk/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-dotnet"&gt;.NET container images&lt;/a&gt; provide a security-hardened foundation for building and running applications with significantly fewer vulnerabilities than .NET images provided by Microsoft. Chainguard&amp;rsquo;s .NET container images maintain full .NET compatibility while dramatically reducing the attack surface.&lt;/p&gt;
&lt;p&gt;This guide demonstrates migrating a .NET application from Microsoft&amp;rsquo;s official images to Chainguard&amp;rsquo;s .NET container images by comparing two nearly identical versions of an application side-by-side. This guide also highlights concrete examples of the security improvements resulting from migrating to Chainguard Containers.&lt;/p&gt;</description></item><item><title>Migrating a Dockerfile for a Go application to use Chainguard Containers</title><link>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/migrating_go/</link><pubDate>Wed, 07 Feb 2024 01:21:01 +0000</pubDate><guid>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/migrating_go/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/IuEOyACeJE8?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;details&gt;
&lt;summary&gt;What are multi-stage builds?&lt;/summary&gt;
&lt;p&gt;&lt;a href="https://docs.docker.com/build/building/multi-stage/"&gt;Multi-stage builds&lt;/a&gt; are a Docker feature that allow you to use multiple &lt;code&gt;FROM&lt;/code&gt; statements in a single Dockerfile, where each statement begins a new build stage. In a typical pattern, an early stage uses a full-featured builder image to compile code or generate artifacts, while a later stage uses a minimal runtime image and copies in only what's needed to run the application. Only what you explicitly copy from one stage carries forward — everything else is discarded when that stage completes.&lt;/p&gt;</description></item><item><title>How to Migrate a Java Application to Chainguard Containers</title><link>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/java-images/</link><pubDate>Tue, 02 Apr 2024 15:21:01 +0000</pubDate><guid>https://deploy-preview-3421--ornate-narwhal-088216.netlify.app/chainguard/migration/migration-guides/java-images/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/FYOVcSv1-oY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="tools-used-in-this-video" class="heading-2" data-heading-level="2"&gt;
&lt;span class="heading-text"&gt;Tools used in this video&lt;/span&gt;
&lt;a href="#tools-used-in-this-video" class="anchor" aria-label="Link to Tools used in this video" 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;a href="https://docker.com"&gt;Docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="resources" class="heading-2" data-heading-level="2"&gt;
&lt;span class="heading-text"&gt;Resources&lt;/span&gt;
&lt;a href="#resources" class="anchor" aria-label="Link to Resources" 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;Blog on &lt;a href="https://www.chainguard.dev/unchained/fully-bootstrapping-java-from-source-in-wolfi"&gt;bootstrapping Java in Wolfi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/chainguard-dev/learning-labs-java"&gt;Learning Labs Git repository&lt;/a&gt; with code used in demo&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;What are multi-stage builds?&lt;/summary&gt;
&lt;p&gt;&lt;a href="https://docs.docker.com/build/building/multi-stage/"&gt;Multi-stage builds&lt;/a&gt; are a Docker feature that allow you to use multiple &lt;code&gt;FROM&lt;/code&gt; statements in a single Dockerfile, where each statement begins a new build stage. In a typical pattern, an early stage uses a full-featured builder image to compile code or generate artifacts, while a later stage uses a minimal runtime image and copies in only what's needed to run the application. Only what you explicitly copy from one stage carries forward — everything else is discarded when that stage completes.&lt;/p&gt;</description></item></channel></rss>