Create an account


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Fedora - How to build Fedora container images

#1
How to build Fedora container images

<div><p>With the rise of containers and container technology, all major Linux distributions nowadays provide a container base image. This article presents how the Fedora project builds its base image. It also shows you how to use it to create a layered image.</p>
<p> <span id="more-29200"></span> </p>
<h2>Base and layered images</h2>
<p>Before we look at how the Fedora container base image is built, let’s define a base image and a layered image. A simple way to define a base image is an image that has no parent layer. But what does that concretely mean? It means a base image usually contains only the root file system (<em>rootfs</em>) of an operating system. The base image generally provides the tools needed to install software in order to create layered images.</p>
<p>A layered image adds a collections of layers on top of the base image in order to install, configure, and run an application. Layered images reference base images in a <em>Dockerfile</em> using the <em>FROM</em> instruction:</p>
<pre class="wp-block-preformatted">FROM fedora:latest</pre>
<h2>How to build a base image</h2>
<p>Fedora has a full suite of tools available to build container images. <a href="https://fedoramagazine.org/running-containers-with-podman/">This includes </a><em><a href="https://fedoramagazine.org/running-containers-with-podman/">podman</a></em>, which does not require running as the root user.</p>
<h3>Building a rootfs</h3>
<p>A base image comprises mainly a <a href="https://en.wikipedia.org/wiki/Tar_(computing)">tarball</a>. This tarball contains a rootfs. There are different ways to build this rootfs. The Fedora project uses the <a href="https://en.wikipedia.org/wiki/Kickstart_(Linux)">kickstart</a> installation method coupled with <a href="http://imgfac.org/">imagefactory</a> software to create these tarballs.</p>
<p>The kickstart file used during the creation of the Fedora base image is available in Fedora’s build system <a href="https://koji.fedoraproject.org/koji/">Koji</a>. The <em><a href="https://koji.fedoraproject.org/koji/packageinfo?packageID=26387">Fedora-Container-Base</a></em> package regroups all the base image builds. If you select a build, it gives you access to all the related artifacts, including the kickstart files. Looking at an <a href="https://kojipkgs.fedoraproject.org//packages/Fedora-Container-Base/30/20190902.0/images/koji-f30-build-37420478-base.ks">example</a>, the <em>%packages</em> section at the end of the file defines all the packages to install. This is how you make software available in the base image.</p>
<h3>Using a rootfs to build a base image</h3>
<p>Building a base image is easy, once a rootfs is available. It requires only a Dockerfile with the following instructions:</p>
<pre class="wp-block-preformatted">FROM scratch
ADD layer.tar /
CMD ["/bin/bash"]</pre>
<p>The important part here is the <em>FROM scratch</em> instruction, which is creating an empty image. The following instructions then add the rootfs to the image, and set the default command to be executed when the image is run.</p>
<p>Let’s build a base image using a Fedora rootfs built in Koji:</p>
<pre class="wp-block-preformatted">$ curl -o fedora-rootfs.tar.xz https://kojipkgs.fedoraproject.org/packa..._64.tar.xz
$ tar -xJvf fedora-rootfs.tar.xz 51c14619f9dfd8bf109ab021b3113ac598aec88870219ff457ba07bc29f5e6a2/layer.tar $ mv 51c14619f9dfd8bf109ab021b3113ac598aec88870219ff457ba07bc29f5e6a2/layer.tar layer.tar
$ printf "FROM scratch\nADD layer.tar /\nCMD [\"/bin/bash\"]" &gt; Dockerfile
$ podman build -t my-fedora .
$ podman run -it --rm my-fedora cat /etc/os-release</pre>
<p>The <em>layer.tar</em> file which contains the rootfs needs to be extracted from the downloaded archive. This is only needed because Fedora generates images that are ready to be consumed by a container run-time.</p>
<p>So using Fedora’s generated image, it’s even easier to get a base image. Let’s see how that works:</p>
<pre class="wp-block-preformatted">$ curl -O https://kojipkgs.fedoraproject.org/packa..._64.tar.xz
$ podman load --input Fedora-Container-Base-Rawhide-20190902.n.0.x86_64.tar.xz
$ podman run -it --rm localhost/fedora-container-base-rawhide-20190902.n.0.x86_64:latest cat /etc/os-release</pre>
<h2>Building a layered image</h2>
<p>To build a layered image that uses the Fedora base image, you only need to specify <em>fedora</em> in the <em>FROM</em> line instruction:</p>
<pre class="wp-block-preformatted">FROM fedora:latest</pre>
<p>The <em>latest</em> tag references the latest active Fedora release (Fedora 30 at the time of writing). But it is possible to get other versions using the image tag. For example, <em>FROM fedora:31</em> will use the Fedora 31 base image.</p>
<p>Fedora supports building and releasing software as containers. This means you can maintain a Dockerfile to make your software available to others. For more information about becoming a container image maintainer in Fedora, check out the <a href="https://docs.fedoraproject.org/en-US/containers/guidelines/guidelines/">Fedora Containers Guidelines</a>.</p>
</div>


https://www.sickgaming.net/blog/2019/09/...er-images/
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

Forum software by © MyBB Theme © iAndrew 2016