<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Languages and runtimes on</title><link>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/</link><description>Recent content in Languages and runtimes on</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><copyright>Copyright (c) 2023 Chainguard</copyright><lastBuildDate>Fri, 04 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/index.xml" rel="self" type="application/rss+xml"/><item><title>Getting started with the C/C++ Chainguard Containers</title><link>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/c/</link><pubDate>Tue, 30 Jul 2024 15:54:33 +0000</pubDate><guid>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/c/</guid><description>&lt;p&gt;Chainguard provides security-hardened container images for C and C++ development, offering minimal runtime environments with significantly reduced vulnerabilities compared to traditional base images. Built on Chainguard&amp;rsquo;s own OS, these containers enable more secure deployment of compiled programs through purpose-built images for different linking scenarios. This guide demonstrates three approaches to compiling and running C/C++ applications using Chainguard&amp;rsquo;s specialized containers.&lt;/p&gt;
&lt;p&gt;The container image with which you choose to run your compiled program depends on the nature of your binaries. Static binaries can be executed in the minimal &lt;code&gt;static&lt;/code&gt; Chainguard Container, while dynamically linked binaries can be run in the &lt;code&gt;glibc-dynamic&lt;/code&gt; Container. For this demonstration, you will first compile a C binary using the &lt;code&gt;gcc-glibc&lt;/code&gt; Chainguard Container, and then learn how to use a multi-stage build to run the resulting binary in the &lt;code&gt;glibc-dynamic&lt;/code&gt; image. You&amp;rsquo;ll also cover an example showing the multi-stage build process for the C++ programming language. To learn more about the differences between these container images, read our article on &lt;a href="https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/concepts/choosing-a-base-container/"&gt;Choosing a container for your compiled programs&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Getting started with the Go Chainguard Container</title><link>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/go/</link><pubDate>Tue, 28 Feb 2023 11:07:52 +0200</pubDate><guid>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/go/</guid><description>&lt;p&gt;Chainguard&amp;rsquo;s &lt;a href="https://images.chainguard.dev/directory/image/go/overview?utm_source=cg-academy&amp;amp;utm_medium=referral&amp;amp;utm_campaign=dev-enablement&amp;amp;utm_content=edu-content-chainguard-chainguard-images-getting-started-go"&gt;Go container image&lt;/a&gt; provides a secure foundation for building Go applications. The distroless &lt;code&gt;latest&lt;/code&gt; variant contains only the Go compiler and runtime, while the &lt;code&gt;latest-dev&lt;/code&gt; variant includes additional build tools and package management capabilities for development workflows.&lt;/p&gt;
&lt;p&gt;In this guide, we&amp;rsquo;ll demonstrate how to build and execute Go applications using Chainguard Containers, using three examples from our &lt;a href="https://github.com/chainguard-dev/edu-images-demos"&gt;demos repository&lt;/a&gt;. In the first example, we&amp;rsquo;ll build a CLI application using a Docker multi-stage build. In the second example, we&amp;rsquo;ll build an application that&amp;rsquo;s accessible by HTTP server, also using a Docker multi-stage build to obtain an optimized runtime. The third example shows how to build an image using &lt;a href="https://ko.build/"&gt;ko&lt;/a&gt;, a tool that enables you to build container images from Go programs and push them to container registries without requiring a Dockerfile.&lt;/p&gt;</description></item><item><title>Getting started with the Laravel Chainguard Container</title><link>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/laravel/</link><pubDate>Fri, 17 May 2024 11:07:52 +0200</pubDate><guid>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/laravel/</guid><description>&lt;p&gt;Chainguard&amp;rsquo;s &lt;a href="https://images.chainguard.dev/directory/image/laravel/overview?utm_source=cg-academy&amp;amp;utm_medium=referral&amp;amp;utm_campaign=dev-enablement&amp;amp;utm_content=edu-content-chainguard-chainguard-images-getting-started-laravel"&gt;Laravel container image&lt;/a&gt; provides a secure foundation for &lt;a href="https://laravel.com"&gt;Laravel&lt;/a&gt; applications with minimal vulnerabilities compared to traditional PHP images. This specialized image includes all necessary PHP extensions and tooling for Laravel development while maintaining Chainguard&amp;rsquo;s security-first approach, enabling developers to build complex applications without compromising on security.&lt;/p&gt;
&lt;p&gt;In this guide, we&amp;rsquo;ll set up a demo and demonstrate how you can use Chainguard Containers to develop, build, and run Laravel applications.&lt;/p&gt;
&lt;p&gt;This tutorial requires Docker to be installed on your local machine. If you don&amp;rsquo;t have Docker installed, you can download and install it from the &lt;a href="https://docs.docker.com/get-docker/"&gt;official Docker website&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Getting started with the Node Chainguard Container</title><link>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/node/</link><pubDate>Wed, 01 Feb 2023 11:07:52 +0200</pubDate><guid>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/node/</guid><description>&lt;p&gt;Chainguard&amp;rsquo;s &lt;a href="https://images.chainguard.dev/directory/image/node/overview?utm_source=cg-academy&amp;amp;utm_medium=referral&amp;amp;utm_campaign=dev-enablement&amp;amp;utm_content=edu-content-chainguard-chainguard-images-getting-started-node"&gt;Node container image&lt;/a&gt; provides a secure runtime for Node.js applications. This distroless image includes Node.js and npm while maintaining a minimal attack surface for production deployments.&lt;/p&gt;
&lt;p&gt;In this guide, we&amp;rsquo;ll set up a demo application and create a Dockerfile to build and execute the demo using the Node Chainguard Containers as base.&lt;/p&gt;
&lt;p&gt;This tutorial requires Docker, Node, and Npm to be installed on your local machine.&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?&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>Getting started with the PHP Chainguard Container</title><link>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/php/</link><pubDate>Mon, 09 Jan 2023 11:07:52 +0200</pubDate><guid>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/php/</guid><description>&lt;p&gt;Chainguard&amp;rsquo;s PHP container images provide secure foundations for PHP applications with minimal vulnerabilities compared to traditional PHP images. These images come in multiple variants: the &lt;code&gt;latest-fpm&lt;/code&gt; variant for serving web applications via FastCGI, the &lt;code&gt;latest&lt;/code&gt; variant for CLI applications, and development variants that include additional tools for building and debugging PHP workloads.&lt;/p&gt;
&lt;p&gt;In this guide, we&amp;rsquo;ll set up a demo and demonstrate how you can use Chainguard Containers to develop, build, and run PHP applications.&lt;/p&gt;</description></item><item><title>Getting started with the Python Chainguard Container</title><link>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/python/</link><pubDate>Tue, 28 Feb 2023 11:07:52 +0200</pubDate><guid>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/python/</guid><description>&lt;p&gt;Chainguard&amp;rsquo;s Python container images provide a more secure foundation for Python applications through distroless design, containing significantly fewer CVEs compared to traditional Python images. These production-ready images are optimized for building and running Python workloads.&lt;/p&gt;
&lt;p&gt;Two variants of Chainguard Python images are available: a minimal runtime image containing only Python and its standard library, and a &lt;code&gt;-dev&lt;/code&gt; variant that includes pip and a shell for development purposes. Since most Python applications require third-party packages, the recommended approach is using a &lt;a href="https://docs.docker.com/build/building/multi-stage/"&gt;multi-stage Docker build&lt;/a&gt; with the &lt;code&gt;-dev&lt;/code&gt; image for dependency installation and the minimal image for runtime.&lt;/p&gt;</description></item><item><title>Getting started with the Ruby Chainguard Container</title><link>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/ruby/</link><pubDate>Wed, 10 May 2023 11:07:52 +0200</pubDate><guid>https://deploy-preview-3927--ornate-narwhal-088216.netlify.app/chainguard/containers/getting-started/languages-and-runtimes/ruby/</guid><description>&lt;p&gt;Chainguard&amp;rsquo;s &lt;a href="https://images.chainguard.dev/directory/image/ruby/versions?utm_source=cg-academy&amp;amp;utm_medium=referral&amp;amp;utm_campaign=dev-enablement&amp;amp;utm_content=edu-content-chainguard-chainguard-images-getting-started-ruby"&gt;Ruby container images&lt;/a&gt; provide secure foundations for Ruby applications with minimal vulnerabilities through both development and production-ready distroless variants. These images significantly reduce attack surface compared to traditional Ruby base images while maintaining full compatibility with Ruby applications and the Rubygems ecosystem.&lt;/p&gt;
&lt;p&gt;Because Ruby applications typically require the installation of third-party dependencies via &lt;a href="https://rubygems.org/"&gt;Rubygems&lt;/a&gt;, using a pure distroless image for building your application would not work. In cases like this, you&amp;rsquo;ll need to implement a &lt;a href="https://docs.docker.com/build/building/multi-stage/"&gt;multi-stage Docker build&lt;/a&gt; that uses one of the &lt;code&gt;-dev&lt;/code&gt; images to set up the application.&lt;/p&gt;</description></item></channel></rss>