<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Container on Martin Ahrer</title><link>https://www.martinahrer.at/tags/container/</link><description>Recent content in Container on Martin Ahrer</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 03 Dec 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://www.martinahrer.at/tags/container/index.xml" rel="self" type="application/rss+xml"/><item><title>Building Docker Images with bake</title><link>https://www.martinahrer.at/2024/12/03/building-docker-images-with-bake/</link><pubDate>Tue, 03 Dec 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/12/03/building-docker-images-with-bake/</guid><description>&lt;div class="paragraph">
&lt;p>Platform engineers and build pipeline engineers constantly are faced with the challenge of building container images for providing images to be used as application base or for running pipeline tasks. Probably such images have to be provided as multiple variants for multiple versions of software packages to be included.&lt;/p>
&lt;/div></description></item><item><title>Docker Multiplatform Build</title><link>https://www.martinahrer.at/2024/09/12/docker-multiplatform-build/</link><pubDate>Thu, 12 Sep 2024 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2024/09/12/docker-multiplatform-build/</guid><description>&lt;div class="paragraph">
&lt;p>The Arm CPU architecture is getting more and more popular even on desktop developer devices.&lt;/p>
&lt;/div>
&lt;div class="quoteblock">
&lt;blockquote>
A comparative analysis of Arm, AMD, and Intel costs in the Amazon cloud has shown that Graviton2 processors can be significantly more cost-efficient than other platforms. The study compared the 16xlarge instances based on the m6g (Graviton2, Arm), m5a (EPYC1, AMD), and m5n (Xeon Cascade Lake, Intel) for the 64-vCPU count. Not only are the Arm-based instances cheaper than AMD and Intel, they can achieve 40% better performance per dollar when translating the time to completion of SPEC tests to hours and multiplying the result by hourly cost.
&lt;/blockquote>
&lt;div class="attribution">
— https://bell-sw.com/blog/application-cost-reduction-with-arm-servers
&lt;/div></description></item><item><title>Hashicorp Nomad with Consul service discovery</title><link>https://www.martinahrer.at/2022/07/26/hashicorp-nomad-with-consul-service-discovery/</link><pubDate>Tue, 26 Jul 2022 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2022/07/26/hashicorp-nomad-with-consul-service-discovery/</guid><description>&lt;div class="paragraph">
&lt;p>With my previous &lt;a href="https://www.martinahrer.at/code/hashicorp-nomad-service-discovery.html">post&lt;/a> I demonstrated how simple it is to connect services through Nomad’s service discovery support.
I promised to follow-up showing this with Consul providing the service registry and use Consul’s service discovery.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>Le’s look into the &lt;a href="https://www.nomadproject.io/docs/job-specification/service#service-parameters">service stanza&lt;/a> documentation.
The &lt;code>provider&lt;/code> key allows 2 different values.
We already used &lt;code>nomad&lt;/code> implementing the Nomad service registry.
Before Nomad 1.3 only &lt;code>consul&lt;/code> was a supported service registry.
This was the default for this key and would register the service with the Consul service registry.
So we would go ahead and just would set &lt;code>provider = &amp;#34;consul&amp;#34;&lt;/code> for the &lt;code>api&lt;/code> and the &lt;code>db&lt;/code> service.&lt;/p>
&lt;/div></description></item><item><title>Hashicorp Nomad service discovery</title><link>https://www.martinahrer.at/2022/07/25/hashicorp-nomad-service-discovery/</link><pubDate>Mon, 25 Jul 2022 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2022/07/25/hashicorp-nomad-service-discovery/</guid><description>&lt;div class="paragraph">
&lt;p>With the recently released Nomad 1.3 a service registry backed by Nomad was added.
This is making building complex services dependent on others really easy.
Earlier we typically would have added Hashicorp Consul as service registry.
In a production environment that would have meant to a add a Consul cluster running along with the Nomad cluster.
Obviously this comes with some costs even when running such a cluster is really made simple by Hashicorp.&lt;/p>
&lt;/div></description></item><item><title>Introduction to Hashicorp Nomad</title><link>https://www.martinahrer.at/2022/07/20/introduction-to-hashicorp-nomad/</link><pubDate>Wed, 20 Jul 2022 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2022/07/20/introduction-to-hashicorp-nomad/</guid><description>&lt;div class="paragraph">
&lt;p>In the past 2 years I successfully architected and developed a new product for a customer and brought it to production. This product uses Hashicorp’s job scheduler &lt;a href="https://www.nomadproject.io/">Nomad&lt;/a> for managing workload.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>Nomad is an excellent alternative to Kubernetes.
It is known for its simplicity in regard to usage and maintainability and allows to schedule containerized and non-containerized applications.&lt;/p>
&lt;/div></description></item><item><title>Google Container Tools - Jib</title><link>https://www.martinahrer.at/2020/04/19/google-container-tools-jib/</link><pubDate>Sun, 19 Apr 2020 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2020/04/19/google-container-tools-jib/</guid><description>&lt;div class="paragraph">
&lt;p>With this post we close the &lt;a href="https://www.martinahrer.at/tags/building-docker-images/">series&lt;/a> of articles taking a deep dive on building Docker images.
We look at a building Docker images for running Java applications in a Docker container with &lt;a href="https://github.com/GoogleContainerTools/jib">Jib&lt;/a> which is part of the &lt;a href="https://github.com/GoogleContainerTools">Google Container Tools&lt;/a>.&lt;/p>
&lt;/div>
&lt;div class="sect1">
&lt;h2 id="_jib">Jib&lt;/h2>
&lt;div class="sectionbody">
&lt;div class="paragraph">
&lt;p>Jib is highly opinionated about building Java Docker containers using Maven or Gradle as build tool.
So it offers plugin support for the above mentioned build tools.&lt;/p>
&lt;/div></description></item><item><title>Docker BuildKit</title><link>https://www.martinahrer.at/2020/04/16/docker-buildkit/</link><pubDate>Thu, 16 Apr 2020 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2020/04/16/docker-buildkit/</guid><description>&lt;div class="paragraph">
&lt;p>In the previous blog post of the building docker images series we had a look at Docker image build &lt;a href="https://www.martinahrer.at/code/docker-build-pipeline.html">pipelines&lt;/a>.
We revealed typical problems and looked at how to overcome some by utilizing multistage builds.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>In part 4 of this series we work with an addition to the Docker tooling which is &lt;a href="https://docs.docker.com/develop/develop-images/build_enhancements/">BuildKit&lt;/a>.&lt;/p>
&lt;/div></description></item><item><title>Docker image build pipeline</title><link>https://www.martinahrer.at/2019/08/30/docker-image-build-pipeline/</link><pubDate>Fri, 30 Aug 2019 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2019/08/30/docker-image-build-pipeline/</guid><description>&lt;div class="paragraph">
&lt;p>Let’s recap what we have covered in this blog post series so far.
In &lt;a href="https://www.martinahrer.at/code/docker-building-an-image.html">Building a Docker Image&lt;/a> we had a look at the anatomy of a Docker image.
And &lt;a href="https://www.martinahrer.at/code/docker-optimizing-build.html">Optimizing a Docker Image&lt;/a> shed some light on optimizations when building an image.&lt;/p>
&lt;/div></description></item><item><title>Optimizing a Docker Image</title><link>https://www.martinahrer.at/2019/08/20/optimizing-a-docker-image/</link><pubDate>Tue, 20 Aug 2019 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2019/08/20/optimizing-a-docker-image/</guid><description>&lt;div class="paragraph">
&lt;p>This post continues where we left off with &lt;a href="https://www.martinahrer.at/code/docker-building-an-image.html">Building a Docker Image&lt;/a>.
We are looking into how we can optimize the process of building a Docker image.
This optimization can aim at reducing the size of images built or the time it takes for packaging an image.&lt;/p>
&lt;/div></description></item><item><title>Building a Docker Image</title><link>https://www.martinahrer.at/2019/08/17/building-a-docker-image/</link><pubDate>Sat, 17 Aug 2019 00:00:00 +0000</pubDate><guid>https://www.martinahrer.at/2019/08/17/building-a-docker-image/</guid><description>&lt;div class="paragraph">
&lt;p>This post starts a &lt;a href="https://www.martinahrer.at/tags/building-docker-images/">series&lt;/a> of articles taking a deep dive on building Docker images.
But before we look at building a Docker image let’s briefly recap the essentials we need to know about container images.&lt;/p>
&lt;/div>
&lt;div class="paragraph">
&lt;p>A Docker image is built up from a series of layers where each layer represents an instruction in the image’s Dockerfile.
When Docker materializes an image and creates a container from this image, a storage driver handles the details about the way these layers interact with each other.
Different &lt;a href="https://docs.docker.com/v17.09/engine/userguide/storagedriver/imagesandcontainers/">storage drivers&lt;/a> are available, which have advantages and disadvantages in different situations (e.g. AUFS, overlay, overlay2, btrfs,zfs).
All drivers have in common that they use stackable image layers and the copy-on-write (&lt;a href="https://en.wikipedia.org/wiki/Copy-on-write">CoW&lt;/a>) strategy for writing files.&lt;/p>
&lt;/div></description></item></channel></rss>