<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://podman.io/blogs</id>
    <title>Podman Blog</title>
    <updated>2022-12-07T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://podman.io/blogs"/>
    <subtitle>Podman Blog</subtitle>
    <icon>https://podman.io/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Website Updates]]></title>
        <id>https://podman.io/blogs/2022/12/07/new</id>
        <link href="https://podman.io/blogs/2022/12/07/new"/>
        <updated>2022-12-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Several updates have been planned for this site for quite a while, and work has been ongoing. The first significant change that is happening is with our blog posts. A new WordPress-based site has been created for our posts at blog.podman.io. The new site has a fresh look and feel and shows the direction we’re hoping to take this entire site eventually. You'll probably notice the similarities if you have tried Podman Desktop.]]></summary>
        <content type="html"><![CDATA[<p>Several updates have been planned for this site for quite a while, and work has been ongoing. The first significant change that is happening is with our blog posts. A new WordPress-based site has been created for our posts at <a href="https://blog.podman.io" target="_blank" rel="noopener noreferrer">blog.podman.io</a>. The new site has a fresh look and feel and shows the direction we’re hoping to take this entire site eventually. You'll probably notice the similarities if you have tried <a href="https://podman-desktop.io/" target="_blank" rel="noopener noreferrer">Podman Desktop</a>.</p><p>We are contemplating moving the blog posts from this site to the new one. At least for the moment, the blog posts created before today (December 7, 2022) can now be found under the “Archived Blogs” link on the left side menu. The “Blogs” link in that same menu will take you to the new site.</p><p>We hope you enjoy the new blog site and would love to hear from you about what you think about it. As on this site, blog posts from the community will always be gratefully accepted!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Netavark and Aardvark-dns v1.3.0 released]]></title>
        <id>https://podman.io/blogs/2022/11/11/nvav1.3</id>
        <link href="https://podman.io/blogs/2022/11/11/nvav1.3"/>
        <updated>2022-11-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Netavark and Aardvark-dns v1.3.0 release</h1><p>We have cut new releases of the network stack components for <a href="https://github.com/containers/netavark/releases/tag/v1.3.0" target="_blank" rel="noopener noreferrer">netavark</a>
and <a href="https://github.com/containers/aardvark-dns/releases/tag/v1.3.0" target="_blank" rel="noopener noreferrer">aardvark-dns</a>. Both netavark and aardvark-dns
versions 1.3.0 were released. As the process works, the upstream releases will slowly work their way into
Linux distributions.</p><p>A basic summary of changes for both are as follows:</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="v130-netavark">v1.3.0 Netavark<a href="#v130-netavark" class="hash-link" aria-label="Direct link to v1.3.0 Netavark" title="Direct link to v1.3.0 Netavark">​</a></h3><ul><li>Housekeeping and code cleanup</li><li>macvlan: remove tmp interface when name already used in netns</li><li>Add support for route metrics</li><li>netlink: return better error if ipv6 is disabled</li><li>macvlan: fix name collision on hostns</li><li>Ignore dns-enabled for macvlan (BZ2137320)</li><li>better errors on teardown</li><li>allow customer dns servers for containers</li><li>do not set route for internal-only networks</li><li>do not use ipv6 autoconf</li></ul><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="v130-aardvark-dns">v1.3.0 Aardvark-dns<a href="#v130-aardvark-dns" class="hash-link" aria-label="Direct link to v1.3.0 Aardvark-dns" title="Direct link to v1.3.0 Aardvark-dns">​</a></h3><ul><li>allow one or more dns servers in the aardvark config</li></ul>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman v4.3.0 Released]]></title>
        <id>https://podman.io/blogs/2022/10/22/new</id>
        <link href="https://podman.io/blogs/2022/10/22/new"/>
        <updated>2022-10-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman has gone 4.3.0!]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-has-gone-430"><a href="https://podman.io/releases/2022/10/22/podman-release-v4.3.0.html" target="_blank" rel="noopener noreferrer">Podman has gone 4.3.0!</a><a href="#podman-has-gone-430" class="hash-link" aria-label="Direct link to podman-has-gone-430" title="Direct link to podman-has-gone-430">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2022/10/12/new</id>
        <link href="https://podman.io/blogs/2022/10/12/new"/>
        <updated>2022-10-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Time for another "Podman Posts of Interest" post.]]></summary>
        <content type="html"><![CDATA[<p>Time for another "Podman Posts of Interest" post.
Checkout the <a href="https://podman.io/blogs/2022/10/12/podman-posts-of-interests.html" target="_blank" rel="noopener noreferrer">Podman Posts of Interest</a> for the links!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2022/10/12/podman-posts-of-interests</id>
        <link href="https://podman.io/blogs/2022/10/12/podman-posts-of-interests"/>
        <updated>2022-10-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Posts of Interest</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>A number of blog posts have flung by and I have not had a chance to get individual
link posts to them, so thought I would add a few here that have popped up recently,
links after the break!.</p><ul><li><a href="https://fedoramagazine.org/author/powergame/" target="_blank" rel="noopener noreferrer">Mehdi Haghgoo</a> - <a href="https://fedoramagazine.org/manage-containers-on-fedora-linux-with-podman-desktop/" target="_blank" rel="noopener noreferrer">Manage containers on Fedora Linux with Podman Desktop</a> - Learn about the opensource GUI application for managing containers on Linux, macOS, and Windows.</li><li><a href="https://opensource.com/users/adir" target="_blank" rel="noopener noreferrer">Aditya Rajan</a> and <a href="https://twitter.com/gscrivano" target="_blank" rel="noopener noreferrer">Giuseppe Scrivano</a> - <a href="https://opensource.com/article/22/10/wasm-containers" target="_blank" rel="noopener noreferrer">Use OCI containers to run WebAssembly workloads</a> - Use crun to run Wasm/WASI workloads on Podman and Kubernetes.</li><li><a href="https://twitter.com/fatherlinux" target="_blank" rel="noopener noreferrer">Scott McCarty</a> - <a href="https://www.infoworld.com/article/3674124/the-ever-widening-world-of-wasm.html" target="_blank" rel="noopener noreferrer">The ever-widening world of Wasm</a> - Bringing WebAssembly and OCI containers together could enable us to run the same container image on any hardware or operating system we want—wherever it runs best, fastest, or cheapest.</li><li><a href="https://twitter.com/erdemyasar" target="_blank" rel="noopener noreferrer">Erdem Yasar</a> - <a href="https://cloud7.news/linux/rhel-8-7-and-9-1-are-focusing-on-podman-containers/" target="_blank" rel="noopener noreferrer">RHEL 8.7 and 9.1 are focusing on Podman containers</a> - Red Hat announced the beta release of its Red Hat Enterprise Linux (RHEL) versions 8.7 and 9.1.</li><li><a href="https://technology.amis.nl/author/marc-lameriksamis-nl/" target="_blank" rel="noopener noreferrer">Mark Lameriks</a> - <a href="https://technology.amis.nl/recent/adding-podman-to-my-vm-with-minikube-part-1/" target="_blank" rel="noopener noreferrer">Adding Podman to my VM with Minikube Part 1</a> - Mark looks at using the Podman driver as an alternative runtime to the Docker driver in an environment with Minikube.</li><li><a href="https://technology.amis.nl/author/marc-lameriksamis-nl/" target="_blank" rel="noopener noreferrer">Mark Lameriks</a> - <a href="https://technology.amis.nl/platform/podman/adding-podman-to-my-vm-with-minikube-part-2/" target="_blank" rel="noopener noreferrer">Adding Podman to my VM with Minikube Part 2</a> - Mark looks at using the Podman driver as an alternative runtime to the Docker driver in an environment with Minikube.</li><li><a href="https://www.techrepublic.com/meet-the-team/us/jack-wallen/" target="_blank" rel="noopener noreferrer">Jack Wallen</a> - <a href="https://nationalcybersecuritynews.today/how-to-enable-podman-sudo-less-container-management-linux-linuxsecurity/" target="_blank" rel="noopener noreferrer">How to enable Podman sudo-less container management <!-- -->|<!-- --> #linux <!-- -->|<!-- --> #linuxsecurity</a> - Jack shows you how to setup a secure rootless environment with Podman.</li><li><a href="https://twitter.com/rakevdnamhsekol" target="_blank" rel="noopener noreferrer">Lokesh Mandvekar</a> - <a href="https://opensource.com/article/22/9/podman-packages-linux" target="_blank" rel="noopener noreferrer">How Podman packaging works on Linux</a> - Get a deep dive into Podman packages for Debian and Ubuntu using Fedora Sources, OBS, and Debbuild.</li><li><a href="https://twitter.com/Srivallipatcha1" target="_blank" rel="noopener noreferrer">Srivalli Patchava</a> - <a href="https://hkrtrainings.com/podman-vs-docker" target="_blank" rel="noopener noreferrer">Podman vs Docker</a> - Srivalli compare Podman vs Docker, the industry-standard container management tool for nearly a decade because these two systems have intrinsic distinctions yet are well-suited for collaboration.</li><li>Pratham Patel - <a href="https://linuxhandbook.com/docker-vs-podman/amp/" target="_blank" rel="noopener noreferrer">Understanding the Differences Between Podman and Docker</a> - Pratham investigates the advantages one holds over the other.</li><li>Cameron Pavey - <a href="https://earthly.dev/blog/podman-rootless/?utm_campaign=meetedgar&amp;utm_medium=social&amp;utm_source=meetedgar.com" target="_blank" rel="noopener noreferrer">Podman: The Rootless Docker Alternative</a> - Cameron explores how Podman can be a rootless alternative to Docker.</li><li><a href="https://www.redhat.com/en/authors/trevor-bryant" target="_blank" rel="noopener noreferrer">Trevor Bryant</a> and <!-- -->[Samuel Walker]<!-- -->](<a href="https://www.redhat.com/en/authors/samuel-walker" target="_blank" rel="noopener noreferrer">https://www.redhat.com/en/authors/samuel-walker</a>) - <a href="https://www.redhat.com/en/blog/enhancing-application-container-security-and-compliance-podman" target="_blank" rel="noopener noreferrer">Enhancing application container security and compliance with Podman </a> - A look into enhancing the security of OCI compliant containers by using Podman.</li><li><a href="https://blog.min.io/author/will/" target="_blank" rel="noopener noreferrer">Will Dinyes</a> - <a href="https://blog.min.io/minio-podman-and-apple-silicon/?utm_content=221575511&amp;utm_medium=social&amp;utm_source=twitter&amp;hss_channel=tw-3017977255" target="_blank" rel="noopener noreferrer">MinIO, Podman, and Apple Silicon</a> - Getting MinIO containers working on a Mac using Podman.</li><li><a href="https://medium.com/@techpradeesh" target="_blank" rel="noopener noreferrer">Pradeesh Parameswaran</a> - <a href="https://medium.com/@techpradeesh/build-a-python-flask-application-container-using-podman-a-docker-alternative-3f6b6d798207" target="_blank" rel="noopener noreferrer">Build A Python Flask Application Container Using Podman —A Docker Alternative</a> - Pradesh walks you through building a python flask application that runs as a container.</li><li><a href="https://twitter.com/vlntnrthbrg" target="_blank" rel="noopener noreferrer">Valentin Rothberg</a>, <a href="https://twitter.com/preethit" target="_blank" rel="noopener noreferrer">Preethi Thomas</a>, and <a href="https://twitter.com/rhatdan" target="_blank" rel="noopener noreferrer">Dan Walsh</a> - <!-- -->[https://www.redhat.com/sysadmin/kubernetes-workloads-podman-systemd]<!-- -->(How to run Kubernetes workloads in systemd with Podman) - Kubernetes YAML gives Podman a unified solution to declare container workloads across environments and simplify complexity for developers and sysadmins.</li><li><a href="https://twitter.com/cedricclyburn" target="_blank" rel="noopener noreferrer">Cedric Clyburn</a> - <a href="https://dev.to/cedricclyburn/containers-without-docker-podman-buildah-and-skopeo-1eal" target="_blank" rel="noopener noreferrer">Containers without Docker (podman, buildah, and skopeo)</a> - Cedric shows how to work with containers using Podman, Buildah, and Skopeo.</li></ul>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How Podman packaging works on Linux]]></title>
        <id>https://podman.io/blogs/2022/10/03/debbuild</id>
        <link href="https://podman.io/blogs/2022/10/03/debbuild"/>
        <updated>2022-10-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Get a deep dive into Podman packages for Debian and Ubuntu using Fedora Sources, OBS and Debbuild. Learn More!.]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="get-a-deep-dive-into-podman-packages-for-debian-and-ubuntu-using-fedora-sources-obs-and-debbuild-learn-more">Get a deep dive into Podman packages for Debian and Ubuntu using Fedora Sources, OBS and Debbuild. <a href="https://opensource.com/article/22/9/podman-packages-linux" target="_blank" rel="noopener noreferrer">Learn More!</a>.<a href="#get-a-deep-dive-into-podman-packages-for-debian-and-ubuntu-using-fedora-sources-obs-and-debbuild-learn-more" class="hash-link" aria-label="Direct link to get-a-deep-dive-into-podman-packages-for-debian-and-ubuntu-using-fedora-sources-obs-and-debbuild-learn-more" title="Direct link to get-a-deep-dive-into-podman-packages-for-debian-and-ubuntu-using-fedora-sources-obs-and-debbuild-learn-more">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[How Podman packaging works on Linux]]></title>
        <id>https://podman.io/blogs/2022/10/03/new</id>
        <link href="https://podman.io/blogs/2022/10/03/new"/>
        <updated>2022-10-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Get a deep dive into Podman packages for Debian and Ubuntu using Fedora Sources, OBS and Debbuild. Learn More!.]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="get-a-deep-dive-into-podman-packages-for-debian-and-ubuntu-using-fedora-sources-obs-and-debbuild-learn-more">Get a deep dive into Podman packages for Debian and Ubuntu using Fedora Sources, OBS and Debbuild. <a href="https://opensource.com/article/22/9/podman-packages-linux" target="_blank" rel="noopener noreferrer">Learn More!</a>.<a href="#get-a-deep-dive-into-podman-packages-for-debian-and-ubuntu-using-fedora-sources-obs-and-debbuild-learn-more" class="hash-link" aria-label="Direct link to get-a-deep-dive-into-podman-packages-for-debian-and-ubuntu-using-fedora-sources-obs-and-debbuild-learn-more" title="Direct link to get-a-deep-dive-into-podman-packages-for-debian-and-ubuntu-using-fedora-sources-obs-and-debbuild-learn-more">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman v4.2.0 Released]]></title>
        <id>https://podman.io/blogs/2022/08/17/new</id>
        <link href="https://podman.io/blogs/2022/08/17/new"/>
        <updated>2022-08-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman has gone 4.2.0!]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-has-gone-420"><a href="https://podman.io/releases/2022/08/17/podman-release-v4.2.0.html" target="_blank" rel="noopener noreferrer">Podman has gone 4.2.0!</a><a href="#podman-has-gone-420" class="hash-link" aria-label="Direct link to podman-has-gone-420" title="Direct link to podman-has-gone-420">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Windows Installer]]></title>
        <id>https://podman.io/blogs/2022/06/08/new</id>
        <link href="https://podman.io/blogs/2022/06/08/new"/>
        <updated>2022-06-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[If you want to run Podman on Windows, check out this Post!]]></summary>
        <content type="html"><![CDATA[<p>If you want to run Podman on Windows, check out this <a href="https://www.redhat.com/sysadmin/run-podman-windows" target="_blank" rel="noopener noreferrer">Post</a>!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Windows Installer]]></title>
        <id>https://podman.io/blogs/2022/06/08/podman-on-windows</id>
        <link href="https://podman.io/blogs/2022/06/08/podman-on-windows"/>
        <updated>2022-06-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Windows Installer</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>If you are looking into running Podman on Windows, Tom Sweeney's latest blog post on
<a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">EnableSysadmin</a> shows you how easy it is now. The
<a href="https://www.redhat.com/sysadmin/run-podman-windows" target="_blank" rel="noopener noreferrer">Run Podman on Windows: How-to instructions</a>
runs you through the four steps that take five minutes to complete. After that is done,
you can then run Podman from your favorite Windows terminal without first having to get into
a Virtual Machine. As a bonus, there's a link to a walk through video tutorial included
in the post.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman v4.1.0 Released]]></title>
        <id>https://podman.io/blogs/2022/05/09/new</id>
        <link href="https://podman.io/blogs/2022/05/09/new"/>
        <updated>2022-05-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman has gone 4.1.0!]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-has-gone-410"><a href="https://podman.io/releases/2022/05/09/podman-release-v4.1.0.html" target="_blank" rel="noopener noreferrer">Podman has gone 4.1.0!</a><a href="#podman-has-gone-410" class="hash-link" aria-label="Direct link to podman-has-gone-410" title="Direct link to podman-has-gone-410">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2022/05/08/new</id>
        <link href="https://podman.io/blogs/2022/05/08/new"/>
        <updated>2022-05-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Time for another "Podman Posts of Interest" post.]]></summary>
        <content type="html"><![CDATA[<p>Time for another "Podman Posts of Interest" post.
Checkout the <a href="https://podman.io/blogs/2022/05/08/podman-posts-of-interests.html" target="_blank" rel="noopener noreferrer">Podman Posts of Interest</a> for the links!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2022/05/08/podman-posts-of-interests</id>
        <link href="https://podman.io/blogs/2022/05/08/podman-posts-of-interests"/>
        <updated>2022-05-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Posts of Interest</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>A number of blog posts have flung by and I have not had a chance to get individual
link posts to them, so thought I would add a few here that have popped up recently,
links after the break!.</p><ul><li><a href="https://twitter.com/CharlieDoern" target="_blank" rel="noopener noreferrer">Charlie Doern</a> - <a href="https://www.redhat.com/sysadmin/podman-transfer-container-images-without-registry" target="_blank" rel="noopener noreferrer">How Podman can transfer container images without a registry</a> - The new 'podman image scp' command makes it easy to transfer container images between users on the same system or network.</li><li><a href="https://github.com/mheon" target="_blank" rel="noopener noreferrer">Matt Heon</a> - <a href="https://www.redhat.com/sysadmin/podman-new-network-stack" target="_blank" rel="noopener noreferrer">Podman 4.0's new network stack: What you need to know</a> - Podman's new Netavark and Aardvark-based stack offers three main advantages over the existing CNI-based stack.</li><li><a href="https://twitter.com/vlntnrthbrg" target="_blank" rel="noopener noreferrer">Valentin Rothberg</a> - <a href="https://www.redhat.com/sysadmin/podman-run-pods-systemd-services" target="_blank" rel="noopener noreferrer">How to run pods as systemd services with Podman</a> - Extending traditional Linux system administration practices with the modern world of containers.</li><li><a href="https://www.how2shout.com/linux/author/heyan/" target="_blank" rel="noopener noreferrer">Heyan Maurya</a> - <a href="https://www.how2shout.com/linux/how-to-install-podman-on-ubuntu-22-04-lts-jammy-linux/" target="_blank" rel="noopener noreferrer">How to install Podman on Ubuntu 22.04 LTS Jammy Linux</a> - Follow the steps in this tutorial to install the Podman container tool on Ubuntu 22.04 LTS Jammy JellyFish Linux.</li><li><a href="https://twitter.com/rhatdan" target="_blank" rel="noopener noreferrer">Dan Walsh</a> - <a href="https://www.redhat.com/sysadmin/container-permission-denied-errors" target="_blank" rel="noopener noreferrer">Container permission denied: How to diagnose this error</a> - Learn what is causing a container permission eeror and how to work around the error properly!</li><li><a href="https://twitter.com/bbaude" target="_blank" rel="noopener noreferrer">Brent Baude</a> - <a href="https://www.redhat.com/sysadmin/podman-features-2?utm_source=dlvr.it&amp;utm_medium=twitter" target="_blank" rel="noopener noreferrer">5 underused Podman features to try now</a> - Simplify how you interact with containers by incorporating pods, init containers, additional image stores, system reset, and play kube into your work.</li><li><a href="https://developers.redhat.com/" target="_blank" rel="noopener noreferrer">Red Hat Developer</a> - <a href="https://developers.redhat.com/articles/2022/05/02/podman-basics-resources-beginners-and-experts#" target="_blank" rel="noopener noreferrer">Podman basics: Resources for beginners and experts</a> - This article offers resources both for developers getting started with Podman and for those seeking more advanced information.</li><li><a href="https://medium.com/@yunglinchang" target="_blank" rel="noopener noreferrer">Jack Chang</a> - <a href="https://towardsai.net/p/machine-learning/seal-the-containerized-ml-deal-with-podman?utm_source=twitter&amp;utm_medium=social&amp;utm_campaign=rop-content-recycle" target="_blank" rel="noopener noreferrer">Seal the Containerized ML Deal With Podman</a> - A movie recommendation system using Podman.</li><li><a href="https://opensource.com/users/lsm5" target="_blank" rel="noopener noreferrer">Lokesh Mandvekar</a> - <a href="https://opensource.com/article/22/4/fedora-podman-40?sc_cid=7016000000127ECAAY" target="_blank" rel="noopener noreferrer">What Linux users and packagers need to know about Podman 4.0 on Fedora</a> - New Podman features offer better support for containers and improved performance.</li><li><a href="https://twitter.com/rhatdan" target="_blank" rel="noopener noreferrer">Dan Walsh</a> - <a href="https://www.redhat.com/sysadmin/podman-features-1" target="_blank" rel="noopener noreferrer">5 Podman features to try now</a> - Improve how you use containers with these new Podman features: --latest, --replace, --all, --ignore, and --tz.</li></ul>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman, Buildah and Skopeo on Ubuntu 22.04 LTS]]></title>
        <id>https://podman.io/blogs/2022/04/05/new</id>
        <link href="https://podman.io/blogs/2022/04/05/new"/>
        <updated>2022-04-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman, Buildah, and Skopeo will be included in Ubuntu 22.04 LTS Learn More!.]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-buildah-and-skopeo-will-be-included-in-ubuntu-2204-lts-learn-more">Podman, Buildah, and Skopeo will be included in Ubuntu 22.04 LTS <a href="https://podman.io/blogs/2022/04/05/ubuntu-2204-lts-kubic.html" target="_blank" rel="noopener noreferrer">Learn More!</a>.<a href="#podman-buildah-and-skopeo-will-be-included-in-ubuntu-2204-lts-learn-more" class="hash-link" aria-label="Direct link to podman-buildah-and-skopeo-will-be-included-in-ubuntu-2204-lts-learn-more" title="Direct link to podman-buildah-and-skopeo-will-be-included-in-ubuntu-2204-lts-learn-more">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman, Buildah and Skopeo on Ubuntu 22.04 LTS]]></title>
        <id>https://podman.io/blogs/2022/04/05/ubuntu-2204-lts-kubic</id>
        <link href="https://podman.io/blogs/2022/04/05/ubuntu-2204-lts-kubic"/>
        <updated>2022-04-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman, Buildah and Skopeo on Ubuntu 22.04 LTS</h1><p><a href="https://releases.ubuntu.com/jammy/" target="_blank" rel="noopener noreferrer">Ubuntu 22.04 LTS Beta</a> is available for testing as of March 31st.
This is the first LTS release with <a href="https://packages.ubuntu.com/jammy/podman" target="_blank" rel="noopener noreferrer">Podman</a>,
<a href="https://packages.ubuntu.com/jammy/buildah" target="_blank" rel="noopener noreferrer">Buildah</a> and <a href="https://packages.ubuntu.com/jammy/skopeo" target="_blank" rel="noopener noreferrer">Skopeo</a> in
the default repos, thanks to the amazing work of Reinhard Tartler and team.</p><p>The package versions available currently are: Podman 3.4, Buildah 1.23 and Skopeo 1.4.</p><p>There won't be any further updates to the Kubic repos as far as Podman, Buildah and Skopeo are concerned,
so users are recommended to use the default repos on 22.04 LTS.</p><p>If you're currently using packages from the Kubic repos, it’s highly recommended to uninstall the Kubic
packages prior to upgrading to 22.04 LTS.</p>]]></content>
        <author>
            <name>lsm5</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="buildah" term="buildah"/>
        <category label="skopeo" term="skopeo"/>
        <category label="ubuntu" term="ubuntu"/>
        <category label="kubic" term="kubic"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Netavark and Aardvark-dns v1.0.2 released]]></title>
        <id>https://podman.io/blogs/2022/03/23/nvav1.0.2</id>
        <link href="https://podman.io/blogs/2022/03/23/nvav1.0.2"/>
        <updated>2022-03-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Netavark and Aardvark-dns v1.0.2 release</h1><p>The Podman development team has released new versions of both
<a href="https://github.com/containers/netavark/releases/tag/v1.0.2" target="_blank" rel="noopener noreferrer">Netavark</a> and
<a href="https://github.com/containers/aardvark-dns/releases/tag/v1.0.2" target="_blank" rel="noopener noreferrer">Aardvark-dns</a>. The releases mostly consist of
updated dependency libraries and bugfixes. Additionally, netavark is now capable of having a statically addressed
macvlan without a gateway address. New packages for Fedora 36 and the
<a href="https://copr.fedorainfracloud.org/coprs/rhcontainerbot/podman4/" target="_blank" rel="noopener noreferrer">Podman4 COPR</a> are being built and should be
available shortly.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman 4.0.2 is available on Homebrew]]></title>
        <id>https://podman.io/blogs/2022/03/15/new</id>
        <link href="https://podman.io/blogs/2022/03/15/new"/>
        <updated>2022-03-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman v4.0.2 is now on Homebrew! Learn More!.]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-v402-is-now-on-homebrew-learn-more">Podman v4.0.2 is now on Homebrew! <a href="https://podman.io/blogs/2022/03/15/podman4.0.2brew.html" target="_blank" rel="noopener noreferrer">Learn More!</a>.<a href="#podman-v402-is-now-on-homebrew-learn-more" class="hash-link" aria-label="Direct link to podman-v402-is-now-on-homebrew-learn-more" title="Direct link to podman-v402-is-now-on-homebrew-learn-more">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman v4.0.2 is available in Homebrew]]></title>
        <id>https://podman.io/blogs/2022/03/15/podman4.0.2brew</id>
        <link href="https://podman.io/blogs/2022/03/15/podman4.0.2brew"/>
        <updated>2022-03-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman v4.0.2 is available in Homebrew</h1><p><a href="https://brew.sh/" target="_blank" rel="noopener noreferrer">Homebrew</a>, also known as <code>brew</code>, now has the Podman v4.0.2 available. Updating should be trivial
but please make sure that Qemu is also upgraded alongside Podman. One cool feature that the community helped us
deliver is the ability to mount volumes from MacOS into the virtual machine. We decided to backport some code to
make it available to users more quickly. As such, it is possible if not likely that there will be more
changes around volume mounts in subsequent Podman releases (i.e. default mounts, technology used to make the mount).</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="macOS" term="macOS"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman 4 is not in Fedora 35]]></title>
        <id>https://podman.io/blogs/2022/03/06/new</id>
        <link href="https://podman.io/blogs/2022/03/06/new"/>
        <updated>2022-03-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Learn why Podman 4 is not in Fedora 35 in this blog post from Brent Baude.]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="learn-why-podman-4-is-not-in-fedora-35-in-this-blog-post-from-brent-baude">Learn why <a href="https://podman.io/blogs/2022/03/06/why_no_podman4_f35.html" target="_blank" rel="noopener noreferrer">Podman 4 is not in Fedora 35</a> in this blog post from <a href="https://twitter.com/bbaude" target="_blank" rel="noopener noreferrer">Brent Baude</a>.<a href="#learn-why-podman-4-is-not-in-fedora-35-in-this-blog-post-from-brent-baude" class="hash-link" aria-label="Direct link to learn-why-podman-4-is-not-in-fedora-35-in-this-blog-post-from-brent-baude" title="Direct link to learn-why-podman-4-is-not-in-fedora-35-in-this-blog-post-from-brent-baude">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman 4 is not in Fedora 35]]></title>
        <id>https://podman.io/blogs/2022/03/06/why_no_podman4_f35</id>
        <link href="https://podman.io/blogs/2022/03/06/why_no_podman4_f35"/>
        <updated>2022-03-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman 4 is not in Fedora 35</h1><p>Podman 4 will not officially ship in Fedora 35 because it has breaking changes from Podman 3. Fedora has well-founded
policies that forbid updating a package in a Fedora release, like 35, that has breaking changes. This is true for
most Linux distributions that are dependent on release versions.</p><p>However, the Podman team has set up a COPR (Cool Other Package Repo) so that you can still install Podman and its
dependencies on Fedora 35. It is called <a href="https://copr.fedorainfracloud.org/coprs/rhcontainerbot/podman4/" target="_blank" rel="noopener noreferrer">rhcontainerbot/podman4</a>.
COPRs are not officially supported by Fedora or its infrastructure. The podman4 COPR also has builds for
Fedora 36 and CentOS 9 stream. There are even Fedora 36 builds as well.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="using-podman4-copr">Using podman4 COPR<a href="#using-podman4-copr" class="hash-link" aria-label="Direct link to Using podman4 COPR" title="Direct link to Using podman4 COPR">​</a></h2><p>Adding the podman4 COPR is very easy. Instructions for doing so can be found on the
<a href="https://copr.fedorainfracloud.org/coprs/rhcontainerbot/podman4/" target="_blank" rel="noopener noreferrer">rhcontainerbot/podman4</a> project site. But for
a quick start, it is simply:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">    $ sudo dnf copr enable rhcontainerbot/podman4</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Once that command completes, you can install Podman.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">    $ sudo dnf install podman</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><em>Note</em>: If you are upgrading an existing Podman 3 install and wish to run Podman 4's new network stack, be certain
you that the aardvark and netavark packages are also installed (they are part of the same COPR). You will also
need to then run <code>podman system reset --force</code> before running any new containers.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman v4.0.0 Released]]></title>
        <id>https://podman.io/blogs/2022/02/22/new</id>
        <link href="https://podman.io/blogs/2022/02/22/new"/>
        <updated>2022-02-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman has gone 4.0.0!]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-has-gone-400"><a href="https://podman.io/releases/2022/02/22/podman-release-v4.0.0.html" target="_blank" rel="noopener noreferrer">Podman has gone 4.0.0!</a><a href="#podman-has-gone-400" class="hash-link" aria-label="Direct link to podman-has-gone-400" title="Direct link to podman-has-gone-400">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Testing Podman 4 with the new network stack]]></title>
        <id>https://podman.io/blogs/2022/02/04/network-usage</id>
        <link href="https://podman.io/blogs/2022/02/04/network-usage"/>
        <updated>2022-02-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Testing Podman 4 with the new network stack</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>Podman 4.0 will implement a new network stack instead of CNI plugins. There are two components to the new stack:</p><ul><li>Netavark performs interface setup, IP address/etc assignment, NAT, and port mapping.</li><li>Aardvark-dns that replaces the previous DNS name custom plugin. Aardvark-dns is a DNS server that provides name resolution and forwarding for container networks.</li></ul><blockquote><p><strong>Warning</strong>: Before testing Podman 4 and the new network stack, you will have to destroy all your current containers, images, and network. Consider exporting/saving any import containers or images.</p></blockquote><p>If you have run Podman 3.x before upgrading to Podman 4, Podman will continue to use CNI plugins as it had before. There is a marker in Podman's local storage that indicates this. In order to begin using Podman 4, you need to destroy that marker with podman system reset. This will destroy the marker, all of the images, all of the networks, and all of the containers.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="setting-up-podman-4-with-netavark-and-aardvark-dns-on-fedora">Setting up Podman 4 with netavark and aardvark-dns on Fedora<a href="#setting-up-podman-4-with-netavark-and-aardvark-dns-on-fedora" class="hash-link" aria-label="Direct link to Setting up Podman 4 with netavark and aardvark-dns on Fedora" title="Direct link to Setting up Podman 4 with netavark and aardvark-dns on Fedora">​</a></h2><p>If this is an upgrade to a current Podman install, destroy all current images, containers, and defined networks.</p><blockquote><p>$ podman system reset --force</p></blockquote><p>Ensure you have the DNF copr extension.</p><blockquote><p>$ sudo dnf install 'dnf-command(copr)'</p></blockquote><p>Add the podman4 test COPR to your system</p><blockquote><p>$ sudo dnf copr enable rhcontainerbot/podman4</p></blockquote><p>If you have never installed Podman, replace <code>upgrade</code> with <code>install</code> in the following command.</p><blockquote><p>$ sudo dnf upgrade podman</p></blockquote><p>If Podman was upgraded, you may have to install netavark explicitly. Otherwise, the Podman package will continue to use CNI.</p><blockquote><p>$ sudo dnf install netavark aardvark-dns</p></blockquote><p>If you find bugs, please report them to our <a href="https://github.com/containers/podman/issues" target="_blank" rel="noopener noreferrer">github issues page</a>.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="rootless" term="rootless"/>
        <category label="sudo" term="sudo"/>
        <category label="network" term="network"/>
        <category label="netavark" term="netavark"/>
        <category label="aardvark" term="aardvark"/>
        <category label="aardvark-dns" term="aardvark-dns"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Testing Podman 4 with new network stack]]></title>
        <id>https://podman.io/blogs/2022/02/04/new</id>
        <link href="https://podman.io/blogs/2022/02/04/new"/>
        <updated>2022-02-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The recent Podman v4.0 RC4 release containers the new network stack. Brent has just posted a new blog post: Testing Podman 4 with new network stack, to help you speed up your testing of the new stack. If you find any issues, please note them on the Podman issues on GitHub.]]></summary>
        <content type="html"><![CDATA[<p>The recent Podman v4.0 RC4 release containers the new network stack. Brent has just posted a new blog post: <a href="https://podman.io/blogs/2022/02/04/network-usage.html" target="_blank" rel="noopener noreferrer">Testing Podman 4 with new network stack</a>, to help you speed up your testing of the new stack. If you find any issues, please note them on the Podman <a href="https://github.com/containers/podman/issues" target="_blank" rel="noopener noreferrer">issues</a> on GitHub.</p>]]></content>
        <author>
            <name>bbaude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="rootless" term="rootless"/>
        <category label="sudo" term="sudo"/>
        <category label="network" term="network"/>
        <category label="netavark" term="netavark"/>
        <category label="aardvark" term="aardvark"/>
        <category label="aardvark-dns" term="aardvark-dns"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Build Kubernetes pods with Podman play kube]]></title>
        <id>https://podman.io/blogs/2021/10/28/build-kubernetes-pods-with-podman-play-kube</id>
        <link href="https://podman.io/blogs/2021/10/28/build-kubernetes-pods-with-podman-play-kube"/>
        <updated>2021-10-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Build Kubernetes pods with Podman play kube</h1><p>The <code>podman play kube</code> command has <code>docker compose</code> features in it to make it easier to transition your compose workloads. Brent Baude explains how in the recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-play-kube-updates" target="_blank" rel="noopener noreferrer">https://www.redhat.com/sysadmin/podman-play-kube-updates</a>.</p>]]></content>
        <author>
            <name>bbaude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="sudo" term="sudo"/>
        <category label="rootless" term="rootless"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Build Kubernetes pods with Podman play kube]]></title>
        <id>https://podman.io/blogs/2021/10/28/new</id>
        <link href="https://podman.io/blogs/2021/10/28/new"/>
        <updated>2021-10-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The podman play kube command has docker compose features in it to make it easier to transition your compose workloads. Brent Baude explains how in the recent blog post on the Red Hat Enable Sysadmin site, https://www.redhat.com/sysadmin/podman-play-kube-updates.]]></summary>
        <content type="html"><![CDATA[<p>The <code>podman play kube</code> command has <code>docker compose</code> features in it to make it easier to transition your compose workloads. Brent Baude explains how in the recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-play-kube-updates" target="_blank" rel="noopener noreferrer">https://www.redhat.com/sysadmin/podman-play-kube-updates</a>.</p>]]></content>
        <author>
            <name>bbaude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="rootless" term="rootless"/>
        <category label="sudo" term="sudo"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How Podman runs on Macs and other container FAQs]]></title>
        <id>https://podman.io/blogs/2021/10/27/how-podman-runs-on-macs</id>
        <link href="https://podman.io/blogs/2021/10/27/how-podman-runs-on-macs"/>
        <updated>2021-10-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>How Podman runs on Macs and other container FAQs</h1><p>Brent Baude clears up the confusion about Podman's machine architecture and other frequently asked questions in this recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-mac-machine-architecture" target="_blank" rel="noopener noreferrer">How Podman runs on Macs and other container FAQs</a>.</p>]]></content>
        <author>
            <name>bbaude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="sudo" term="sudo"/>
        <category label="rootless" term="rootless"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How Podman runs on Macs and other container FAQs]]></title>
        <id>https://podman.io/blogs/2021/10/27/new</id>
        <link href="https://podman.io/blogs/2021/10/27/new"/>
        <updated>2021-10-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Brent Baude clears up the confusion about Podman's machine architecture and other frequently asked questions in this recent blog post on the Red Hat Enable Sysadmin site, How Podman runs on Macs and other container FAQs.]]></summary>
        <content type="html"><![CDATA[<p>Brent Baude clears up the confusion about Podman's machine architecture and other frequently asked questions in this recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-mac-machine-architecture" target="_blank" rel="noopener noreferrer">How Podman runs on Macs and other container FAQs</a>.</p>]]></content>
        <author>
            <name>bbaude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="rootless" term="rootless"/>
        <category label="sudo" term="sudo"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Why can't I use sudo with rootless Podman?]]></title>
        <id>https://podman.io/blogs/2021/10/16/new</id>
        <link href="https://podman.io/blogs/2021/10/16/new"/>
        <updated>2021-10-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[So why can't I use sudo with rootless Podman? Matt Heon explains why and how you can safely work around the "need" if you have it in a recent blog post on the Red Hat Enable Sysadmin site, Why can't I use sudo with rootless Podman.]]></summary>
        <content type="html"><![CDATA[<p>So why can't I use sudo with rootless Podman? Matt Heon explains why and how you can safely work around the "need" if you have it in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/sudo-rootless-podman" target="_blank" rel="noopener noreferrer">Why can't I use sudo with rootless Podman</a>.</p>]]></content>
        <author>
            <name>mheon</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="rootless" term="rootless"/>
        <category label="sudo" term="sudo"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Why can't I use sudo with rootless Podman?]]></title>
        <id>https://podman.io/blogs/2021/10/16/sudo-with-rootless-podman</id>
        <link href="https://podman.io/blogs/2021/10/16/sudo-with-rootless-podman"/>
        <updated>2021-10-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Why can't I use sudo with rootless Podman?</h1><p>So why can't I use sudo with rootless Podman? Matt Heon explains why and how you can safely work around the "need" if you have it in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/sudo-rootless-podman" target="_blank" rel="noopener noreferrer">Why can't I use sudo with rootless Podman</a>.</p>]]></content>
        <author>
            <name>mheon</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="sudo" term="sudo"/>
        <category label="rootless" term="rootless"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Working with container image manifest lists]]></title>
        <id>https://podman.io/blogs/2021/10/11/multiarch</id>
        <link href="https://podman.io/blogs/2021/10/11/multiarch"/>
        <updated>2021-10-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Working with container image manifest lists</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-chris-evich-github">By Chris Evich <a href="https://github.com/cevich" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-chris-evich-github" class="hash-link" aria-label="Direct link to by-chris-evich-github" title="Direct link to by-chris-evich-github">​</a></h2><p>In this article, I will be using
<a href="https://github.com/containers/podman" target="_blank" rel="noopener noreferrer">Podman</a>,
<a href="https://github.com/containers/buildah" target="_blank" rel="noopener noreferrer">Buildah</a>,
and
<a href="https://github.com/containers/skopeo" target="_blank" rel="noopener noreferrer">Skopeo</a>
container tools to produce an image that supports multiple architectures
under a single "name".</p><p>Simply put, a <em>manifest list</em> is just a collection of images with some
additional metadata. While in principle any set of images can be in a
manifest list, the intended use is housing multi-platform and/or multi-arch
images. Otherwise, manifest lists mostly look and feel like regular container
images. You can pull, tag, and run them as you'd expect, with only a few
exceptions.</p><p>Two and a half things will likely catch you off-guard:</p><ul><li>Pushing manifest lists to registries</li><li>Removing manifest lists from local storage.</li><li>The <code>podman tag</code> command is broken for manifest lists in <code>v3.4</code>, but
works in Buildah <code>v1.23.1</code>.</li></ul><p>Due to the way image-name references are internally processed, you should
<strong>not</strong> use the usual <code>podman push</code> and <code>podman rmi</code> subcommands.
<strong>THEY WILL NOT DO WHAT YOU EXPECT!</strong> Instead, you'll want to use
<a href="https://docs.podman.io/en/latest/markdown/podman-manifest-push.1.html" target="_blank" rel="noopener noreferrer"><code>podman manifest push --all &lt;src&gt; &lt;dest&gt;</code></a> and
<a href="https://docs.podman.io/en/latest/markdown/podman-manifest-rm.1.html" target="_blank" rel="noopener noreferrer"><code>podman manifest rm &lt;name&gt;</code></a>
(similarly for <code>buildah</code>). These will push/remove the manifest list
itself instead of the contents. Similarly for tagging if you're on Podman <code>v3.4</code>,
use the <code>buildah tag</code> command instead.</p><p>Great, so manifest lists sound awesome; I can pull, and run them.
I can delete them with <code>podman manifest rm</code>, push with
<code>podman manifest push --all &lt;src&gt; &lt;dest&gt;</code>, and <code>tag</code> with Buildah,
but how can I create them?</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="easy-mode">Easy Mode<a href="#easy-mode" class="hash-link" aria-label="Direct link to Easy Mode" title="Direct link to Easy Mode">​</a></h2><p>The simplest way to create a multi-arch manifest list is by enabling
emulation to support any non-native <code>RUN</code> instructions. This is done
by installing the <code>qemu-user-static</code> package (or equivalent) for your
distribution. Also ensure the related <code>systemd-binfmt.service</code> is
enabled/started. Not all distributions support these, so skip to the
next sections for details on other methods if required.</p><p>Assuming emulation is in place, let’s look at this example <em>Containerfile</em>:</p><div class="language-Dockerfile codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-Dockerfile codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">FROM registry.access.redhat.com/ubi8:latest</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">RUN uname -a</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Building a multi-arch manifest for this can be done with one build command.
This is thanks to features of recent versions of Buildah (<code>v1.23</code> and later)
and Podman (<code>v3.4</code> and later):</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token assign-left variable" style="color:#36acaa">platarch</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">linux/amd64,linux/ppc64le,linux/arm64,linux/s390x</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ buildah build --jobs</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> --platform</span><span class="token operator" style="color:#393A34">=</span><span class="token variable" style="color:#36acaa">$platarch</span><span class="token plain"> --manifest shazam </span><span class="token builtin class-name">.</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The key options used here are:</p><ul><li><code>--manifest</code> - Add the resulting image into the named manifest list (<code>shazam</code>),
creating it if it doesn't already exist.</li><li><code>--platform</code> - Accepts a comma-separated list of <code>platform/architecture</code>
tuples (<code>linux/amd64,linux/ppc64le,linux/arm64,linux/s390x</code>).</li><li><code>--jobs</code> - Optional, causes the builds to execute in parallel using
the specified number of threads (<code>4</code>). i.e., the build finishes much
faster.</li></ul><p><em>Note</em>: Even this simple <code>Containerfile</code> and build command will produce
quite a lot of output. Assuming it's successful, you may use the following
command to examine the architectures:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ skopeo inspect --raw containers-storage:localhost/shazam </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      jq </span><span class="token string" style="color:#e3116c">'.manifests[].platform.architecture'</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Similarly,
<a href="https://github.com/containers/skopeo/blob/main/docs/skopeo-inspect.1.md" target="_blank" rel="noopener noreferrer"><code>skopeo inspect</code></a>
can be used to examine manifest lists on registry servers - just swap
<code>containers-storage:</code> with <code>docker://</code>. This is very useful for
determining if a base image is a manifest list, and if it is, which
architecture the images were built for. Querying metadata in this
way doesn't require pulling down all the data, so it's quite fast.</p><p>Lastly and as mentioned at the beginning, pushing and removing manifest
lists is special. You <strong>must</strong> use <code>manifest push</code> or <code>manifest rm</code> sub-commands.
Otherwise, Podman will act on the contents rather than the manifest list
itself. Then for push, you must specify both the source and destination.
A somewhat contrived example might be:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ buildah tag localhost/shazam quay.io/example/shazam</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> manifest </span><span class="token function" style="color:#d73a49">rm</span><span class="token plain"> localhost/shazam</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> manifest push --all quay.io/example/shazam docker://quay.io/example/shazam</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If you don't specify both the source and push destination, you'll
get an error message. In case you're wondering, the <code>--all</code> argument is
required. This tells Podman to push the manifest list AND the contents,
which is nearly always what you want to do. If you don’t use the <code>--all</code>
option, only the native architecture will be sent without any warning or
other indications.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="cheat-mode">Cheat Mode<a href="#cheat-mode" class="hash-link" aria-label="Direct link to Cheat Mode" title="Direct link to Cheat Mode">​</a></h2><p>In the case of public automation services, where convenience and ease of
maintenance are essential, <a href="https://github.com/orgs/multiarch/repositories" target="_blank" rel="noopener noreferrer">there are a set of container images that will
enable and configure <code>qermu-user-static</code> for
you</a>.
These images must be run in <code>--privileged</code> mode but will make
<a href="https://github.com/multiarch/qemu-user-static#getting-started" target="_blank" rel="noopener noreferrer">setting things up in the automation system very easy (docs)</a>.
Once set up, the image-build method is precisely the same as the above section.</p><p>That said, this is not an endorsement, and you will need to perform your own due
diligence. I only mention it in this article because if I don't, somebody is
bound to bring it up. It's likely a fine setup for small, non-critical cases.
But this will probably be a "no-go", where provenance and security are critical.
So, if that applies to you, continue on to the next section.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="safe-mode">Safe Mode<a href="#safe-mode" class="hash-link" aria-label="Direct link to Safe Mode" title="Direct link to Safe Mode">​</a></h2><p>In highly secure, locked-down, production environments using commercially
supported distributions, additional safety is often paramount over the
convenience of emulation. Additionally if the build is simply too complex,
emulation-slow, or involves multiple incompatible platforms (i.e., Windows
and Darwin) then it simply may not be practical.</p><p>In these cases, essentially you need to perform the builds separately,
collect the images on one system, then combine them all into a manifest
list as a separate step.</p><p>For example, let's assume that you've built the <code>shazam</code> image on several
linux hosts, tagged each of them with their architecture name, and pushed them
up to the <code>quay.io/example/shazam</code> repository. Combining them into a
manifest list might look like this:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token assign-left variable" style="color:#36acaa">REPO</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">quay.io/example/shazam</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> manifest create </span><span class="token variable" style="color:#36acaa">$REPO</span><span class="token plain">:latest</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token for-or-select variable" style="color:#36acaa">IMGTAG</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> amd64 s390x ppc64le arm64</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">do</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> manifest </span><span class="token function" style="color:#d73a49">add</span><span class="token plain"> </span><span class="token variable" style="color:#36acaa">$REPO</span><span class="token plain">:latest docker://</span><span class="token variable" style="color:#36acaa">$REPO</span><span class="token plain">:IMGTAG</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">done</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> manifest push --all </span><span class="token variable" style="color:#36acaa">$REPO</span><span class="token plain">:latest docker://</span><span class="token variable" style="color:#36acaa">$REPO</span><span class="token plain">:latest</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><em>Note:</em> For the
<a href="https://docs.podman.io/en/latest/markdown/podman-manifest-add.1.html" target="_blank" rel="noopener noreferrer"><code>manifest add</code></a>
sub-command, the <strong>target manifest list name comes first, then the image to add</strong>.
In the above example, the command inside the loop will pull down the
platform-tagged image (metadata) and add it into the new manifest list. There
is no need for a separate
<a href="https://docs.podman.io/en/latest/markdown/podman-pull.1.html" target="_blank" rel="noopener noreferrer">pull</a>
operation, and Podman will automatically figure out the constituent architecture
and platform information. If not, there are
<a href="https://docs.podman.io/en/latest/markdown/podman-manifest-add.1.html#arch" target="_blank" rel="noopener noreferrer">options to specify them manually</a>
during the <code>manifest add</code> operation. Lastly, in case of an accident, you'll
find a
<a href="https://docs.podman.io/en/latest/markdown/podman-manifest-remove.1.html" target="_blank" rel="noopener noreferrer"><code>manifest remove</code></a>
sub-command (<strong>same argument-order as <code>manifest add</code></strong>).</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="conclusion">Conclusion<a href="#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2><p>While countless additional details are available in the man pages, this basic
knowledge should cover <code>90%</code> of your needs. With these essential tricks in
hand, producing your own multi-arch and/or multi-platform manifest lists
is just a matter of practice (or some new bash scripts).</p><p>Please also remember to pay attention to the tooling versions, as several
bugs and deficiencies are present in earlier editions. On that same note,
if you do encounter any strange or unexpected behavior, please reach out
to the <a href="https://podman.io/community/#slack-irc-matrix-and-discord" target="_blank" rel="noopener noreferrer">upstream community for assistance</a>.</p>]]></content>
        <author>
            <name>cevich</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="buildah" term="buildah"/>
        <category label="skopeo" term="skopeo"/>
        <category label="images" term="images"/>
        <category label="multiarch" term="multiarch"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Working with container image manifest lists]]></title>
        <id>https://podman.io/blogs/2021/10/11/new</id>
        <link href="https://podman.io/blogs/2021/10/11/new"/>
        <updated>2021-10-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In this article Chris Evich uses]]></summary>
        <content type="html"><![CDATA[<p>In this article Chris Evich uses
<a href="https://github.com/containers/podman" target="_blank" rel="noopener noreferrer">Podman</a>,
<a href="https://github.com/containers/buildah" target="_blank" rel="noopener noreferrer">Buildah</a>,
and
<a href="https://github.com/containers/skopeo" target="_blank" rel="noopener noreferrer">Skopeo</a>
to produce an image that supports multiple architectures
under a single "name".
<a href="https://podman.io/blogs/2021/10/11/multiarch.html" target="_blank" rel="noopener noreferrer">Working with container image manifest lists</a> post!</p>]]></content>
        <author>
            <name>cevich</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="buildah" term="buildah"/>
        <category label="skopeo" term="skopeo"/>
        <category label="images" term="images"/>
        <category label="multiarch" term="multiarch"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman remote clients for macOS and Windows]]></title>
        <id>https://podman.io/blogs/2021/10/04/m1macs</id>
        <link href="https://podman.io/blogs/2021/10/04/m1macs"/>
        <updated>2021-10-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman on Apple Silicon</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>The Podman development team is happy to announce that Podman machine is now supported
on Apple silicon hardware like the M1s.</p><p>The initial versions of Podman machine only supported Intel-based Apple machines. We could not support
the Apple M1s because we needed some changes to occur in upstream projects that we depend on. Now that those
things are fixed, we support Apple silicon hardware with Podman 3.4.</p><p>In the last two weeks, we were able to clear the final hurdles to support Podman machine on Apple Silicon. Many
thanks to the QEMU maintainers and the maintainers of brew. And last but not least, the Fedora FCOS team
which officially supports the aarch64 architecture now.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman on Apple silicon]]></title>
        <id>https://podman.io/blogs/2021/10/04/new</id>
        <link href="https://podman.io/blogs/2021/10/04/new"/>
        <updated>2021-10-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Brent Baude Podman machine on Applie silicon is now supported! Read all about it on the Podman on Apple M1s post!]]></summary>
        <content type="html"><![CDATA[<p>Brent Baude Podman machine on Applie silicon is now supported! Read all about it on the <a href="https://podman.io/blogs/2021/10/04/m1macs.html" target="_blank" rel="noopener noreferrer">Podman on Apple M1s</a> post!</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="buildah" term="buildah"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman on Macs Update]]></title>
        <id>https://podman.io/blogs/2021/09/06/new</id>
        <link href="https://podman.io/blogs/2021/09/06/new"/>
        <updated>2021-09-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Brent Baude checks in with an update on Podman on macOS and Windows. Read all about it on the Podman on Macs Update post!]]></summary>
        <content type="html"><![CDATA[<p>Brent Baude checks in with an update on Podman on macOS and Windows. Read all about it on the <a href="https://podman.io/blogs/2021/09/06/podman-on-macs.html" target="_blank" rel="noopener noreferrer">Podman on Macs Update</a> post!</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="buildah" term="buildah"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman remote clients for macOS and Windows]]></title>
        <id>https://podman.io/blogs/2021/09/06/podman-on-macs</id>
        <link href="https://podman.io/blogs/2021/09/06/podman-on-macs"/>
        <updated>2021-09-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman on Macs Update</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>The Podman team values the local development experience, and we think containers are a crucial part of that. We’ve been brainstorming, discussing, and testing solutions to bring a great Podman experience to Mac and Windows. We are constantly looking for ways to improve it. In particular, the latest release of Podman has support for <del>Intel</del>(as of Podman v3.4) Macs. We have been hearing good feedback for a few weeks now, but up until this point, we haven’t published a lot of documentation.</p><p>Recently, we have been getting an influx of questions about Podman and Podman desktop, specifically around Macs. Coincidentally, we have a really elegant solution which we’d like to introduce. In the recently released Podman-3.3.1, we now have support for Intel-based Macs. It is command-line driven and can be installed through brew (aka <a href="https://brew.sh/" target="_blank" rel="noopener noreferrer">Homebrew</a>).</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="user-experience-on-macos">User Experience on macOS<a href="#user-experience-on-macos" class="hash-link" aria-label="Direct link to User Experience on macOS" title="Direct link to User Experience on macOS">​</a></h3><p>The user-experience is quite simple:</p><ol><li>Install brew (as it is described on their <a href="https://brew.sh/" target="_blank" rel="noopener noreferrer">homepage</a>)</li><li>Install podman from brew: <code>brew install podman</code></li><li>Initialize a podman machine: <code>podman machine init</code></li><li>Start the machine: <code>podman machine start</code></li><li>Use podman as you normally would.</li></ol><p>It is worth running <code>podman machine --help</code> to familiarize yourself with the other commands used to manage machines.</p><p>Please note that Podman machine is still under development. While we support port forwarding on Macs and Linux, we have not implemented a solution for file sharing and bind mounts. We are currently researching the various technologies to do so as we want to choose a performant approach.</p><p><del>Podman machine is currently only supported on Linux and Intel Macs. As for the new Macs that are based on Apple Silicon, we are now waiting for two things. First, we need some patches from upstream qemu to get merged and released. While we wait for the upstream patches, we are working on a possible work-around for qemu. If that is successful, we will re-enable the M1 support in Podman and get brew updated. The second is we need <a href="https://getfedora.org/en/coreos" target="_blank" rel="noopener noreferrer">Fedora CoreOS</a> aarch64 images to be indexed, which should be occurring very shortly.</del> Podman 3.4, Oct-10-2021</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="user-experience-on-windows">User Experience on Windows<a href="#user-experience-on-windows" class="hash-link" aria-label="Direct link to User Experience on Windows" title="Direct link to User Experience on Windows">​</a></h3><p>We currently support the Windows platform with a remote client that can be downloaded from our <a href="https://github.com/containers/podman/releases" target="_blank" rel="noopener noreferrer">GitHub releases page</a>. That remote client requires a Linux server with Podman and its service running. We also have user reports that running Podman in WSL is quite tenable. Consider the WSL option if you do not have available Linux servers with Podman installed.</p><p>We intend to develop a desktop for the Mac and Windows experience for Podman. Early design work is under consideration. No timeline has been identified yet.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="questions">Questions?<a href="#questions" class="hash-link" aria-label="Direct link to Questions?" title="Direct link to Questions?">​</a></h3><p>Remember, our development team can be found in our <a href="https://matrix.to/#/#podman:matrix.org" target="_blank" rel="noopener noreferrer">Matrix room</a> which has been bridged to the #podman channel on <a href="https://libera.chat/" target="_blank" rel="noopener noreferrer">libera IRC</a> as well as our <a href="https://discord.gg/x5GzFF6QH4" target="_blank" rel="noopener noreferrer">Discord server</a>. You can also get in touch with us via our <a href="https://github.com/containers/podman" target="_blank" rel="noopener noreferrer">project page</a> by opening issues, PR’s and discussions. We love to hear from people!</p><p>Podman is an open-source project. We are always looking for contributors to help us accelerate features into the Podman and container world.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2021/09/03/new</id>
        <link href="https://podman.io/blogs/2021/09/03/new"/>
        <updated>2021-09-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I've been lagging a bit in getting posts up on this site that have landed elsewhere, so time for]]></summary>
        <content type="html"><![CDATA[<p>I've been lagging a bit in getting posts up on this site that have landed elsewhere, so time for
another "Podman Posts of Interest" post.
Checkout the <a href="https://podman.io/blogs/2021/09/03/podman-posts-of-interests.html" target="_blank" rel="noopener noreferrer">Podman Posts of Interest</a> for the links!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2021/09/03/podman-posts-of-interests</id>
        <link href="https://podman.io/blogs/2021/09/03/podman-posts-of-interests"/>
        <updated>2021-09-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Posts of Interest</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>A number of blog posts have flung by and I have not had a chance to get individual
link posts to them, so thought I would add a few here that have popped up recently,
links after the break!.</p><ul><li><a href="https://github.com/tonykay" target="_blank" rel="noopener noreferrer">Tony Kay</a> - <a href="https://www.cloudassembler.com/post/podman-machine-mac-m1/" target="_blank" rel="noopener noreferrer">Running Podman Machine on the Mac M1</a> - Tony walks you through all the steps that you'll need in order to run Podman on a M1 Mac.</li><li><a href="https://medium.com/@AbhijeetKasurde" target="_blank" rel="noopener noreferrer">Abhijeet Kasurde</a> - <a href="https://medium.com/@AbhijeetKasurde/running-podman-machine-on-macos-1f3fb0dbf73d" target="_blank" rel="noopener noreferrer">Running Podman machine on macOS</a> - Abhijeet also walks you through the steps of setting up qemu and Podman machine to run Podman on your Mac.</li><li><a href="https://twitter.com/Bytesofbinary" target="_blank" rel="noopener noreferrer">Sumantro Mukherjee</a> - <a href="https://opensource.com/article/21/7/linux-podman" target="_blank" rel="noopener noreferrer">Run a Linux virtual machine in Podman</a> - Sumantro shows you how to use Podman machine to run Fedora CoreOS.</li><li><a href="https://github.com/bowmanjd" target="_blank" rel="noopener noreferrer">https://github.com/bowmanjd</a> - <a href="https://dev.to/bowmanjd/install-docker-on-windows-wsl-without-docker-desktop-34m9" target="_blank" rel="noopener noreferrer">Install Docker on Windows (WSL) without Docker Desktop</a> Jonathan shows you how to run Docker or Podman on Windows without Docker Desktop.</li></ul>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to use Podman inside of a container]]></title>
        <id>https://podman.io/blogs/2021/07/02/new</id>
        <link href="https://podman.io/blogs/2021/07/02/new"/>
        <updated>2021-07-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Do you want to know how to use Podman inside of a container? Dan Walsh and Urvashi Mohnani show you how to in a recent blog post on the Red Hat Enable Sysadmin site, How to use Podman inside of a container.]]></summary>
        <content type="html"><![CDATA[<p>Do you want to know how to use Podman inside of a container? <a href="https://twitter.com/rhatdan" target="_blank" rel="noopener noreferrer">Dan Walsh</a> and <a href="https://twitter.com/umohnani8" target="_blank" rel="noopener noreferrer">Urvashi Mohnani</a> show you how to in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-inside-container" target="_blank" rel="noopener noreferrer">How to use Podman inside of a container</a>.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to use Podman inside of a container]]></title>
        <id>https://podman.io/blogs/2021/07/02/podman-inside-container</id>
        <link href="https://podman.io/blogs/2021/07/02/podman-inside-container"/>
        <updated>2021-07-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>How to use Podman inside of a container</h1><p>Do you want to know how to use Podman inside of a container? <a href="https://twitter.com/rhatdan" target="_blank" rel="noopener noreferrer">Dan Walsh</a> and <a href="https://twitter.com/umohnani8" target="_blank" rel="noopener noreferrer">Urvashi Mohnani</a> show you how to in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-inside-container" target="_blank" rel="noopener noreferrer">How to use Podman inside of a container</a>.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to use Podman inside of Kubernetes]]></title>
        <id>https://podman.io/blogs/2021/07/01/new</id>
        <link href="https://podman.io/blogs/2021/07/01/new"/>
        <updated>2021-07-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Do you want to know how to use Podman inside of Kubernetes? Urvashi Mohnani and Dan Walsh show you how to in a recent blog post on the Red Hat Enable Sysadmin site, How to use Podman inside of Kubernetes.]]></summary>
        <content type="html"><![CDATA[<p>Do you want to know how to use Podman inside of Kubernetes? <a href="https://twitter.com/umohnani8" target="_blank" rel="noopener noreferrer">Urvashi Mohnani</a> and <a href="https://twitter.com/rhatdan" target="_blank" rel="noopener noreferrer">Dan Walsh</a> show you how to in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-inside-kubernetes" target="_blank" rel="noopener noreferrer">How to use Podman inside of Kubernetes</a>.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to use Podman inside of Kubernetes]]></title>
        <id>https://podman.io/blogs/2021/07/01/podman-inside-kubernets</id>
        <link href="https://podman.io/blogs/2021/07/01/podman-inside-kubernets"/>
        <updated>2021-07-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>How to use Podman inside of Kubernetes</h1><p>Do you want to know how to use Podman inside of Kubernetes? <a href="https://twitter.com/umohnani8" target="_blank" rel="noopener noreferrer">Urvashi Mohnani</a> and <a href="https://twitter.com/rhatdan" target="_blank" rel="noopener noreferrer">Dan Walsh</a> show you how to in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-inside-kubernetes" target="_blank" rel="noopener noreferrer">How to use Podman inside of Kubernetes</a>.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to Install and Use Podman on Ubuntu 20.04]]></title>
        <id>https://podman.io/blogs/2021/06/16/install-podman-on-ubuntu</id>
        <link href="https://podman.io/blogs/2021/06/16/install-podman-on-ubuntu"/>
        <updated>2021-06-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><p>Hitesh Jethva posted a blog post on the <a href="https://www.atlantic.net/" target="_blank" rel="noopener noreferrer">Atlantic.Net</a> site talking about <a href="https://www.atlantic.net/dedicated-server-hosting/how-to-install-and-use-podman-on-ubuntu-20-04/" target="_blank" rel="noopener noreferrer">How to Install and Use Podman on Ubuntu 20.04</a>. In the post Hitesh walks through all the steps necessary from 'A' to 'Z' to get Podman up and running on Ubuntu 20.04 and how to do some initial Podman commands.</p>]]></content>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to Install and Use Podman on Ubuntu 20.04]]></title>
        <id>https://podman.io/blogs/2021/06/16/new</id>
        <link href="https://podman.io/blogs/2021/06/16/new"/>
        <updated>2021-06-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Hitesh Jethva posted a blog post on the Atlantic.Net site talking about How to Install and Use Podman on Ubuntu 20.04. In the post Hitesh walks through all the steps necessary from 'A' to 'Z' to get Podman up and running on Ubuntu 20.04 and how to do some initial Podman commands.]]></summary>
        <content type="html"><![CDATA[<p>Hitesh Jethva posted a blog post on the <a href="https://www.atlantic.net/" target="_blank" rel="noopener noreferrer">Atlantic.Net</a> site talking about <a href="https://www.atlantic.net/dedicated-server-hosting/how-to-install-and-use-podman-on-ubuntu-20-04/" target="_blank" rel="noopener noreferrer">How to Install and Use Podman on Ubuntu 20.04</a>. In the post Hitesh walks through all the steps necessary from 'A' to 'Z' to get Podman up and running on Ubuntu 20.04 and how to do some initial Podman commands.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2021/06/13/new</id>
        <link href="https://podman.io/blogs/2021/06/13/new"/>
        <updated>2021-06-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I've been lagging a bit in getting posts up on this site that have landed elsewhere, so time for]]></summary>
        <content type="html"><![CDATA[<p>I've been lagging a bit in getting posts up on this site that have landed elsewhere, so time for
another "Podman Posts of Interest" post.
Checkout the <a href="https://podman.io/blogs/2021/06/13/podman-posts-of-interests.html" target="_blank" rel="noopener noreferrer">Podman Posts of Interest</a> for the links!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2021/06/13/podman-posts-of-interests</id>
        <link href="https://podman.io/blogs/2021/06/13/podman-posts-of-interests"/>
        <updated>2021-06-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Posts of Interest</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>A number of blog posts have flung by and I have not had a chance to get individual
link posts to them, so thought I would add a few here that have popped up recently,
links after the break!.</p><ul><li><a href="https://twitter.com/cuicodes" target="_blank" rel="noopener noreferrer">Ashley Cui</a> - <a href="https://www.redhat.com/sysadmin/new-podman-secrets-command" target="_blank" rel="noopener noreferrer">Exploring the new Podman secret command</a> - Ashely strikes again with another great article. This time she's talking all about the new Podman secret command and how you can store sensitive information in your image, yet not have it be exposed without your container.</li><li><a href="https://cfillekes-25575.medium.com" target="_blank" rel="noopener noreferrer">cfillekes</a> - <a href="https://medium.com/qiskit-openshift-multi-arch/building-and-publishing-multi-arch-images-and-image-manifests-with-red-hat-buildah-and-podman-927c717adaf3" target="_blank" rel="noopener noreferrer">Building and Publishing Multi-Arch Images and Image Manifests with Red Hat Buildah and Podman</a> - Want to learn how to use the <code>--platform</code> flag in Podman and Buildah to build Multi-Arch images? Then this is the post for you!</li><li><a href="https://twitter.com/rhatdan" target="_blank" rel="noopener noreferrer">Dan Walsh</a> - <a href="https://www.redhat.com/sysadmin/container-volatile-overlay-mounts" target="_blank" rel="noopener noreferrer">New container feature: Volatile overlay mounts</a> - How to use volatile mounts in a container to increase performance and clean up unnecessary clutter.</li><li><a href="https://www.cloudsavvyit.com/author/jameswalker/" target="_blank" rel="noopener noreferrer">James Walker</a> - <a href="https://www.cloudsavvyit.com/11575/what-is-podman-and-how-does-it-differ-from-docker/" target="_blank" rel="noopener noreferrer">What Is Podman and How Does It Differ from Docker?</a> - James walks you through the differences between the two container tools.</li><li><a href="https://twitter.com/rhatdan" target="_blank" rel="noopener noreferrer">Dan Walsh</a> - <a href="https://www.redhat.com/sysadmin/files-devices-podman" target="_blank" rel="noopener noreferrer">Using files and devices in Podman rootless containers</a> - Dan talks about the <code>k--group-add keep-groups</code> feature and how it allows rootless containers to maintain the groups of its parent process.</li><li><a href="https://www.redhat.com/sysadmin/users/sarthak-jain" target="_blank" rel="noopener noreferrer">Sarthak Jain</a> - <a href="https://www.redhat.com/sysadmin/automate-podman-ansible" target="_blank" rel="noopener noreferrer">How to automate Podman installation and deployment using Ansible</a> - Sarthak shows you how to automate Podman with Ansible.</li><li><a href="https://twitter.com/xedux" target="_blank" rel="noopener noreferrer">Eduardo Medeiros</a> - <a href="https://blog.emedeiros.me/archives/2021/05/05/how-to-create-container-images-with-ansible-bender.html" target="_blank" rel="noopener noreferrer">How to create container images with ansible-bender</a> - Eduardo shows how to use Ansible Bender along with Podman and Buildah to build container images.</li><li><a href="https://twitter.com/daniel_wtd" target="_blank" rel="noopener noreferrer">Daniel Schier</a> - <a href="https://blog.while-true-do.io/podman-networking-2/" target="_blank" rel="noopener noreferrer">Podman Networking - Part 2</a> - Daniel shows how the <code>podman network</code> command can be used for external and internal networks.</li><li><a href="https://www.redhat.com/sysadmin/users/thomas-tuffin" target="_blank" rel="noopener noreferrer">Thomas Tuffin</a> - <a href="https://www.redhat.com/sysadmin/automate-your-home" target="_blank" rel="noopener noreferrer">Home automation: Running Home Assistant with Podman</a> - An intro to the Home Assistant open source project, what it can do, and a basic setup using a container.</li></ul>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman 3 and Docker Compose - How Does the Dockerless Compose Work?]]></title>
        <id>https://podman.io/blogs/2021/05/26/new</id>
        <link href="https://podman.io/blogs/2021/05/26/new"/>
        <updated>2021-05-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[One of the main Podman 3 features is the support of Docker Compose. You can take any of your existing docker-compose.yml and just use it with Podman.]]></summary>
        <content type="html"><![CDATA[<p>One of the main Podman 3 features is the support of Docker Compose. You can take any of your existing docker-compose.yml and just use it with Podman.</p><p><a href="https://www.youtube.com/watch?v=15PFfjuxtvM" target="_blank" rel="noopener noreferrer">In this video</a>, Kirill Shirinkin shows how he moved from Docker to Podman in a real docker-composed application.</p><p><a href="https://www.youtube.com/watch?v=15PFfjuxtvM" target="_blank" rel="noopener noreferrer">Watch now</a>.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman 3 and Docker Compose - How Does the Dockerless Compose Work?]]></title>
        <id>https://podman.io/blogs/2021/05/26/podman-3-compose</id>
        <link href="https://podman.io/blogs/2021/05/26/podman-3-compose"/>
        <updated>2021-05-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-3-and-docker-compose---how-does-the-dockerless-compose-work">Podman 3 and Docker Compose - How Does the Dockerless Compose Work?<a href="#podman-3-and-docker-compose---how-does-the-dockerless-compose-work" class="hash-link" aria-label="Direct link to Podman 3 and Docker Compose - How Does the Dockerless Compose Work?" title="Direct link to Podman 3 and Docker Compose - How Does the Dockerless Compose Work?">​</a></h2><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-kirill-shirinkin-github">By Kirill Shirinkin <a href="https://github.com/Fodoj" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-kirill-shirinkin-github" class="hash-link" aria-label="Direct link to by-kirill-shirinkin-github" title="Direct link to by-kirill-shirinkin-github">​</a></h2><p>One of the main Podman 3 features is the support of Docker Compose. You can take any of your existing docker-compose.yml and just use it with Podman.</p><p><a href="https://www.youtube.com/watch?v=15PFfjuxtvM" target="_blank" rel="noopener noreferrer">In this video</a>, Kirill Shirinkin shows how he moved from Docker to Podman in a real docker-composed application.</p><p><a href="https://www.youtube.com/watch?v=15PFfjuxtvM" target="_blank" rel="noopener noreferrer">Watch now</a>.</p>]]></content>
        <author>
            <name>kshirinkin</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="systemd" term="systemd"/>
        <category label="video" term="video"/>
        <category label="docker" term="docker"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[May the Fourth be with you via Podman!]]></title>
        <id>https://podman.io/blogs/2021/05/04/new</id>
        <link href="https://podman.io/blogs/2021/05/04/new"/>
        <updated>2021-05-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[By Tom Sweeney GitHub]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>My latest blog post has just hit <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Enable Sysadmin</a>. In the
<a href="https://www.redhat.com/sysadmin/may-fourth-podman" target="_blank" rel="noopener noreferrer">May the Fourth be with you via Podman</a> post,
I delve into running an Ascii movie featureing the first Star Wars Movie inside of a container
run by Podman.</p><p>Enjoy and May the Fourth be with you!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[May the Fourth be with you via Podman!]]></title>
        <id>https://podman.io/blogs/2021/05/04/star-wars-in-podman</id>
        <link href="https://podman.io/blogs/2021/05/04/star-wars-in-podman"/>
        <updated>2021-05-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>My latest blog post has just hit <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Enable Sysadmin</a>. In the
<a href="https://www.redhat.com/sysadmin/may-fourth-podman" target="_blank" rel="noopener noreferrer">May the Fourth be with you via Podman</a> post,
I delve into running an Ascii movie featureing the first Star Wars Movie inside of a container
run by Podman.</p><p>Enjoy and May the Fourth be with you!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman v3.1.0 Released]]></title>
        <id>https://podman.io/blogs/2021/04/02/new</id>
        <link href="https://podman.io/blogs/2021/04/02/new"/>
        <updated>2021-04-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman has gone 3.1.0!]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-has-gone-310"><a href="https://podman.io/releases/2021/04/02/podman-release-v3.1.0.html" target="_blank" rel="noopener noreferrer">Podman has gone 3.1.0!</a><a href="#podman-has-gone-310" class="hash-link" aria-label="Direct link to podman-has-gone-310" title="Direct link to podman-has-gone-310">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2021/03/27/new</id>
        <link href="https://podman.io/blogs/2021/03/27/new"/>
        <updated>2021-03-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This past week I ran into three blog posts concerning Podman and thought I'd do]]></summary>
        <content type="html"><![CDATA[<p>This past week I ran into three blog posts concerning Podman and thought I'd do
another "Podman Posts of Interest" post in case you missed them.
Checkout the <a href="https://podman.io/blogs/2021/03/27/podman-posts-of-interests.html" target="_blank" rel="noopener noreferrer">Podman Posts of Interest</a> for the links!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2021/03/27/podman-posts-of-interests</id>
        <link href="https://podman.io/blogs/2021/03/27/podman-posts-of-interests"/>
        <updated>2021-03-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Posts of Interest</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>A number of blog posts have flung by and I have not had a chance to get individual
link posts to them, so thought I would add a few here that have popped up recently,
links after the break!.</p><ul><li><a href="https://oracle-base.com/" target="_blank" rel="noopener noreferrer">Oracle-Base</a> - <a href="https://oracle-base.com/articles/linux/podman-install-on-oracle-linux-ol8#install-podman" target="_blank" rel="noopener noreferrer">Podman : Install Podman on Oracle Linux 8 (OL8)</a> - A nice first look at Podman on Oracle Linux 8 from install to basic usage including rootless.</li><li><a href="https://twitter.com/davemeurer" target="_blank" rel="noopener noreferrer">Dave Meurer</a> - <a href="https://www.redhat.com/sysadmin/replace-docker-podman-macos" target="_blank" rel="noopener noreferrer">How to replace Docker with Podman on a Mac</a> - Dave shows you what you need to know about Podman on Mac.</li><li><a href="https://mohitgoyal.co/about/" target="_blank" rel="noopener noreferrer">Mohit Goyal</a> - <a href="https://mohitgoyal.co/2021/03/15/installing-and-working-with-podman-as-container-engine/" target="_blank" rel="noopener noreferrer">Installing and Working with Podman as Container Engine</a> - Walks you through the installation and basic usage of Podman.</li></ul>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Announcement&#58; Support for Older Distros on Kubic Project/OBS]]></title>
        <id>https://podman.io/blogs/2021/03/02/podman-support-for-older-distros</id>
        <link href="https://podman.io/blogs/2021/03/02/podman-support-for-older-distros"/>
        <updated>2021-03-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Announcement<!-- -->:<!-- --> Support for Older Distros on Kubic Project/OBS</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-lokesh-mandvekar-github">By Lokesh Mandvekar <a href="https://github.com/lsm5" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-lokesh-mandvekar-github" class="hash-link" aria-label="Direct link to by-lokesh-mandvekar-github" title="Direct link to by-lokesh-mandvekar-github">​</a></h2><p>The Podman Community <a href="https://podman.io/getting-started/installation" target="_blank" rel="noopener noreferrer">builds and supports packages</a>
for a wide variety of Linux distributions and operating systems. These builds are
provided in the public Open Build Service hosted by openSUSE.
<a href="https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/" target="_blank" rel="noopener noreferrer">These pre-built packages</a>
have made it easier for new users to test the latest-greatest
versions of Podman and allow for using it on distributions that do not yet provide
it in their main repositories.</p><p>As Podman matures, we are constantly looking for ways to focus on improvement to
the project versus just maintenance. One area of focus is around trimming down the
matrix of packages we build for different Linux distros. This is made easier by the
fact that Podman is now supported natively in many major Linux distributions.
For instance, Podman is in the main repositories in Ubuntu 20.10 and future versions.
Also, Podman is going to be released with Debian 11.</p><p>With the launch of Podman 3.0, we will be trimming support for the latest builds of
Podman for a number of older distributions. There are technical reasons that make it
barely possible to support a modern container engine such as Podman on too old
systems, where the kernel and certain core libraries may be too old.</p><p>Podman 3.0 will be the last major build on CentOS 7, Debian 10 and Ubuntu 18.04.
After this release, we recommend users who need the latest versions of Podman to move
to newer versions of their Linux distribution.</p>]]></content>
        <author>
            <name>lsm5</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="distro" term="distro"/>
        <category label="linux" term="linux"/>
        <category label="centos" term="centos"/>
        <category label="ubuntu" term="ubuntu"/>
        <category label="debian" term="debian"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Easy Development Dependency Management With Podman and Tent]]></title>
        <id>https://podman.io/blogs/2021/02/08/easy-development-dependency-management-with-podman-and-tent</id>
        <link href="https://podman.io/blogs/2021/02/08/easy-development-dependency-management-with-podman-and-tent"/>
        <updated>2021-02-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Easy Development Dependency Management With Podman and Tent</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-farhan-hasin-chowdhury-github">By Farhan Hasin Chowdhury <a href="https://github.com/fhsinchy" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-farhan-hasin-chowdhury-github" class="hash-link" aria-label="Direct link to by-farhan-hasin-chowdhury-github" title="Direct link to by-farhan-hasin-chowdhury-github">​</a></h2><p>Installing and managing development dependencies for various project is a chore and one thing that can improve your everyday workflow is the usage of containers.</p><p><a href="https://github.com/fhsinchy/tent/" target="_blank" rel="noopener noreferrer">Tent</a> is a CLI tool for running development dependencies such as MySQL, Mongo, ElasticSearch etc inside pre-configured containers using simple one-liners.</p><p>Running containers can be accessed via their exposed ports and can be paired with any other application on your system.</p><p>Starting a service such as <code>mysql</code> is as simple as executing <code>tent start mysql</code> and you'll never have to look back at it.</p><p>But <code>mysql</code> is not the only available service. A list of all the available services can be found on: <a href="https://github.com/fhsinchy/tent/blob/master/store/services.go" target="_blank" rel="noopener noreferrer">services.go</a></p><p>Tent is heavily inspired from <a href="https://github.com/tighten/takeout" target="_blank" rel="noopener noreferrer">tighten/takeout</a> and is an experimental project. Hence, care should be taken if you're using it in a critical environment.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="dependencies">Dependencies<a href="#dependencies" class="hash-link" aria-label="Direct link to Dependencies" title="Direct link to Dependencies">​</a></h2><ul><li>Linux</li><li><a href="https://podman.io/getting-started/installation" target="_blank" rel="noopener noreferrer">Podman</a> Installed</li><li>Podman System Service Running</li></ul><p>If you have Podman installed, you can start the system service as follows:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">## starts the podman system service</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">systemctl --user start podman.socket</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">## enables the podman system service, so it doesn't close on every reboot</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">systemctl --user </span><span class="token builtin class-name">enable</span><span class="token plain"> podman.socket</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">## stops the podman system service</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">systemctl --user stop podman.socket</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">## disables the podman system service, so it doesn't start on every reboot</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">systemctl --user disable podman.socket</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Tent assumes that you're running the service in non-root mode, hence the <code>--user</code> argument is necessary in the above commands.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="installation">Installation<a href="#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation">​</a></h2><p>Visit the <a href="https://github.com/fhsinchy/tent/releases/" target="_blank" rel="noopener noreferrer">tent release page</a> and download the <code>tent</code> binary to your computer. Open up your terminal where you've donwloaded the file and execute following commands:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">chmod</span><span class="token plain"> +x ./tent</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">mv</span><span class="token plain"> ./tent /usr/local/bin</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now the <code>tent</code> command should be available everywhere in your system.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="build-from-source">Build From Source<a href="#build-from-source" class="hash-link" aria-label="Direct link to Build From Source" title="Direct link to Build From Source">​</a></h2><p>If you're on a Fedora system, the following command should install the necessary development dependencies.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> dnf groupinstall </span><span class="token string" style="color:#e3116c">"Development Tools"</span><span class="token plain"> -y </span><span class="token operator" style="color:#393A34">&amp;&amp;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> dnf </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> golang btrfs-progs-devel gpgme-devel device-mapper-devel -y</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>And on a Ubuntu system, the following command should install the necessary development dependencies.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">apt</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> build-essential golang-go libbtrfs-dev libgpgme-dev libdevmapper-dev -y</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If you're on a different system you, may look for equivalent package on the respective package repositories.</p><p>Now build and install the application as follows:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone https://github.com/fhsinchy/tent.git ~/tent</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">cd</span><span class="token plain"> ~/tent</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">make</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="usage">Usage<a href="#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h2><p>The <code>tent</code> binary has following commands:</p><ul><li><code>tent start &lt;service name&gt;</code> - starts a container for the given service</li><li><code>tent stop &lt;service name&gt;</code> - stops and removes a container for the given service</li><li><code>tent list</code> - lists all running containers</li></ul><p>Most of the services in <code>tent</code> utilizes volumes for persisting data, so even if you stop a service, it's data will be persisted in a volume for later usage. These volumes can listed by executing <code>podman volume ls</code> and can be managed like any other podman volume.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="start-a-service">Start a Service<a href="#start-a-service" class="hash-link" aria-label="Direct link to Start a Service" title="Direct link to Start a Service">​</a></h3><p>The generic syntax for the <code>start</code> command is as follows:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">tent start </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">service name</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">## starts mysql and prompts you where necessary</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tent start mysql</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">## starts redis and mongo and prompts you where necessary</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tent start redis mongo</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="start-service-with-default-configuration">Start Service with Default Configuration<a href="#start-service-with-default-configuration" class="hash-link" aria-label="Direct link to Start Service with Default Configuration" title="Direct link to Start Service with Default Configuration">​</a></h3><p>The <code>--default</code> flag for the <code>start</code> command can be used to skip all the prompts and start a service with default configuration</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">tent start </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">service name</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> --default</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">## starts mysql with the default configuration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tent start mysql --default</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">## starts redis and mongo with default configuration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tent start redis mongo --default</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="stop-a-service">Stop a Service<a href="#stop-a-service" class="hash-link" aria-label="Direct link to Stop a Service" title="Direct link to Stop a Service">​</a></h3><p>The generic syntax for the <code>stop</code> command is as follows:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">tent stop </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">service name</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">## stops mysql and removes the container</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">## prompts you if multiple containers are found</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tent stop mysql</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">## stops all mysql containers and removes them</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tent stop mysql --all</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">## stops redis and mongo then removes the containers.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">## prompts you if multiple containers are found for any of the given services.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tent stop redis mongo</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">## stops all redis and mongo conainers and then removes them</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tent stop redis mongo --all</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="stop-all-services">Stop all Services<a href="#stop-all-services" class="hash-link" aria-label="Direct link to Stop all Services" title="Direct link to Stop all Services">​</a></h3><p>The <code>--all</code> flag for the <code>stop</code> command can be used to stop and remove all running tent containers at once</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">tent stop --all</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="running-multiple-versions">Running Multiple Versions<a href="#running-multiple-versions" class="hash-link" aria-label="Direct link to Running Multiple Versions" title="Direct link to Running Multiple Versions">​</a></h2><p>Given all the services are running inside containers, you can spin up multiple versions of the same service as long as you're keeping the port different.</p><p>Run <code>tent start mysql</code> twice; the first time, use the <code>--default</code> flag, and the second time, put <code>5.7</code> as tag and <code>3307</code> as host port.</p><p>Now, if you run <code>tent list</code>, you'll see both services running at the same time.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">+--------------+----------------+---------------+---------------+</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> CONTAINER              </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> Image               </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> PORTS          </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">+--------------+----------------+---------------+---------------+</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> tent-mysql-5.7-3307    </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> docker.io/mysql:5.7 </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3307</span><span class="token plain">-</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token number" style="color:#36acaa">3306</span><span class="token plain">/tcp </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> tent-mysql-latest-3306 </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> docker.io/mysql:5.7 </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3306</span><span class="token plain">-</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token number" style="color:#36acaa">3306</span><span class="token plain">/tcp </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">+--------------+----------------+---------------+---------------+</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="container-management">Container Management<a href="#container-management" class="hash-link" aria-label="Direct link to Container Management" title="Direct link to Container Management">​</a></h2><p>Containers started by <code>tent</code> are regular containers with some pre-set configurations. So you can use regular <code>podman</code> commands such as <code>ls</code>, <code>inspect</code>, <code>logs</code> etc on them. Although <code>tent</code> comes with a <code>list</code> command, using the <code>podman</code> commands will result in more informative results. The target of <code>tent</code> is to provide plug and play containers, not to become a full-fledged <code>podman</code> cli.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="contribution">Contribution<a href="#contribution" class="hash-link" aria-label="Direct link to Contribution" title="Direct link to Contribution">​</a></h2><p>Tent is an open-source project and contributions are more than welcomed. If you're a Go programmer do take some time to go through the source-code, see if you can improve any part of the program, the maintainer will be more than happy to co-operate. And if you like the project, don't forget to leave a star and share with other fellow developers to show your appreciation.</p>]]></content>
        <author>
            <name>fhsinchy</name>
        </author>
        <category label="tent" term="tent"/>
        <category label="hpc" term="hpc"/>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="dependency-management" term="dependency-management"/>
        <category label="linux" term="linux"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Easy Development Dependency Management With Podman and Tent]]></title>
        <id>https://podman.io/blogs/2021/02/08/new</id>
        <link href="https://podman.io/blogs/2021/02/08/new"/>
        <updated>2021-02-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tent is an open-source CLI tool for running development dependencies such as MySQL, Mongo, ElasticSearch etc inside pre-configured containers using simple one-liners. Developed using Go and the official golang bindings, tent is fast, reliable and secure. Checkout Easy Development Dependency Management With Podman and Tent to learn about the project.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://github.com/fhsinchy/tent/" target="_blank" rel="noopener noreferrer">Tent</a> is an open-source CLI tool for running development dependencies such as MySQL, Mongo, ElasticSearch etc inside pre-configured containers using simple one-liners. Developed using <a href="https://go.dev" target="_blank" rel="noopener noreferrer">Go</a> and the official <a href="https://pkg.go.dev/github.com/containers/podman/v2@v2.2.1/pkg/bindings" target="_blank" rel="noopener noreferrer">golang bindings</a>, <code>tent</code> is fast, reliable and secure. Checkout <a href="https://podman.io/blogs/2021/02/08/easy-development-dependency-management-with-podman-and-tent.html" target="_blank" rel="noopener noreferrer">Easy Development Dependency Management With Podman and Tent</a> to learn about the project.</p>]]></content>
        <author>
            <name>fhsinchy</name>
        </author>
        <category label="tent" term="tent"/>
        <category label="hpc" term="hpc"/>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="dependency-management" term="dependency-management"/>
        <category label="linux" term="linux"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[From Docker Compose to Kubernetes with Podman]]></title>
        <id>https://podman.io/blogs/2021/01/26/docker-compose-to-podman</id>
        <link href="https://podman.io/blogs/2021/01/26/docker-compose-to-podman"/>
        <updated>2021-01-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>From Docker Compose to Kubernetes with Podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>If you want to know how to use Podman v3.0 to convert Docker Compose YAML to a format that Podman recognizes, <a href="https://twitter.com/bbaude" target="_blank" rel="noopener noreferrer">Brent Baude</a> explains the "how to" in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/compose-kubernetes-podman" target="_blank" rel="noopener noreferrer">From Docker Compose to Kubernetes with Podman</a>. This functionality is now available in the upstream version of Podman if you want to take a sneak peak.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="oci" term="oci"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="docker compose" term="docker compose"/>
        <category label="compose" term="compose"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[From Docker Compose to Kubernetes with Podman]]></title>
        <id>https://podman.io/blogs/2021/01/26/new</id>
        <link href="https://podman.io/blogs/2021/01/26/new"/>
        <updated>2021-01-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[If you want to know how to use Podman v3.0 to convert Docker Compose YAML to a format that Podman recognizes, Brent Baude explains the "how to" in a recent blog post on the Red Hat Enable Sysadmin site, From Docker Compose to Kubernetes with Podman. This functionality is now available in the upstream version of Podman if you want to take a sneak peak.]]></summary>
        <content type="html"><![CDATA[<p>If you want to know how to use Podman v3.0 to convert Docker Compose YAML to a format that Podman recognizes, <a href="https://twitter.com/bbaude" target="_blank" rel="noopener noreferrer">Brent Baude</a> explains the "how to" in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/compose-kubernetes-podman" target="_blank" rel="noopener noreferrer">From Docker Compose to Kubernetes with Podman</a>. This functionality is now available in the upstream version of Podman if you want to take a sneak peak.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="oci" term="oci"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="docker compose" term="docker compose"/>
        <category label="compose" term="compose"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2021/01/23/new</id>
        <link href="https://podman.io/blogs/2021/01/23/new"/>
        <updated>2021-01-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I've run across a few posts over the past few weeks concerning Podman and have]]></summary>
        <content type="html"><![CDATA[<p>I've run across a few posts over the past few weeks concerning Podman and have
been busy getting other work done. So now I have a few moments and thought I'd add some links
to the posts. Checkout the <a href="https://podman.io/blogs/2021/01/23/podman-posts-of-interests.html" target="_blank" rel="noopener noreferrer">Podman Posts of Interest</a> for the links!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2021/01/23/podman-posts-of-interests</id>
        <link href="https://podman.io/blogs/2021/01/23/podman-posts-of-interests"/>
        <updated>2021-01-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Posts of Interest</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>A number of blog posts have flung by and I have not had a chance to get individual
link posts to them, so thought I would add a few here that have popped up recently,
links after the break!.</p><ul><li><a href="https://www.techtarget.com/contributor/Paul-Ferrill" target="_blank" rel="noopener noreferrer">Paul Ferrill</a> - <a href="https://searchservervirtualization.techtarget.com/tip/Compare-Docker-vs-Podman-for-container-management" target="_blank" rel="noopener noreferrer">Compare Docker vs. Podman for container management</a> - Compares Docker and Podman and shows the difference in security between the two.</li><li><a href="https://twitter.com/pbertera" target="_blank" rel="noopener noreferrer">Pietro Bertera</a> - <a href="https://www.redhat.com/en/blog/painless-services-implementing-serverless-rootless-podman-and-systemd" target="_blank" rel="noopener noreferrer">Painless services: implementing serverless with rootless Podman and systemd</a> - Talks about creating a service using systemd and Podman.</li><li><a href="https://twitter.com/JackOfAllTech1" target="_blank" rel="noopener noreferrer">Jack Wallen</a> - <a href="https://www.techrepublic.com/article/how-to-install-podman-on-ubuntu/" target="_blank" rel="noopener noreferrer">How to install Podman on Ubuntu</a> - As the title suggests, Jack walks you through the Podman installation process on Ubuntu.</li><li><a href="https://twitter.com/JackOfAllTech1" target="_blank" rel="noopener noreferrer">Jack Wallen</a> - <a href="https://thenewstack.io/tutorial-host-a-local-podman-image-registry/" target="_blank" rel="noopener noreferrer">Tutorial: Host a Local Podman Image Registry</a> - Jack walks you through setting up a local container image registry using Podman.</li><li><a href="https://twitter.com/baeldung" target="_blank" rel="noopener noreferrer">Baeldung</a> - <a href="https://www.baeldung.com/podman-intro" target="_blank" rel="noopener noreferrer">An Introduction to Podman</a> - This is a nice walk through Podman for someone new to the tool.</li></ul>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman&#58; Managing pods and containers in a local container runtime]]></title>
        <id>https://podman.io/blogs/2021/01/15/managing-pods</id>
        <link href="https://podman.io/blogs/2021/01/15/managing-pods"/>
        <updated>2021-01-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman<!-- -->:<!-- --> Managing pods and containers in a local container runtime</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>Podman has the ability to handle pod deployment which is a differentiator from other container runtimes. <a href="https://twitter.com/bbaude" target="_blank" rel="noopener noreferrer">Brent Baude</a> explains the how to in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://developers.redhat.com/blog/2019/01/15/podman-managing-containers-pods/" target="_blank" rel="noopener noreferrer">Podman: Managing pods and containers in a local container runtime</a>. This functionality is now available in the upstream version of Podman if you want to take a sneak peak.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="oci" term="oci"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="docker compose" term="docker compose"/>
        <category label="compose" term="compose"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman&#58; Managing pods and containers in a local container runtime]]></title>
        <id>https://podman.io/blogs/2021/01/15/new</id>
        <link href="https://podman.io/blogs/2021/01/15/new"/>
        <updated>2021-01-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman has the ability to handle pod deployment which is a differentiator from other container runtimes. Brent Baude explains the how to in a recent blog post on the Red Hat Enable Sysadmin site, Podman: Managing pods and containers in a local container runtime. This functionality is now available in the upstream version of Podman if you want to take a sneak peak.]]></summary>
        <content type="html"><![CDATA[<p>Podman has the ability to handle pod deployment which is a differentiator from other container runtimes. <a href="https://twitter.com/bbaude" target="_blank" rel="noopener noreferrer">Brent Baude</a> explains the how to in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://developers.redhat.com/blog/2019/01/15/podman-managing-containers-pods/" target="_blank" rel="noopener noreferrer">Podman: Managing pods and containers in a local container runtime</a>. This functionality is now available in the upstream version of Podman if you want to take a sneak peak.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="oci" term="oci"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="docker compose" term="docker compose"/>
        <category label="compose" term="compose"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using Podman and Docker Compose]]></title>
        <id>https://podman.io/blogs/2021/01/11/new</id>
        <link href="https://podman.io/blogs/2021/01/11/new"/>
        <updated>2021-01-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[One of the questions that the Podman development team has been hearing a lot over the past year or so is "Does Podman support Docker Compose? Up until recently, the answer was "not yet". With the soon to be released Podman v3.0, that answer changes to "NOW!" Brent Baude explains the how to in a recent blog post on the Red Hat Enable Sysadmin site, Using Podman and Docker Compose. This functionality is now available in the upstream version of Podman if you want to take a real sneak peak.]]></summary>
        <content type="html"><![CDATA[<p>One of the questions that the Podman development team has been hearing a lot over the past year or so is "Does Podman support Docker Compose? Up until recently, the answer was "not yet". With the soon to be released Podman v3.0, that answer changes to "NOW!" <a href="https://twitter.com/bbaude" target="_blank" rel="noopener noreferrer">Brent Baude</a> explains the how to in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-docker-compose" target="_blank" rel="noopener noreferrer">Using Podman and Docker Compose</a>. This functionality is now available in the upstream version of Podman if you want to take a real sneak peak.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="oci" term="oci"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="docker compose" term="docker compose"/>
        <category label="compose" term="compose"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using Podman and Docker Compose]]></title>
        <id>https://podman.io/blogs/2021/01/11/podman-compose</id>
        <link href="https://podman.io/blogs/2021/01/11/podman-compose"/>
        <updated>2021-01-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Using Podman and Docker Compose</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>One of the questions that the Podman development team has been hearing a lot over the past year or so is "Does Podman support Docker Compose? Up until recently, the answer was "not yet". With the soon to be released Podman v3.0, that answer changes to "NOW!" <a href="https://twitter.com/bbaude" target="_blank" rel="noopener noreferrer">Brent Baude</a> explains the how to in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-docker-compose" target="_blank" rel="noopener noreferrer">Using Podman and Docker Compose</a>. This functionality is now available in the upstream version of Podman if you want to take a real sneak peak.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="oci" term="oci"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="docker compose" term="docker compose"/>
        <category label="compose" term="compose"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Containers com Podman]]></title>
        <id>https://podman.io/blogs/2020/12/23/containers-com-podman</id>
        <link href="https://podman.io/blogs/2020/12/23/containers-com-podman"/>
        <updated>2020-12-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q">
Como está o seu português? Well if it's better than mine, check out Daniel Lara's <a href="https://www.youtube.com/watch?v=Jjyrhbc4QkQ&amp;t=1422s" target="_blank" rel="noopener noreferrer">video</a> on
YouTube. He walks through running Containers using Podman, creating pods, generating YAML for Kubernetes and more! Daniel uses a number of great examples, so it is pretty
easy to follow along even if your Portugese is like mine. Apreciar!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Containers com Podman]]></title>
        <id>https://podman.io/blogs/2020/12/23/new</id>
        <link href="https://podman.io/blogs/2020/12/23/new"/>
        <updated>2020-12-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Como está o seu português? Well if it's better than mine, check out Daniel Lara's video on]]></summary>
        <content type="html"><![CDATA[<p>Como está o seu português? Well if it's better than mine, check out Daniel Lara's <a href="https://www.youtube.com/watch?v=Jjyrhbc4QkQ&amp;t=1422s" target="_blank" rel="noopener noreferrer">video</a> on
YouTube. He walks through running Containers using Podman, creating pods, generating YAML for Kubernetes and more! Daniel uses a number of great examples, so it is pretty
easy to follow along even if your Portugese is like mine. Apreciar!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Container images, multi-architecture, manifests, ids, digests – what’s behind?]]></title>
        <id>https://podman.io/blogs/2020/12/22/behind-container-images</id>
        <link href="https://podman.io/blogs/2020/12/22/behind-container-images"/>
        <updated>2020-12-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q">
<a href="https://twitter.com/RobertBohne" target="_blank" rel="noopener noreferrer">Robert Bohne</a> has a nice <a href="https://www.opensourcerers.org/2020/11/16/container-images-multi-architecture-manifests-ids-digests-whats-behind/" target="_blank" rel="noopener noreferrer">post</a> on
<a href="https://www.opensourcerers.org" target="_blank" rel="noopener noreferrer">opensourcers.org</a> which talks about the basics of containers, how digests and manifests come into play,
working with and creating multi-architecture images and more! It is a really nice discussion of all the pieces and parts of a container image for someone new to the technology right through
people who are a lot more experienced, but might not know every nook and cranny.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Container images, multi-architecture, manifests, ids, digests – what’s behind?]]></title>
        <id>https://podman.io/blogs/2020/12/22/new</id>
        <link href="https://podman.io/blogs/2020/12/22/new"/>
        <updated>2020-12-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Robert Bohne has a nice post on]]></summary>
        <content type="html"><![CDATA[<p><a href="https://twitter.com/RobertBohne" target="_blank" rel="noopener noreferrer">Robert Bohne</a> has a nice <a href="https://www.opensourcerers.org/2020/11/16/container-images-multi-architecture-manifests-ids-digests-whats-behind/" target="_blank" rel="noopener noreferrer">post</a> on
<a href="https://www.opensourcerers.org" target="_blank" rel="noopener noreferrer">opensourcers.org</a> which talks about the basics of containers, how digests and manifests come into play,
working with and creating multi-architecture images and more! It is a really nice discussion of all the pieces and parts of a container image for someone new to the technology right through
people who are a lot more experienced, but might not know every nook and cranny.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman v2.2.0 Released]]></title>
        <id>https://podman.io/blogs/2020/12/14/new</id>
        <link href="https://podman.io/blogs/2020/12/14/new"/>
        <updated>2020-12-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman has gone 2.2.0!]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-has-gone-220"><a href="https://podman.io/releases/2020/12/14/podman-release-v2.2.0.html" target="_blank" rel="noopener noreferrer">Podman has gone 2.2.0!</a><a href="#podman-has-gone-220" class="hash-link" aria-label="Direct link to podman-has-gone-220" title="Direct link to podman-has-gone-220">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman API v1.0 and libpod.conf Removal Notice]]></title>
        <id>https://podman.io/blogs/2020/12/11/new</id>
        <link href="https://podman.io/blogs/2020/12/11/new"/>
        <updated>2020-12-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A Podman API v1.0 and libpod.conf Removal Notice has just been posted. The Podman v1.0 API based on the varlink library and the libpod.conf file have both been removed from upstream Podman. Please see the notice for more details.]]></summary>
        <content type="html"><![CDATA[<p>A <a href="https://podman.io/blogs/2020/12/11/remove-varlink-libpod-conf-notice.html" target="_blank" rel="noopener noreferrer">Podman API v1.0 and libpod.conf Removal Notice</a> has just been posted. The Podman v1.0 API based on the varlink library and the libpod.conf file have both been removed from upstream Podman. Please see the notice for more details.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="varlink" term="varlink"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman API v1.0 Deprecation and Removal Notice]]></title>
        <id>https://podman.io/blogs/2020/12/11/remove-varlink-libpod-conf-notice</id>
        <link href="https://podman.io/blogs/2020/12/11/remove-varlink-libpod-conf-notice"/>
        <updated>2020-12-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman API v1.0 and libpod.conf Removal Notice</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>On August 1, 2020, the Podman team posted a <a href="https://podman.io/blogs/2020/08/01/deprecate-and-remove-varlink-notice.html" target="_blank" rel="noopener noreferrer">Podman API v1.0 Deprecation and Removal notice</a>. As noted in that document, the Podman API v1.0 relied on the <a href="https://github.com/varlink/libvarlink" target="_blank" rel="noopener noreferrer">varlink library</a> to handle the underlying client/server calls from the Podman client to the host where the Podman service was running. The support for the varlink library was greatly reduced in the spring of 2020. This led the Podman team to investigate the use of other client/server technologies and it was decided to develop a RESTful API for Podman using the native Go libraries.</p><p>This new Podman v2.0 RESTful API was released along with Podman v2.0 in June of 2020 and replaces the Podman API v1.0. As of that time the Podman API v1.0 for Podman was considered to be deprecated. The Podman team noted that the Podman v1.0 (varlink) API would be removed from the Podman project in a future release and that a one month notice would be sent to the community before the version of Podman without the v1.0 API was released. This note represents that notice.</p><p>The Podman API v1.0 was just recently <a href="https://github.com/containers/podman/pull/8400" target="_blank" rel="noopener noreferrer">removed</a> from the upstream repository on <a href="https://github.com/containers/podman" target="_blank" rel="noopener noreferrer">GitHub</a> as work has started on the next release of Podman, v3.0. Podman v3.0 is expected to be released on Fedora 33 in late January 2021 and then later next year in RHEL 8.4 and other distributions.</p><p>At the same time as the removal of the Podman v1.0 API, the <code>libpod.conf</code> file has also been removed and it too will no longer be included with Podman starting in Podman v3.0. The functionality of this file has been replaced by <a href="https://github.com/containers/common/blob/main/docs/containers.conf.5.md" target="_blank" rel="noopener noreferrer">containers.conf</a>. If there have been modifications made to the <code>libpod.conf</code> file in your environment, you should be able to make the same changes in <code>containers.conf</code> and they will be honored.</p><p>If you have any questions or concerns about this notification, please send a note to the Podman <a href="https://lists.podman.io/admin/lists/podman.lists.podman.io/" target="_blank" rel="noopener noreferrer">mailing list</a> or create an issue on Podman’s <a href="https://github.com/containers/podman/issues" target="_blank" rel="noopener noreferrer">GitHub</a> repository.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="github" term="github"/>
        <category label="varlink" term="varlink"/>
        <category label="rest-api" term="rest-api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using Podman and systemd to manage container lifecycle]]></title>
        <id>https://podman.io/blogs/2020/12/09/new</id>
        <link href="https://podman.io/blogs/2020/12/09/new"/>
        <updated>2020-12-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Ed Haynes has put together a demo of using Podman and systemd to manage a container lifecycle that's available]]></summary>
        <content type="html"><![CDATA[<p>Ed Haynes has put together a demo of using Podman and systemd to manage a container lifecycle that's available
on GitHub. He's written up a <a href="https://podman.io/blogs/2020/12/09/podman-systemd-demo.html" target="_blank" rel="noopener noreferrer">post</a> that does a nice
job of walking through setting up the demo and running it.</p>]]></content>
        <author>
            <name>ehaynes</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using Podman and systemd to manage container lifecycle]]></title>
        <id>https://podman.io/blogs/2020/12/09/podman-systemd-demo</id>
        <link href="https://podman.io/blogs/2020/12/09/podman-systemd-demo"/>
        <updated>2020-12-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Using Podman and systemd to manage container lifecycle</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-ed-haynes-github">By Ed Haynes <a href="https://github.com/ehaynes" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-ed-haynes-github" class="hash-link" aria-label="Direct link to by-ed-haynes-github" title="Direct link to by-ed-haynes-github">​</a></h2><p>My background is in industrial automation, and in most cases, the edge devices in the factory are too underpowered to run Kubernetes as a method to manage the lifecycle of containers. The workloads have a very long lifecycle, and generally are "tied" to the edge device. There is a lot of value in containerizing applications on these edge devices, however, as it decouples the application dependencies from the OS and provides a level of isolation between applications. This demo will show how using Podman in conjunction with systemd provides an elegant solution for this sort of use case. In addition, this will be done as a "rootless" user - a key benefit of Podman that helps keep the device secure.</p><p>For my demo, I used a minimal Fedora33 install with Podman installed. To simplify my lifecycle (which in industrial can be 10+ years) I want to keep the base OS as minimal and clean as possible and keep all application dependencies in the containers. I will be creating a redis in-memory keystore database as my containerized application and use the "podman generate systemd" utility to generate the systemd unit file. This file lets systemd know what your policies are for your application - whether it should start at boot or restart when it fails. In my case I want my application available at boot and also want it to restart in case of failure. I enable and start the systemd service with the --user flag, again I don't want root access for security reasons on this device.</p><p>I provide a test script to test the redis container API. While I could have installed the redis-cli on my base Fedora33 OS to do this testing this would violate my desire to keep the base OS as minimal as possible. I pass values to the redis container's port via "nc" to set a key index of "frog" to 56. I then show via getting that index that the value is properly set. Now for the interesting part. I use pkill to kill the redis database and then show how systemd restarts the failed container. You can also reboot the OS and find your application running at startup.</p><p>To tidy things up I provide a cleanup script which stops the service and cleans up the container so you can start the demo from the top if you like.</p><p>To run this demo yourself (I've tested on Fedora33, Red Hat 8.3, and Ubuntu 20.10) ensure Podman and git are installed on your OS</p><p>Also remember this is all done as a standard user - no root!</p><p>git clone <a href="https://github.com/edhaynes/podman_systemd_usermode_demo.git" target="_blank" rel="noopener noreferrer">https://github.com/edhaynes/podman_systemd_usermode_demo.git</a></p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">cd podman_systemd_usermode_demo</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">./launch_redis_container.sh</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>"launch_redis_container.sh" launches redis container, adds usermode systemd entry, enables and starts it. You will need to hit "q" to get out of the shown status.</p><p>You should see something like:</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">redis_server.service - Podman container-redis_ Loaded: loaded</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> Active: active (running) since Wed 2020-12-09 09:22:40 EST; 1h 58min ago</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now that redis is running you can run the test script that sets a key value, retrieves it, and then kills the redis container. systemd will then restart the container and you can see all is working again. Do this with:</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">./test_redis_container.sh</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Once you are done experimenting with it you can run the cleanup script to stop the systemd service, remove it and stop / remove the container.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">./cleanup.sh</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Hope you enjoyed this demo and any comments or suggestions please make them in the <a href="https://github.com/edhaynes/podman_systemd_usermode_demo.git" target="_blank" rel="noopener noreferrer">GitHub</a> repository.</p>]]></content>
        <author>
            <name>ehaynes</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="linux" term="linux"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2020/12/07/new</id>
        <link href="https://podman.io/blogs/2020/12/07/new"/>
        <updated>2020-12-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I've run across a number of posts over the past few weeks concerning Podman and have]]></summary>
        <content type="html"><![CDATA[<p>I've run across a number of posts over the past few weeks concerning Podman and have
been busy getting other work done. So now I have a few moments and thought I'd add some links
to the posts. Checkout the <a href="https://podman.io/blogs/2020/12/07/podman-posts-of-interests.html" target="_blank" rel="noopener noreferrer">Podman Posts of Interest</a> for the links!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2020/12/07/podman-posts-of-interests</id>
        <link href="https://podman.io/blogs/2020/12/07/podman-posts-of-interests"/>
        <updated>2020-12-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Posts of Interest</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>A number of blog posts have flung by and I have not had a chance to get individual
link posts to them, so thought I would add a few here that have popped up recently,
links after the break!.</p><ul><li>mkdev - (Video) <a href="https://www.youtube.com/watch?v=aViKsSEGwOc&amp;feature=emb_logo" target="_blank" rel="noopener noreferrer">Buildah, Dive, Skopeo: 3 Container Tools for building images on Kubernetes Cluster, with Gitlab CI</a> - A video showing how these tools can be lightweight replacements for Docker.</li><li>Scott McCarty - <a href="https://www.redhat.com/en/blog/updates-container-tools-red-hat-enterprise-linux-83" target="_blank" rel="noopener noreferrer">Updates to Container Tools in Red Hat Enterprise Linux 8.3</a> - Our own <a href="https://twitter.com/fatherlinux" target="_blank" rel="noopener noreferrer">Scott McCarty</a> previews the new container capabilities in Red Hat Enterprise Linux 8.3.</li><li>Anais Urlichs - <a href="https://codefresh.io/devops/docker-images-without-docker-practical-guide/" target="_blank" rel="noopener noreferrer">Docker Images Without Docker — A Practical Guide</a> - <a href="https://codefresh.io/author/anais-codefresh/" target="_blank" rel="noopener noreferrer">Anais</a> Talks about how the Docker Daemon runs as root, why that's a problem, and how Buildah and Podman avoids that.</li><li>hostnextra.com site - <a href="https://www.hostnextra.com/kb/easy-to-install-podman-on-ubuntu-20-04/" target="_blank" rel="noopener noreferrer">Easy to Install Podman on Ubuntu 20.04</a> - Like the title says, how to easily install Podman on Ubuntu 20.04.</li><li>Prakhar Sethi - <a href="https://developers.redhat.com/blog/2020/09/25/rootless-containers-with-podman-the-basics/" target="_blank" rel="noopener noreferrer">Rootless containers with Podman: The basics</a> - Prakhar introduces rootless containers with Podman.</li><li>Damian Velazquez Cafaro - <a href="https://caylent.com/spotlight-on-podman" target="_blank" rel="noopener noreferrer">A Spotlight on Podman</a> - Damian provides a nice overview on Podman.</li><li>Cedric Clyburn - <a href="https://developers.redhat.com/blog/2020/11/19/transitioning-from-docker-to-podman/?utm_campaign=VSHNtimer&amp;utm_content=147487702&amp;utm_medium=social&amp;utm_source=twitter&amp;hss_channel=tw-2851142013" target="_blank" rel="noopener noreferrer">Transitioning from Docker to Podman</a> - <a href="https://developers.redhat.com/blog/author/cclyburn/" target="_blank" rel="noopener noreferrer">Cedric</a> gives a nice overview of Podman and how you can transition to it from Docker.</li><li>Hervé Beraud - <a href="https://herve.beraud.io/openstack/oslo.messaging/podman/rabbitmq/2020/12/04/using-podman-to-run-openstack-oslo-messaging-simulator.html" target="_blank" rel="noopener noreferrer">Using Podman to run OpenStack OSLO.Messaging's Simulator</a>- <a href="https://herve.beraud.io/" target="_blank" rel="noopener noreferrer">Hervé</a> shows you how to run the simulator using Podman!</li></ul>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Container image short names in Podman]]></title>
        <id>https://podman.io/blogs/2020/12/01/new</id>
        <link href="https://podman.io/blogs/2020/12/01/new"/>
        <updated>2020-12-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Do you like you container names to be short, sweet and yet secure? Valentin Rothberg shows you how in a recent blog post on the Red Hat Enable Sysadmin site, Container image short names in Podman. This functionality is now available in the upstream version of Podman and is targeted for Podman v3.0.]]></summary>
        <content type="html"><![CDATA[<p>Do you like you container names to be short, sweet and yet secure? <a href="https://twitter.com/vlntnrthbrg" target="_blank" rel="noopener noreferrer">Valentin Rothberg</a> shows you how in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/container-image-short-names" target="_blank" rel="noopener noreferrer">Container image short names in Podman</a>. This functionality is now available in the upstream version of Podman and is targeted for Podman v3.0.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Container image short names in Podman]]></title>
        <id>https://podman.io/blogs/2020/12/01/short-container-names</id>
        <link href="https://podman.io/blogs/2020/12/01/short-container-names"/>
        <updated>2020-12-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Container image short names in Podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Do you like you container names to be short, sweet and yet secure? <a href="https://twitter.com/vlntnrthbrg" target="_blank" rel="noopener noreferrer">Valentin Rothberg</a> shows you how in a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/container-image-short-names" target="_blank" rel="noopener noreferrer">Container image short names in Podman</a>. This functionality is now available in the upstream version of Podman and is targeted for Podman v3.0.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The history of an API&#58; GitLab Runner and Podman]]></title>
        <id>https://podman.io/blogs/2020/11/13/gitlab-runner-and-podman</id>
        <link href="https://podman.io/blogs/2020/11/13/gitlab-runner-and-podman"/>
        <updated>2020-11-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>The history of an API<!-- -->:<!-- --> GitLab Runner and Podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>In a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/history-api" target="_blank" rel="noopener noreferrer">The history of an API: GitLab Runner and Podman</a>, Pablo Greco from the CentOS QA team in Buenos Aires, Argentia documented his journey through a Podman and GitLab Runner integration. When Podman v2.2 arrives, GitLab Runner will be able to run with Podman right out of the box. Give the article a read to see how he got there.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="GitLab" term="GitLab"/>
        <category label="Runner" term="Runner"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The history of an API&#58; GitLab Runner and Podman]]></title>
        <id>https://podman.io/blogs/2020/11/13/new</id>
        <link href="https://podman.io/blogs/2020/11/13/new"/>
        <updated>2020-11-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In a recent blog post on the Red Hat Enable Sysadmin site, The history of an API: GitLab Runner and Podman, Pablo Greco from the CentOS QA team in Buenos Aires, Argentia documented his journey through a Podman and GitLab Runner integration. When Podman v2.2 arrives, GitLab Runner will be able to run with Podman right out of the box. Give the article a read to see how he got there.]]></summary>
        <content type="html"><![CDATA[<p>In a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/history-api" target="_blank" rel="noopener noreferrer">The history of an API: GitLab Runner and Podman</a>, Pablo Greco from the CentOS QA team in Buenos Aires, Argentia documented his journey through a Podman and GitLab Runner integration. When Podman v2.2 arrives, GitLab Runner will be able to run with Podman right out of the box. Give the article a read to see how he got there.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="GitLab" term="GitLab"/>
        <category label="Runner" term="Runner"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Exploring Podman RESTful API using Python and Bash]]></title>
        <id>https://podman.io/blogs/2020/10/17/expoloring-restful-api</id>
        <link href="https://podman.io/blogs/2020/10/17/expoloring-restful-api"/>
        <updated>2020-10-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Exploring Podman RESTful API using Python and Bash</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-jhon-honce-github">By Jhon Honce <a href="https://github.com/jwhonce" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-jhon-honce-github" class="hash-link" aria-label="Direct link to by-jhon-honce-github" title="Direct link to by-jhon-honce-github">​</a></h2><p>In a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-python-bash" target="_blank" rel="noopener noreferrer">Exploring Podman RESTful API using Python and Bash</a>, Jhon Honce nicely demonstrates the new Podman REST API using code examples in Python and shell commands. Additional notes are included in the code comments. The provided code was written to be clear vs. production quality.</p>]]></content>
        <author>
            <name>jwhonce</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="restful" term="restful"/>
        <category label="REST" term="REST"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Exploring Podman RESTful API using Python and Bash]]></title>
        <id>https://podman.io/blogs/2020/10/17/new</id>
        <link href="https://podman.io/blogs/2020/10/17/new"/>
        <updated>2020-10-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In a recent blog post on the Red Hat Enable Sysadmin site, Exploring Podman RESTful API using Python and Bash, Jhon Honce nicely demonstrates the new Podman REST API using code examples in Python and shell commands. Additional notes are included in the code comments. The provided code was written to be clear vs. production quality.]]></summary>
        <content type="html"><![CDATA[<p>In a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-python-bash" target="_blank" rel="noopener noreferrer">Exploring Podman RESTful API using Python and Bash</a>, Jhon Honce nicely demonstrates the new Podman REST API using code examples in Python and shell commands. Additional notes are included in the code comments. The provided code was written to be clear vs. production quality.</p>]]></content>
        <author>
            <name>jwhonce</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
        <category label="restful" term="restful"/>
        <category label="REST" term="REST"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman v2.1.0 Released]]></title>
        <id>https://podman.io/blogs/2020/10/05/new</id>
        <link href="https://podman.io/blogs/2020/10/05/new"/>
        <updated>2020-10-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman has gone 2.1.0!]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-has-gone-210"><a href="https://podman.io/releases/2020/10/05/podman-release-v2.1.0.html" target="_blank" rel="noopener noreferrer">Podman has gone 2.1.0!</a><a href="#podman-has-gone-210" class="hash-link" aria-label="Direct link to podman-has-gone-210" title="Direct link to podman-has-gone-210">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Community Meeting - October 6, 2020]]></title>
        <id>https://podman.io/blogs/2020/09/30/Oct-6-Agenda</id>
        <link href="https://podman.io/blogs/2020/09/30/Oct-6-Agenda"/>
        <updated>2020-09-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Community Meeting - October 6, 2020</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>The first Podman Community Meeting is coming up at 11:00 a.m. Eastern on
October 6th, 2020. We plan to hold the meeting on Bluejeans and will be
holding them going forward on the first Tuesday of every month.
All are welcome and it's free of charge! The agenda after the break and
hope to see a lot of you there.</p><p>Podman Community Meeting Agenda
Tuesday October 6, 2020
11:00 a.m. to 12:p.m. Eastern (UTC−04:00)
Bluejeans: <a href="https://bluejeans.com/796412039" target="_blank" rel="noopener noreferrer">https://bluejeans.com/796412039</a>
(If you have trouble connecting, please reach out in IRC libera.chat #podman)</p><table><thead><tr><th>Agenda:</th><th></th></tr></thead><tbody><tr><td>11:00 to 11:05</td><td>Welcoming Remarks</td></tr><tr><td>11:10 to 11:20</td><td>Introductions - All Attendees</td></tr><tr><td>11:20 to 11:30</td><td>Upcoming Podman Release Features and Schedule - Matt Heon</td></tr><tr><td>11:30 to 11:40</td><td>Podman 3.0 Planning - Dan Walsh</td></tr><tr><td>11:40 to 12:00</td><td>Open Forum/Questions and Answers Session</td></tr></tbody></table><p>Next Meeting: Tuesday November 3, 2020 11:00 a.m. Eastern (UTC-04:00)</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="bindings" term="bindings"/>
        <category label="go" term="go"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Community Meeting - October 6, 2020]]></title>
        <id>https://podman.io/blogs/2020/09/30/new</id>
        <link href="https://podman.io/blogs/2020/09/30/new"/>
        <updated>2020-09-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The first Podman Community meeting will be on Tuesday]]></summary>
        <content type="html"><![CDATA[<p>The first Podman Community meeting will be on Tuesday
October 6 at 11:00 a.m. Eastern. It will be a video conference
using BlueJeans and all of the details are on this
<a href="https://podman.io/blogs/2020/09/30/Oct-6-Agenda.html" target="_blank" rel="noopener noreferrer">post</a>.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="api" term="api"/>
        <category label="v2" term="v2"/>
        <category label="go" term="go"/>
        <category label="images" term="images"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[DevConf US 2020 Containers Technologies Talk]]></title>
        <id>https://podman.io/blogs/2020/09/28/devconf-ctr-tech</id>
        <link href="https://podman.io/blogs/2020/09/28/devconf-ctr-tech"/>
        <updated>2020-09-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>DevConf US 2020 Containers Technologies Talk</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>In case you missed <a href="https://github.com/kedark3" target="_blank" rel="noopener noreferrer">Kedar Kulkarni's</a> excellent talk at <a href="https://www.devconf.info/us/" target="_blank" rel="noopener noreferrer">DevConf.US 2020</a>, "Docker, Podman, Buildah, Skopeo, and what else?", check out the <a href="https://www.youtube.com/watch?v=5g2F0vSWY3U&amp;feature=youtu.be" target="_blank" rel="noopener noreferrer">video</a> on YouTube. There were also a number of other interesting talks at DevConf.US 2020 that you might be interested in, you'll be able to find links to the talks at the DevConf.US site above.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[DevConf US 2020 Containers Technologies Talk]]></title>
        <id>https://podman.io/blogs/2020/09/28/new</id>
        <link href="https://podman.io/blogs/2020/09/28/new"/>
        <updated>2020-09-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[By Tom Sweeney GitHub]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>In case you missed <a href="https://github.com/kedark3" target="_blank" rel="noopener noreferrer">Kedar Kulkarni's</a> excellent talk at <a href="https://www.devconf.info/us/" target="_blank" rel="noopener noreferrer">DevConf.US 2020</a>, "Docker, Podman, Buildah, Skopeo, and what else?", check out the <a href="https://www.youtube.com/watch?v=5g2F0vSWY3U&amp;feature=youtu.be" target="_blank" rel="noopener noreferrer">video</a> on YouTube. There were also a number of other interesting talks at DevConf.US 2020 that you might be interested in, you'll be able to find links to the talks at the DevConf.US site above.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Security Announcement]]></title>
        <id>https://podman.io/blogs/2020/09/22/security</id>
        <link href="https://podman.io/blogs/2020/09/22/security"/>
        <updated>2020-09-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Security Issue</h1><p>Today, we're releasing updates to fix <a href="https://access.redhat.com/security/cve/cve-2020-14370" target="_blank" rel="noopener noreferrer">CVE-2020-14370</a>, a security issue in Podman. This is a medium-severity information disclosure vulnerability that affects containers created using Podman’s Varlink API or the Docker-compatible version of its REST API. If two or more containers are created using these APIs, and the first container had environment variables added to it when it was created, all subsequent containers created using the Varlink or Docker-compatible REST APIs will also have these environment variables added. This effect does not persist after restarting the Podman API service.</p><p>Podman v2.0.5 and higher contain a fix for the CVE. If you use either of these APIs, please update to Podman v2.0.5 or later. We will also be patching the long-term support v1.6.4 release used in RHEL and CentOS.</p>]]></content>
        <author>
            <name>mheon</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="security" term="security"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2020/09/18/multi-blog-posts</id>
        <link href="https://podman.io/blogs/2020/09/18/multi-blog-posts"/>
        <updated>2020-09-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Posts of Interest</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><ul><li>Brian Smith - <a href="https://www.redhat.com/sysadmin/rootless-containers-podman" target="_blank" rel="noopener noreferrer">Rootless containers using Podman</a> - Watch this two-part video series on understanding root inside and outside of containers and how user namespaces work.</li><li>Jack Wallen - <a href="https://www.techrepublic.com/article/how-to-install-podman-support-in-cockpit/" target="_blank" rel="noopener noreferrer">How to install Podman support in Cockpit</a> - Learn how to add Cockpit support to manage images and containers.</li><li>Dan Walsh - <a href="https://www.redhat.com/sysadmin/selinux-kata-containers?sc_cid=701f2000000txokAAA&amp;utm_source=bambu&amp;utm_medium=social&amp;utm_campaign=abm" target="_blank" rel="noopener noreferrer">SELinux changes for KVM-separated (Kata) containers</a> - Understanding SELinux types that improve security in container engines such as Podman and CRI-O.</li><li>Brian Smith - <a href="https://www.redhat.com/sysadmin/container-vulnerabilities-openscap" target="_blank" rel="noopener noreferrer">Scanning containers for vulnerabilities with OpenSCAP and Podman</a> - Containers are no more secure than physical machines. Find out how to scan yours for vulnerabilities.</li><li>Brian Smith - (Video)<a href="https://www.youtube.com/watch?v=AGkM2jGT61Y" target="_blank" rel="noopener noreferrer">Managing Containers in Podman with systemd Unit Files</a></li><li>Mrivik - (asciinema)<a href="https://asciinema.org/a/FKU4CaX96MgnlZQ8aTBBMPIv2" target="_blank" rel="noopener noreferrer">GIMP working on rootless Podman container</a></li></ul>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Posts of Interest]]></title>
        <id>https://podman.io/blogs/2020/09/18/new</id>
        <link href="https://podman.io/blogs/2020/09/18/new"/>
        <updated>2020-09-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I've run across a number of posts over the past few weeks concerning Podman and have]]></summary>
        <content type="html"><![CDATA[<p>I've run across a number of posts over the past few weeks concerning Podman and have
been busy getting other work done. So now I have a few moments and thought I'd add some links
to the posts. Enjoy!</p><ul><li>Brian Smith - <a href="https://www.redhat.com/sysadmin/rootless-containers-podman" target="_blank" rel="noopener noreferrer">Rootless containers using Podman</a> - Watch this two-part video series on understanding root inside and outside of containers and how user namespaces work.</li><li>Jack Wallen - <a href="https://www.techrepublic.com/article/how-to-install-podman-support-in-cockpit/" target="_blank" rel="noopener noreferrer">How to install Podman support in Cockpit</a> - Learn how to add Cockpit support to manage images and containers.</li><li>Dan Walsh - <a href="https://www.redhat.com/sysadmin/selinux-kata-containers?sc_cid=701f2000000txokAAA&amp;utm_source=bambu&amp;utm_medium=social&amp;utm_campaign=abm" target="_blank" rel="noopener noreferrer">SELinux changes for KVM-separated (Kata) containers</a> - Understanding SELinux types that improve security in container engines such as Podman and CRI-O.</li><li>Brian Smith - <a href="https://www.redhat.com/sysadmin/container-vulnerabilities-openscap" target="_blank" rel="noopener noreferrer">Scanning containers for vulnerabilities with OpenSCAP and Podman</a> - Containers are no more secure than physical machines. Find out how to scan yours for vulnerabilities.</li><li>Brian Smith - (Video)<a href="https://www.youtube.com/watch?v=AGkM2jGT61Y" target="_blank" rel="noopener noreferrer">Managing Containers in Podman with systemd Unit Files</a></li><li>Mrivik - (asciinema)<a href="https://asciinema.org/a/FKU4CaX96MgnlZQ8aTBBMPIv2" target="_blank" rel="noopener noreferrer">GIMP working on rootless Podman container</a></li></ul>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman remote clients for macOS and Windows]]></title>
        <id>https://podman.io/blogs/2020/09/02/new</id>
        <link href="https://podman.io/blogs/2020/09/02/new"/>
        <updated>2020-09-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In a recent blog post on the Red Hat Enable Sysadmin site, Podman remote clients for macOS and Windows, Brent Baude and Ashley Cui walk you through setting up a remote client on either Windows or macOS to let you manage your containers and images on your Linux backend. The post covers installation, ssh setup, creating the initial connection and finally how to use the client. Give it a quick look!]]></summary>
        <content type="html"><![CDATA[<p>In a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-clients-macos-windows" target="_blank" rel="noopener noreferrer">Podman remote clients for macOS and Windows</a>, Brent Baude and <a href="https://twitter.com/cuicodes" target="_blank" rel="noopener noreferrer">Ashley Cui</a> walk you through setting up a remote client on either Windows or macOS to let you manage your containers and images on your Linux backend. The post covers installation, ssh setup, creating the initial connection and finally how to use the client. Give it a quick look!</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman remote clients for macOS and Windows]]></title>
        <id>https://podman.io/blogs/2020/09/02/running_windows_or_mac</id>
        <link href="https://podman.io/blogs/2020/09/02/running_windows_or_mac"/>
        <updated>2020-09-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman remote clients for macOS and Windows</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>In a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-clients-macos-windows" target="_blank" rel="noopener noreferrer">Podman remote clients for macOS and Windows</a>, Brent Baude and <a href="https://twitter.com/cuicodes" target="_blank" rel="noopener noreferrer">Ashley Cui</a> walk you through setting up a remote client on either Windows or macOS to let you manage your containers and images on your Linux backend. The post covers installation, ssh setup, creating the initial connection and finally how to use the client. Give it a quick look!</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="windows" term="windows"/>
        <category label="mac" term="mac"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The podman play kube command now supports deployments]]></title>
        <id>https://podman.io/blogs/2020/08/31/new</id>
        <link href="https://podman.io/blogs/2020/08/31/new"/>
        <updated>2020-08-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In a recent blog post on the Red Hat Enable Sysadmin site, The podman play kube command now supports deployments, you can now learn all about the recent features added to Podman to interact with Kubernetes objects. The podman generate kube command allows you to export your existing containers into Kubernetes Pod YAML. This YAML can then be imported into OpenShift or a Kubernetes cluster. The podman play kube does the opposite, it allows you to take a Kubernetes YAML and run it in Podman. Learn all of the details and more in the blog post!]]></summary>
        <content type="html"><![CDATA[<p>In a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-play-kube" target="_blank" rel="noopener noreferrer">The podman play kube command now supports deployments</a>, you can now learn all about the recent features added to Podman to interact with Kubernetes objects. The <code>podman generate kube</code> command allows you to export your existing containers into Kubernetes Pod YAML. This YAML can then be imported into OpenShift or a Kubernetes cluster. The <code>podman play kube</code> does the opposite, it allows you to take a Kubernetes YAML and run it in Podman. Learn all of the details and more in the blog post!</p>]]></content>
        <author>
            <name>mheon</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The podman play kube command now supports deployments]]></title>
        <id>https://podman.io/blogs/2020/08/31/podman-and-kubernetes</id>
        <link href="https://podman.io/blogs/2020/08/31/podman-and-kubernetes"/>
        <updated>2020-08-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>The podman play kube command now supports deployments</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-matthew-heon-github">By Matthew Heon <a href="https://github.com/mheon" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-matthew-heon-github" class="hash-link" aria-label="Direct link to by-matthew-heon-github" title="Direct link to by-matthew-heon-github">​</a></h2><p>In a recent blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/podman-play-kube" target="_blank" rel="noopener noreferrer">The podman play kube command now supports deployments</a>, you can now learn all about the recent features added to Podman to interact with Kubernetes objects. The <code>podman generate kube</code> command allows you to export your existing containers into Kubernetes Pod YAML. This YAML can then be imported into OpenShift or a Kubernetes cluster. The <code>podman play kube</code> does the opposite, it allows you to take a Kubernetes YAML and run it in Podman. Learn all of the details and more in the blog post!</p>]]></content>
        <author>
            <name>mheon</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="github" term="github"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="kube" term="kube"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tick-tock.  Does your container know what time it is?]]></title>
        <id>https://podman.io/blogs/2020/08/24/container-time</id>
        <link href="https://podman.io/blogs/2020/08/24/container-time"/>
        <updated>2020-08-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Tick-tock. Does your container know what time it is?</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p><a href="https://twitter.com/cuicodes" target="_blank" rel="noopener noreferrer">Ashley Cui</a> recently joined our team at Red Hat and just wrote her first ever blog post that is now on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site <a href="https://www.redhat.com/sysadmin/tick-tock-container-time" target="_blank" rel="noopener noreferrer">Tick-tock. Does your container know what time it is?</a>. In this timely post, Ashley walks you through setting the timezone within a container using the <code>--tz</code> option. Just prior to this posting, I had answered a very similar question for someone. This is a really good and quick blog, and I'm sure the first of many for Ashley.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="github" term="github"/>
        <category label="rename" term="rename"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tick-tock.  Does your container know what time it is?]]></title>
        <id>https://podman.io/blogs/2020/08/24/new</id>
        <link href="https://podman.io/blogs/2020/08/24/new"/>
        <updated>2020-08-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Ashley Cui recently joined our team at Red Hat and just wrote her first ever blog post that is now on the Red Hat Enable Sysadmin site Tick-tock. Does your container know what time it is?. In this timely post, Ashley walks you through setting the timezone within a container using the --tz option. Just prior to this posting, I had answered a very similar question for someone. This is a really good and quick blog, and I'm sure the first of many for Ashley.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://twitter.com/cuicodes" target="_blank" rel="noopener noreferrer">Ashley Cui</a> recently joined our team at Red Hat and just wrote her first ever blog post that is now on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site <a href="https://www.redhat.com/sysadmin/tick-tock-container-time" target="_blank" rel="noopener noreferrer">Tick-tock. Does your container know what time it is?</a>. In this timely post, Ashley walks you through setting the timezone within a container using the <code>--tz</code> option. Just prior to this posting, I had answered a very similar question for someone. This is a really good and quick blog, and I'm sure the first of many for Ashley.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Container video series&#58; Rootless containers, process separation, and OpenSCAP]]></title>
        <id>https://podman.io/blogs/2020/08/21/new</id>
        <link href="https://podman.io/blogs/2020/08/21/new"/>
        <updated>2020-08-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Do you want to know more about Rootless containers, process separation, and OpenSCAP? If you're like many, a video is a better learning device than a blog post. Well you're in luck, Brian Smith just landed a blog post on the Red Hat Enable Sysadmin site Container video series: Rootless containers, process separation, and OpenSCAP with a number of blog posts on the subject, many featuring Podman.]]></summary>
        <content type="html"><![CDATA[<p>Do you want to know more about Rootless containers, process separation, and OpenSCAP? If you're like many, a video is a better learning device than a blog post. Well you're in luck, <a href="https://www.redhat.com/sysadmin/users/briasmit" target="_blank" rel="noopener noreferrer">Brian Smith</a> just landed a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site <a href="https://www.redhat.com/sysadmin/container-video-series" target="_blank" rel="noopener noreferrer">Container video series: Rootless containers, process separation, and OpenSCAP</a> with a number of blog posts on the subject, many featuring Podman.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Container video series&#58; Rootless containers, process separation, and OpenSCAP]]></title>
        <id>https://podman.io/blogs/2020/08/21/rootless-separation-openscap</id>
        <link href="https://podman.io/blogs/2020/08/21/rootless-separation-openscap"/>
        <updated>2020-08-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Container video series<!-- -->:<!-- --> Rootless containers, process separation, and OpenSCAP</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Do you want to know more about Rootless containers, process separation, and OpenSCAP? If you're like many, a video is a better learning device than a blog post. Well you're in luck, <a href="https://www.redhat.com/sysadmin/users/briasmit" target="_blank" rel="noopener noreferrer">Brian Smith</a> just landed a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site <a href="https://www.redhat.com/sysadmin/container-video-series" target="_blank" rel="noopener noreferrer">Container video series: Rootless containers, process separation, and OpenSCAP</a> with a number of blog posts on the subject, many featuring Podman.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="github" term="github"/>
        <category label="rename" term="rename"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Troubleshooting Guide]]></title>
        <id>https://podman.io/blogs/2020/08/17/work-the-problems</id>
        <link href="https://podman.io/blogs/2020/08/17/work-the-problems"/>
        <updated>2020-08-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Troubleshooting Guide</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>As a kid, I was fascinated by space flight. If I couldn't be a fireman like my father, I wanted to be an astronaut. Of course I had to have a <a href="https://www.youtube.com/watch?v=4sNoiDT0BMw&amp;list=LLTdXWmg018se8aJN4cUq6Ag&amp;index=2934" target="_blank" rel="noopener noreferrer">Major Matt Mason</a> figure so I could fly him around the house and then land him softly in a jury-rigged parachute in my wading pool. Then of course the whole Apollo 13 drama had me riveted, and when the movie came out years later, I fell in love with this line in the movie, "Let's work the problem people. Let's not make things worse by guessing." by Ed Harris who played Gene Kranz the "vested" flight director.</p><p>That's been a helpful creed for me and it's also helpful for the Podman world too. Many times the community spends a fair amount of effort answering issues and questions either in GitHub's <a href="https://github.com/containers/podman/issues" target="_blank" rel="noopener noreferrer">issues</a> or in the <a href="https://lists.podman.io/admin/lists/podman.lists.podman.io/" target="_blank" rel="noopener noreferrer">Podman Mailing List</a>. That's really great, but sometimes the discussion finds that the problem is concerning an issue that is on the <a href="https://github.com/containers/podman/blob/main/troubleshooting.md" target="_blank" rel="noopener noreferrer">Podman Troubleshooting Guide</a>. This page might be one of the least visited pages on the site, yet the most helpful, especially for people who are new to the Podman project.</p><p>The page contains a number of common issues and solutions for Podman. It can help people who are running into issues find out if the issue has been encountered before. Some of the more common ones are issues with mounts and selinux, rootless containers not being able to ping the host, rootless containers exiting with the user, and more. A lot of the items of the page are not really issues with the Podman software, but rather that required configuration steps for use cases were not completed. Along with the problem and typical error responses on this page, each one has a solution section that will walk you through the steps needed to correct the problem. As common problems are encountered along the way, the community is encouraged to add them to the troubleshooting page, keeping it a fresh source of information.</p><p>Hopefully this post will help users of Podman find and discover solutions to their problems more easily in the Podman Troubleshooting Guide. Just as importantly, it will act as a reminder for those in the community who are familiar with the page to consider adding problems and solutions that they may encounter. As we move forward, effective use of this page will help us prove Gene Kranz right in the Podman universe, "Failure is not an option".</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="github" term="github"/>
        <category label="varlink" term="varlink"/>
        <category label="rest-api" term="rest-api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Learning Red Hat's Podman (docker), Buildah, Skopeo and Quay.io]]></title>
        <id>https://podman.io/blogs/2020/08/13/new</id>
        <link href="https://podman.io/blogs/2020/08/13/new"/>
        <updated>2020-08-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Four engineers at IBM and Red Hat, JJ Asghar, Brian Tannous, Jason Dobies and Cedric Clyburn spent some time in a stream learning about Podman, Buildah, Skopeo from the ground up in this video blog post. Check out the video to get a great introduction to the tools.]]></summary>
        <content type="html"><![CDATA[<p>Four engineers at IBM and Red Hat, <a href="https://twitter.com/jjasghar" target="_blank" rel="noopener noreferrer">JJ Asghar</a>, <a href="https://twitter.com/briantannous" target="_blank" rel="noopener noreferrer">Brian Tannous</a>, <a href="https://twitter.com/jdob" target="_blank" rel="noopener noreferrer">Jason Dobies</a> and Cedric Clyburn spent some time in a stream learning about Podman, Buildah, Skopeo from the ground up in this video blog <a href="https://www.youtube.com/watch?time_continue=246&amp;v=IKGcxxjieFo&amp;feature=emb_logo" target="_blank" rel="noopener noreferrer">post</a>. Check out the video to get a great introduction to the tools.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Learning Red Hat's Podman (docker), Buildah, Skopeo and Quay.io]]></title>
        <id>https://podman.io/blogs/2020/08/13/walk-through</id>
        <link href="https://podman.io/blogs/2020/08/13/walk-through"/>
        <updated>2020-08-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Learning Red Hat's Podman (docker), Buildah, Skopeo and Quay.io</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Four engineers at IBM and Red Hat, <a href="https://twitter.com/jjasghar" target="_blank" rel="noopener noreferrer">JJ Asghar</a>, <a href="https://twitter.com/briantannous" target="_blank" rel="noopener noreferrer">Brian Tannous</a>, <a href="https://twitter.com/jdob" target="_blank" rel="noopener noreferrer">Jason Dobies</a> and Cedric Clyburn spent some time in a stream learning about Podman, Buildah, Skopeo from the ground up in this video blog <a href="https://www.youtube.com/watch?time_continue=246&amp;v=IKGcxxjieFo&amp;feature=emb_logo" target="_blank" rel="noopener noreferrer">post</a>. Check out the video to get a great introduction to the tools.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="github" term="github"/>
        <category label="rename" term="rename"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Moving from docker-compose to Podman pods]]></title>
        <id>https://podman.io/blogs/2020/08/11/migrate-from-docker-compose</id>
        <link href="https://podman.io/blogs/2020/08/11/migrate-from-docker-compose"/>
        <updated>2020-08-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Moving from docker-compose to Podman pods</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p><a href="https://twitter.com/gangrif" target="_blank" rel="noopener noreferrer">Nathan Lager</a> just landed a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site <a href="https://www.redhat.com/sysadmin/compose-podman-pods" target="_blank" rel="noopener noreferrer">Moving from docker-compose to Podman pods</a>. In the post, Nathan talks about ins and outs of the migration process.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="github" term="github"/>
        <category label="rename" term="rename"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Moving from docker-compose to Podman pods]]></title>
        <id>https://podman.io/blogs/2020/08/11/new</id>
        <link href="https://podman.io/blogs/2020/08/11/new"/>
        <updated>2020-08-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Nathan Lager just landed a blog post on the Red Hat Enable Sysadmin site Moving from docker-compose to Podman pods. In the post, Nathan talks about ins and outs of the migration process.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://twitter.com/gangrif" target="_blank" rel="noopener noreferrer">Nathan Lager</a> just landed a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site <a href="https://www.redhat.com/sysadmin/compose-podman-pods" target="_blank" rel="noopener noreferrer">Moving from docker-compose to Podman pods</a>. In the post, Nathan talks about ins and outs of the migration process.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Go bindings]]></title>
        <id>https://podman.io/blogs/2020/08/10/new</id>
        <link href="https://podman.io/blogs/2020/08/10/new"/>
        <updated>2020-08-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In the release of Podman 2.0, we removed the experimental tag from its recently]]></summary>
        <content type="html"><![CDATA[<p>In the release of Podman 2.0, we removed the experimental tag from its recently
introduced RESTful service. While it might be interesting to interact with a
RESTful server using curl, using a set of Go based bindings is probably a more
direct route to a production ready application. More details from Lokesh
Mandvekar and Parker Van Roy in this
<a href="https://podman.io/blogs/2020/08/10/podman-go-bindings.html" target="_blank" rel="noopener noreferrer">post</a>.</p>]]></content>
        <author>
            <name>lsm5</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="api" term="api"/>
        <category label="v2" term="v2"/>
        <category label="go" term="go"/>
        <category label="images" term="images"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Go bindings]]></title>
        <id>https://podman.io/blogs/2020/08/10/podman-go-bindings</id>
        <link href="https://podman.io/blogs/2020/08/10/podman-go-bindings"/>
        <updated>2020-08-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Go bindings</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-lokesh-mandvekar-github-and-parker-vanroy">By Lokesh Mandvekar <a href="https://github.com/lsm5" target="_blank" rel="noopener noreferrer">GitHub</a> and Parker VanRoy<a href="#by-lokesh-mandvekar-github-and-parker-vanroy" class="hash-link" aria-label="Direct link to by-lokesh-mandvekar-github-and-parker-vanroy" title="Direct link to by-lokesh-mandvekar-github-and-parker-vanroy">​</a></h2><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction">​</a></h2><p>In the release of Podman 2.0, we removed the experimental tag
from its recently introduced RESTful service. While it might
be interesting to interact with a RESTFul server using curl,
using a set of Go based bindings is probably a more direct
route to a production ready application. Let’s take a look
at how easily that can be accomplished.</p><p>If you haven't yet, <a href="https://golang.org/doc/install" target="_blank" rel="noopener noreferrer">install Go</a>.</p><p>Be careful to double-check that the version of golang is new
enough (i.e. <code>go version</code>), version 1.13.x or higher is
supported. If needed, Go sources and binaries can be fetched
from the <a href="https://golang.org/dl/" target="_blank" rel="noopener noreferrer">official Go website</a>.</p><p>The Podman Go bindings are a set of functions to allow
developers to execute Podman operations from within their Go
based application. The Go bindings connect to a Podman service
which can run locally or on a remote machine. You can perform
many operations including pulling and listing images, starting,
stopping or inspecting containers. Currently, the Podman
repository has bindings available for operations on images,
containers, pods, networks and manifests among others. The
bindings are available on the <a href="https://github.com/containers/podman/tree/v2.0" target="_blank" rel="noopener noreferrer">v2.0 branch in the
upstream Podman repository</a>.
You can fetch the bindings for your application using Go modules:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token builtin class-name">cd</span><span class="token plain"> </span><span class="token environment constant" style="color:#36acaa">$HOME</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">mkdir</span><span class="token plain"> example </span><span class="token operator" style="color:#393A34">&amp;&amp;</span><span class="token plain"> </span><span class="token builtin class-name">cd</span><span class="token plain"> example</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ go mod init example.com</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">go: creating new go.mod: module example.com</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ go get github.com/containers/podman/v2@v2.0.4</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">go: downloading github.com/containers/podman/v2 v2.0.4</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">go get: github.com/containers/podman/v2@v2.0.4: parsing go.mod:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    module declares its path as: github.com/containers/libpod/v2</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            but was required as: github.com/containers/podman/v2</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>This creates a new <code>go.mod</code> file in the current directory that looks as follows:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">module example.com</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">go </span><span class="token number" style="color:#36acaa">1.14</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">require github.com/containers/libpod/v2 v2.0.4 // indirect</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can also try a demo application with the Go modules created already:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone https://github.com/containers/Demos</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token builtin class-name">cd</span><span class="token plain"> Demos/podman_go_bindings</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">ls</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">README.md  go.mod  go.sum  main.go</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="how-do-i-use-them">How do I use them<a href="#how-do-i-use-them" class="hash-link" aria-label="Direct link to How do I use them" title="Direct link to How do I use them">​</a></h2><p>In this tutorial, you will learn through basic examples how to:</p><ol start="0"><li><a href="#start-service">Start the Podman system service</a></li><li><a href="#connect-service">Connect to the Podman system service</a></li><li><a href="#pull-images">Pull images</a></li><li><a href="#list-images">List images</a></li><li><a href="#create-start-container">Create and start a container from an image</a></li><li><a href="#list-containers">List containers</a></li><li><a href="#inspect-container">Inspect the container</a></li><li><a href="#stop-container">Stop the container</a></li><li><a href="#debugging-tips">Debugging tips</a></li></ol><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="start-the-podman-system-service-">Start the Podman system service <a name="start-service"></a><a href="#start-the-podman-system-service-" class="hash-link" aria-label="Direct link to start-the-podman-system-service-" title="Direct link to start-the-podman-system-service-">​</a></h3><p>The recommended way to start Podman system service in production mode
is via systemd socket-activation:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ systemctl --user start podman.socket</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>There’s no timeout specified when starting the system service via socket-activation.</p><p>For purposes of this demo, we will start the service using the Podman
command itself. If you prefer the system service to timeout after, say,
5000 seconds, you can run it like so:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> system </span><span class="token function" style="color:#d73a49">service</span><span class="token plain"> -t </span><span class="token number" style="color:#36acaa">5000</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Note that the 5000 seconds uptime is refreshed after every command is received.
If you want the service to stay up until the machine is shutdown or the process
is terminated, use <code>0</code> (zero) instead of 5000. For this demo, we will use no timeout:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># -t 0 implies no timeout, default timeout 5 seconds</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> system </span><span class="token function" style="color:#d73a49">service</span><span class="token plain"> -t </span><span class="token number" style="color:#36acaa">0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Open another terminal window and check if the Podman socket exists:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">ls</span><span class="token plain"> /run/user/</span><span class="token variable" style="color:#36acaa">${</span><span class="token variable environment constant" style="color:#36acaa">UID</span><span class="token variable" style="color:#36acaa">}</span><span class="token plain">/podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">podman.sock</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If you’re running the system service as root, podman.sock will be found in /run/podman:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">ls</span><span class="token plain"> /run/podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">podman.sock</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="connect-to-the-podman-system-service-">Connect to the Podman system service <a name="connect-service"></a><a href="#connect-to-the-podman-system-service-" class="hash-link" aria-label="Direct link to connect-to-the-podman-system-service-" title="Direct link to connect-to-the-podman-system-service-">​</a></h3><p>First, you need to create a connection that connects to the system service.
The critical piece of information for setting up a new connection is the endpoint.
The endpoint comes in the form of an URI (method:/path/to/socket). For example,
to connect to the local rootful socket the URI would be <code>unix:/run/podman/podman.sock</code>
and for a rootless user it would be <code>unix:$(XDG_RUNTIME_DIR)/podman/podman.sock</code>,
typically: <code>unix:/run/user/${UID}/podman/podman.sock</code>.</p><p>The following Go example snippet shows how to set up a connection for a rootless user.</p><div class="language-Go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-Go codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">package main</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">import (</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "context"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "fmt"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "os"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "github.com/containers/libpod/v2/libpod/define"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "github.com/containers/libpod/v2/pkg/bindings"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "github.com/containers/libpod/v2/pkg/bindings/containers"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "github.com/containers/libpod/v2/pkg/bindings/images"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "github.com/containers/libpod/v2/pkg/domain/entities"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "github.com/containers/libpod/v2/pkg/specgen"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">func main() {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt.Println("Welcome to the Podman Go bindings tutorial")</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        // Get Podman socket location</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        sock_dir := os.Getenv("XDG_RUNTIME_DIR")</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        socket := "unix:" + sock_dir + "/podman/podman.sock"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        // Connect to Podman socket</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        connText, err := bindings.NewConnection(context.Background(), socket)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if err != nil {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                fmt.Println(err)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                os.Exit(1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The <code>connText</code> variable received from the NewConnection function is of type
context.Context(). In subsequent uses of the bindings, you will use this context
to direct the bindings to your connection. This can be seen in the examples below.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="pull-an-image-">Pull an image <a name="pull-images"></a><a href="#pull-an-image-" class="hash-link" aria-label="Direct link to pull-an-image-" title="Direct link to pull-an-image-">​</a></h3><p>Next, we will pull a couple of images using the images.Pull() binding.
This binding takes three arguments: - The context variable created by the bindings.NewConnection() call in the first example - The image name - Options for image pull</p><p><strong>Append the following lines to your function:</strong></p><div class="language-Go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-Go codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">        // Pull Busybox image (Sample 1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt.Println("Pulling Busybox image...")</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        _, err = images.Pull(connText, "docker.io/busybox", entities.ImagePullOptions{})</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if err != nil {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                fmt.Println(err)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                os.Exit(1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        // Pull Fedora image (Sample 2)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        rawImage := "registry.fedoraproject.org/fedora:latest"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt.Println("Pulling Fedora image...")</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        _, err = images.Pull(connText, rawImage, entities.ImagePullOptions{})</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if err != nil {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                fmt.Println(err)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                os.Exit(1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Run it:</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ go run main.go</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Welcome to the Podman Go bindings tutorial</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Pulling Busybox image</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Pulling Fedora image</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The system service side should echo messages like so:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Trying to pull docker.io/busybox</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Getting image </span><span class="token builtin class-name">source</span><span class="token plain"> signatures</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob 61c5ed1cbdf8 </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">--------------------------------------</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain">.0b / </span><span class="token number" style="color:#36acaa">0</span><span class="token plain">.0b</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying config 018c9d7b79 </span><span class="token keyword" style="color:#00009f">done</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Writing manifest to image destination</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Storing signatures</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Trying to pull registry.fedoraproject.org/fedora:latest</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Getting image </span><span class="token builtin class-name">source</span><span class="token plain"> signatures</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob dd9f43919ba0 </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">--------------------------------------</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain">.0b / </span><span class="token number" style="color:#36acaa">0</span><span class="token plain">.0b</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying config 00ff39a8bf </span><span class="token keyword" style="color:#00009f">done</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Writing manifest to image destination</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Storing signatures</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="list-images-">List images <a name="list-images"></a><a href="#list-images-" class="hash-link" aria-label="Direct link to list-images-" title="Direct link to list-images-">​</a></h3><p>Next, we will pull an image using the images.List() binding.
This binding takes three arguments:</p><ul><li>The context variable created earlier</li><li>An optional bool 'all'</li><li>An optional map of filters</li></ul><p><strong>Append the following lines to your function:</strong></p><div class="language-Go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-Go codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">        // List images</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        imageSummary, err := images.List(connText, nil, nil)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if err != nil {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            fmt.Println(err)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            os.Exit(1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        var names []string</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        for _, i := range imageSummary {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            names = append(names, i.RepoTags...)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt.Println("Listing images...")</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt.Println(names)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Run it:</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ go run main.go</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Welcome to the Podman Go bindings tutorial</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Pulling Busybox image</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Pulling Fedora image</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Listing images</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">docker.io/library/busybox:latest registry.fedoraproject.org/fedora:latest</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="create-and-start-a-container-from-an-image-">Create and Start a Container from an Image <a name="create-start-container"></a><a href="#create-and-start-a-container-from-an-image-" class="hash-link" aria-label="Direct link to create-and-start-a-container-from-an-image-" title="Direct link to create-and-start-a-container-from-an-image-">​</a></h3><p>To create the container spec, we use specgen.NewSpecGenerator() followed by
calling containers.CreateWithSpec() to actually create a new container.
specgen.NewSpecGenerator() takes 2 arguments: - name of the image - whether it's a rootfs</p><p>containers.CreateWithSpec() takes 2 arguments: - the context created earlier - the spec created by NewSpecGenerator</p><p>Next, the container is actually started using the containers.Start() binding.
containers.Start() takes three arguments: - the context - the name or ID of the container created - an optional parameter for detach keys</p><p>After the container is started, it's a good idea to ensure the container is
in a running state before you proceed with further operations.
The containers.Wait() takes care of that.
containers.Wait() takes three arguments: - the context - the name or ID of the container created - container state (running/paused/stopped)</p><p><strong>Append the following lines to your function:</strong></p><div class="language-Go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-Go codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">        // Container create</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        s := specgen.NewSpecGenerator(rawImage, false)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        s.Terminal = true</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        r, err := containers.CreateWithSpec(connText, s)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if err != nil {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                fmt.Println(err)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                os.Exit(1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        // Container start</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt.Println("Starting Fedora container...")</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        err = containers.Start(connText, r.ID, nil)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if err != nil {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                fmt.Println(err)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                os.Exit(1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        running := define.ContainerStateRunning</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        _, err = containers.Wait(connText, r.ID, &amp;running)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if err != nil {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                fmt.Println(err)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                os.Exit(1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Run it:</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ go run main.go</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Welcome to the Podman Go bindings tutorial</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Pulling image</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Starting Fedora container</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Check if the container is running:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">ps</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">CONTAINER ID  IMAGE                                     COMMAND    CREATED                 STATUS                     PORTS   NAMES</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">665831d31e90  registry.fedoraproject.org/fedora:latest  /bin/bash  Less than a second ago  Up Less than a second ago          dazzling_mclean</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="list-containers-">List Containers <a name="list-containers"></a><a href="#list-containers-" class="hash-link" aria-label="Direct link to list-containers-" title="Direct link to list-containers-">​</a></h3><p>Containers can be listed using the containers.List() binding.
containers.List() takes seven arguments: - the context - output filters - boolean to show all containers, by default only running containers are listed - number of latest created containers, all states (running/paused/stopped) - boolean to print pod information - boolean to print rootfs size - boolean to print oci runtime and container state</p><p><strong>Append the following lines to your function:</strong></p><div class="language-Go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-Go codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">        // Container list</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        var latestContainers = 1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        containerLatestList, err := containers.List(connText, nil, nil, &amp;latestContainers, nil, nil, nil)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if err != nil {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            fmt.Println(err)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            os.Exit(1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt.Printf("Latest container is %s\n", containerLatestList[0].Names[0])</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Run it:</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ go run main.go</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Welcome to the Podman Go bindings tutorial</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Pulling Busybox image</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Pulling Fedora image</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Listing images</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">docker.io/library/busybox:latest registry.fedoraproject.org/fedora:latest</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Starting Fedora container</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Latest container is dazzling_mclean</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="inspect-container-">Inspect Container <a name="inspect-container"></a><a href="#inspect-container-" class="hash-link" aria-label="Direct link to inspect-container-" title="Direct link to inspect-container-">​</a></h3><p>Containers can be inspected using the containers.Inspect() binding.
containers.Inspect() takes 3 arguments: - context - image name or ID - optional boolean to check for container size</p><p><strong>Append the following lines to your function:</strong></p><div class="language-Go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-Go codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">        // Container inspect</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        ctrData, err := containers.Inspect(connText, r.ID, nil)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if err != nil {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                fmt.Println(err)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                os.Exit(1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt.Printf("Container uses image %s\n", ctrData.ImageName)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt.Printf("Container running status is %s\n", ctrData.State.Status)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Run it:</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ go run main.go</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Welcome to the Podman Go bindings tutorial</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Pulling Busybox image</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Pulling Fedora image</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Listing images</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">docker.io/library/busybox:latest registry.fedoraproject.org/fedora:latest</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Starting Fedora container</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Latest container is peaceful_noether</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Fedora Container uses image registry.fedoraproject.org/fedora:latest</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Fedora Container running status is running</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="stop-container-">Stop Container <a name="stop-container"></a><a href="#stop-container-" class="hash-link" aria-label="Direct link to stop-container-" title="Direct link to stop-container-">​</a></h3><p>A container can be stopped by the containers.Stop() binding.
containers.Stop() takes 3 arguments: - context - image name or ID - optional timeout</p><p><strong>Append the following lines to your function:</strong></p><div class="language-Go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-Go codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">        // Container stop</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt.Println("Stopping the container...")</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        err = containers.Stop(connText, r.ID, nil)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if err != nil {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                fmt.Println(err)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                os.Exit(1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        ctrData, err = containers.Inspect(connText, r.ID, nil)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if err != nil {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                fmt.Println(err)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                os.Exit(1)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt.Printf("Container running status is now %s\n", ctrData.State.Status)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><strong>Run it:</strong></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ go run main.go</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Welcome to the Podman Go bindings tutorial</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Pulling Busybox image</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Pulling Fedora image</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Listing images</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">docker.io/library/busybox:latest registry.fedoraproject.org/fedora:latest</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Starting Fedora container</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Latest container is peaceful_noether</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Fedora Container uses image registry.fedoraproject.org/fedora:latest</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Fedora Container running status is running</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Stopping Fedora container</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Container running status is now exited</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="debugging-tips-">Debugging tips <a name="debugging-tips"></a><a href="#debugging-tips-" class="hash-link" aria-label="Direct link to debugging-tips-" title="Direct link to debugging-tips-">​</a></h3><p>To debug in a development setup, you can start the Podman system service
in debug mode like so:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> --log-level</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">debug system </span><span class="token function" style="color:#d73a49">service</span><span class="token plain"> -t </span><span class="token number" style="color:#36acaa">0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The <code>--log-level=debug</code> echoes all the logged requests and is useful to
trace the execution path at a finer granularity. A snippet of a sample run looks like:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">INFO</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> filtering at log level debug</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Called service.PersistentPreRunE</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">podman --log-level</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">debug system </span><span class="token function" style="color:#d73a49">service</span><span class="token plain"> -t0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Ignoring libpod.conf EventsLogger setting </span><span class="token string" style="color:#e3116c">"/home/lsm5/.config/containers/containers.conf"</span><span class="token builtin class-name">.</span><span class="token plain"> Use </span><span class="token string" style="color:#e3116c">"journald"</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> you want to change this setting and remove libpod.conf files.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Reading configuration </span><span class="token function" style="color:#d73a49">file</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"/usr/share/containers/containers.conf"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Merged system config </span><span class="token string" style="color:#e3116c">"/usr/share/containers/containers.conf"</span><span class="token builtin class-name">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">Editors note: the remainder of this line was removed due to Jekyll formatting errors.</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Using conmon: </span><span class="token string" style="color:#e3116c">"/usr/bin/conmon"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Initializing boltdb state at /home/lsm5/.local/share/containers/storage/libpod/bolt_state.db</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Overriding run root </span><span class="token string" style="color:#e3116c">"/run/user/1000/containers"</span><span class="token plain"> with </span><span class="token string" style="color:#e3116c">"/run/user/1000"</span><span class="token plain"> from database</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Using graph driver overlay</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Using graph root /home/lsm5/.local/share/containers/storage</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Using run root /run/user/1000</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Using static </span><span class="token function" style="color:#d73a49">dir</span><span class="token plain"> /home/lsm5/.local/share/containers/storage/libpod</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Using tmp </span><span class="token function" style="color:#d73a49">dir</span><span class="token plain"> /run/user/1000/libpod/tmp</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Using volume path /home/lsm5/.local/share/containers/storage/volumes</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Set libpod namespace to </span><span class="token string" style="color:#e3116c">""</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Not configuring container store</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Initializing event backend </span><span class="token function" style="color:#d73a49">file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> using runtime </span><span class="token string" style="color:#e3116c">"/usr/bin/runc"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> using runtime </span><span class="token string" style="color:#e3116c">"/usr/bin/crun"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">WARN</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Error initializing configured OCI runtime kata: no valid executable found </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> OCI runtime kata: invalid argument</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> using runtime </span><span class="token string" style="color:#e3116c">"/usr/bin/crun"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">INFO</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Setting parallel job count to </span><span class="token number" style="color:#36acaa">25</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">INFO</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> filtering at log level debug</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Called service.PersistentPreRunE</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">podman --log-level</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">debug system </span><span class="token function" style="color:#d73a49">service</span><span class="token plain"> -t0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Ignoring libpod.conf EventsLogger setting </span><span class="token string" style="color:#e3116c">"/home/lsm5/.config/containers/containers.conf"</span><span class="token builtin class-name">.</span><span class="token plain"> Use </span><span class="token string" style="color:#e3116c">"journald"</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> you want to change this setting and remove libpod.conf files.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">DEBU</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">0000</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> Reading configuration </span><span class="token function" style="color:#d73a49">file</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"/usr/share/containers/containers.conf"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If the Podman system service has been started via systemd socket activation,
you can view the logs using journalctl. The logs after a sample run look like so:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ journalctl --user --no-pager -u podman.socket</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">-- Reboot --</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:40 nagato.nanadai.me systemd</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1048</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: Listening on Podman API Socket.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ journalctl --user --no-pager -u podman.service</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:53 nagato.nanadai.me systemd</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1048</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: Starting Podman API Service</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:54 nagato.nanadai.me podman</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1527</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: </span><span class="token assign-left variable" style="color:#36acaa">time</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"2020-07-22T13:50:54-04:00"</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">level</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">error </span><span class="token assign-left variable" style="color:#36acaa">msg</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Error refreshing volume 38480630a8bdaa3e1a0ebd34c94038591b0d7ad994b37be5b4f2072bb6ef0879: error acquiring lock 0 for volume 38480630a8bdaa3e1a0ebd34c94038591b0d7ad994b37be5b4f2072bb6ef0879: file exists"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:54 nagato.nanadai.me podman</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1527</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: </span><span class="token assign-left variable" style="color:#36acaa">time</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"2020-07-22T13:50:54-04:00"</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">level</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">error </span><span class="token assign-left variable" style="color:#36acaa">msg</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Error refreshing volume 47d410af4d762a0cc456a89e58f759937146fa3be32b5e95a698a1d4069f4024: error acquiring lock 0 for volume 47d410af4d762a0cc456a89e58f759937146fa3be32b5e95a698a1d4069f4024: file exists"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:54 nagato.nanadai.me podman</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1527</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: </span><span class="token assign-left variable" style="color:#36acaa">time</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"2020-07-22T13:50:54-04:00"</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">level</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">error </span><span class="token assign-left variable" style="color:#36acaa">msg</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Error refreshing volume 86e73f082e344dad38c8792fb86b2017c4f133f2a8db87f239d1d28a78cf0868: error acquiring lock 0 for volume 86e73f082e344dad38c8792fb86b2017c4f133f2a8db87f239d1d28a78cf0868: file exists"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:54 nagato.nanadai.me podman</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1527</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: </span><span class="token assign-left variable" style="color:#36acaa">time</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"2020-07-22T13:50:54-04:00"</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">level</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">error </span><span class="token assign-left variable" style="color:#36acaa">msg</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Error refreshing volume 9a16ea764be490a5563e384d9074ab0495e4d9119be380c664037d6cf1215631: error acquiring lock 0 for volume 9a16ea764be490a5563e384d9074ab0495e4d9119be380c664037d6cf1215631: file exists"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:54 nagato.nanadai.me podman</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1527</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: </span><span class="token assign-left variable" style="color:#36acaa">time</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"2020-07-22T13:50:54-04:00"</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">level</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">error </span><span class="token assign-left variable" style="color:#36acaa">msg</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Error refreshing volume bfd6b2a97217f8655add13e0ad3f6b8e1c79bc1519b7a1e15361a107ccf57fc0: error acquiring lock 0 for volume bfd6b2a97217f8655add13e0ad3f6b8e1c79bc1519b7a1e15361a107ccf57fc0: file exists"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:54 nagato.nanadai.me podman</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1527</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: </span><span class="token assign-left variable" style="color:#36acaa">time</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"2020-07-22T13:50:54-04:00"</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">level</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">error </span><span class="token assign-left variable" style="color:#36acaa">msg</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"Error refreshing volume f9b9f630982452ebcbed24bd229b142fbeecd5d4c85791fca440b21d56fef563: error acquiring lock 0 for volume f9b9f630982452ebcbed24bd229b142fbeecd5d4c85791fca440b21d56fef563: file exists"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:54 nagato.nanadai.me podman</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1527</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: Trying to pull registry.fedoraproject.org/fedora:latest</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:55 nagato.nanadai.me podman</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1527</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: Getting image </span><span class="token builtin class-name">source</span><span class="token plain"> signatures</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:55 nagato.nanadai.me podman</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1527</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: Copying blob sha256:dd9f43919ba05f05d4f783c31e83e5e776c4f5d29dd72b9ec5056b9576c10053</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:55 nagato.nanadai.me podman</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1527</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: Copying config sha256:00ff39a8bf19f810a7e641f7eb3ddc47635913a19c4996debd91fafb6b379069</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:55 nagato.nanadai.me podman</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1527</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: Writing manifest to image destination</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:55 nagato.nanadai.me podman</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1527</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: Storing signatures</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:55 nagato.nanadai.me systemd</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1048</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: podman.service: unit configures an IP firewall, but not running as root.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:50:55 nagato.nanadai.me systemd</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1048</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">This warning is only shown </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> the first unit using IP firewalling.</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:51:15 nagato.nanadai.me systemd</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1048</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: podman.service: Succeeded.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:51:15 nagato.nanadai.me systemd</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1048</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: Finished Podman API Service.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Jul </span><span class="token number" style="color:#36acaa">22</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">13</span><span class="token plain">:51:15 nagato.nanadai.me systemd</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1048</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">: podman.service: Consumed </span><span class="token number" style="color:#36acaa">1</span><span class="token plain">.339s CPU time.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="wrap-up">Wrap Up<a href="#wrap-up" class="hash-link" aria-label="Direct link to Wrap Up" title="Direct link to Wrap Up">​</a></h2><p>Podman v2 provides a set of Go bindings to allow developers to integrate Podman
functionality conveniently in their Go application. These Go bindings require
the Podman system service to be running in the background and this can easily
be achieved using systemd socket activation. Once set up, you are able to use a
set of Go based bindings to create, maintain and monitor your container images,
containers and pods in a way which fits very nicely in many production environments.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="references">References<a href="#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References">​</a></h2><ul><li><p>Podman v2 is available for most major distributions along with MacOS and Windows.
Installation details are available on the <a href="https://podman.io/getting-started/" target="_blank" rel="noopener noreferrer">Podman official website</a>.</p></li><li><p>Documentation can be found at the <a href="https://docs.podman.io" target="_blank" rel="noopener noreferrer">Podman Docs page</a>.
It also includes a section on the <a href="https://docs.podman.io/en/latest/Reference.html" target="_blank" rel="noopener noreferrer">RESTful API</a>.</p></li></ul><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="contribute">Contribute<a href="#contribute" class="hash-link" aria-label="Direct link to Contribute" title="Direct link to Contribute">​</a></h2><ul><li>Any issues with the bindings can be <a href="https://github.com/containers/podman/issues/new/choose" target="_blank" rel="noopener noreferrer">reported upstream</a>.</li><li>Check out the <a href="https://podman.io/community/" target="_blank" rel="noopener noreferrer">Podman community page</a> for more ways to get in touch with the community.</li></ul><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="acknowledgments">Acknowledgments<a href="#acknowledgments" class="hash-link" aria-label="Direct link to Acknowledgments" title="Direct link to Acknowledgments">​</a></h2><ul><li><p>This blog post was co-authored by Parker Van Roy, currently interning at Red
Hat for summer 2020.</p></li><li><p>Thanks to Brent Baude for the initial blog post suggestion and reviews.</p></li><li><p>Thanks to Tom Sweeney, Valentin Rothberg, Dan Walsh and the entire Podman team for
their reviews and insightful comments.</p></li></ul>]]></content>
        <author>
            <name>lsm5</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="bindings" term="bindings"/>
        <category label="go" term="go"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Improved systemd integration with Podman 2.0]]></title>
        <id>https://podman.io/blogs/2020/08/02/new</id>
        <link href="https://podman.io/blogs/2020/08/02/new"/>
        <updated>2020-08-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Valentin Rothberg just landed a blog post on the Red Hat Enable Sysadmin site Improved systemd integration with Podman 2.0. In the post, Valentin talks about how systemd in Podman v2.0 is even more tightly integrated than it was in prior versions.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://twitter.com/vlntnrthbrg" target="_blank" rel="noopener noreferrer">Valentin Rothberg</a> just landed a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site <a href="https://www.redhat.com/sysadmin/improved-systemd-podman" target="_blank" rel="noopener noreferrer">Improved systemd integration with Podman 2.0</a>. In the post, Valentin talks about how systemd in Podman v2.0 is even more tightly integrated than it was in prior versions.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Improved systemd integration with Podman 2.0]]></title>
        <id>https://podman.io/blogs/2020/08/02/systemd-integration-v2</id>
        <link href="https://podman.io/blogs/2020/08/02/systemd-integration-v2"/>
        <updated>2020-08-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Improved systemd integration with Podman 2.0</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p><a href="https://twitter.com/vlntnrthbrg" target="_blank" rel="noopener noreferrer">Valentin Rothberg</a> just landed a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site <a href="https://www.redhat.com/sysadmin/improved-systemd-podman" target="_blank" rel="noopener noreferrer">Improved systemd integration with Podman 2.0</a>. In the post, Valentin talks about how systemd in Podman v2.0 is even more tightly integrated than it was in prior versions.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="github" term="github"/>
        <category label="rename" term="rename"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman API v1.0 Deprecation and Removal Notice]]></title>
        <id>https://podman.io/blogs/2020/08/01/deprecate-and-remove-varlink-notice</id>
        <link href="https://podman.io/blogs/2020/08/01/deprecate-and-remove-varlink-notice"/>
        <updated>2020-08-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman API v1.0 Deprecation and Removal Notice</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>The Podman API v1.0 relied on the <a href="https://github.com/varlink/libvarlink" target="_blank" rel="noopener noreferrer">varlink library</a> to handle the underlying client/server calls from the Podman client to the host where the Podman service was running. About one year ago, the Podman team was notified that the focus on the varlink library was being greatly reduced and there would be no further development and little support for it from the varlink library team. This led the Podman team to investigate the use of other client/server technologies and it was decided to develop a RESTful API for Podman using the native Go libraries.</p><p>This new Podman v2.0 RESTful API was released along with Podman v2.0 in June of 2020 and replaces the Podman API v1.0. As of that time the Podman API v1.0 for Podman is considered to be deprecated. If there are issues with the Podman API v1.0 in versions of Podman prior to v2.0 and those versions are still under support on Red Hat Enterprise Linux (RHEL), the Podman team will make a best effort to address those issues. However, no new feature requests for the API v1.0 will be considered and any problems found with the API v1.0 in Podman v2.0 will not be addressed.</p><p>The new Podman v2.0 RESTful API is split into two halves: one providing a Docker-compatible API, and a Libpod API providing support for Podman’s unique features such as pods. The new API works in both a rootful and a rootless environment. It is a much more flexible solution and Podman will not have a dependency on another project in order to supply an API. For more information on the Podman v2.0 RESTful API please see articles on the <a href="https://podman.io/" target="_blank" rel="noopener noreferrer">podman.io</a> site and also the documentation for the Podman v2.0 RESTful API <a href="https://docs.podman.io/en/latest/Reference.html" target="_blank" rel="noopener noreferrer">here</a>.</p><p>Distributions have to support services for the length of their support agreements. The Podman development team wants to be free to update the version of Podman during this support cycle. Therefore, we are planning to drop support for Podman API v1.0 from distributions Red Hat is the packagers for. The version of Podman, 2.<!-- -->*<!-- -->, which is contained in Fedora 33, scheduled to be released around Oct 31, 2020, will ship with no varlink support. We also plan to drop support from the RHEL8.4 release, spring 2021. Other distributions like OpenSUSE have already disabled varlink support and we have heard that other distributions will follow suit.</p><p>This also serves as a notification that the Podman v1.0 (varlink) API will be removed from the main GitHub branch of Podman in the near future. With the release of Podman v2.0 the Podman developers deprecated the Podman API v1.0 in favor of the new Podman v2.0 RESTful API. The plan is to remove varlink completely from the Podman v3.0 development branch which will be created some time after September 2020. A 30 day notification of the final removal date will be posted on the <a href="https://podman.io" target="_blank" rel="noopener noreferrer">podman.io</a> site and also on the <a href="https://lists.podman.io/admin/lists/podman.lists.podman.io/" target="_blank" rel="noopener noreferrer">Podman mailing list</a>, along with social media once it is definitively determined.</p><p>If you have any questions or concerns about this notification, please send a note to the Podman mailing list or create an issue on Podman’s <a href="https://github.com/containers/podman/issues" target="_blank" rel="noopener noreferrer">GitHub</a> repository.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="github" term="github"/>
        <category label="varlink" term="varlink"/>
        <category label="rest-api" term="rest-api"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman API v1.0 Deprecation and Removal Notice]]></title>
        <id>https://podman.io/blogs/2020/08/01/new</id>
        <link href="https://podman.io/blogs/2020/08/01/new"/>
        <updated>2020-08-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A Podman API v1.0 Deprecation and Removal Notice has just been posted. The Podman v1.0 API based on the varlink library has been deprecated and will soon be removed from Podman in favor of the new Podmand v2.0 RESTful API. Please see the notice for more details.]]></summary>
        <content type="html"><![CDATA[<p>A <a href="https://podman.io/blogs/2020/08/01/deprecate-and-remove-varlink-notice.html" target="_blank" rel="noopener noreferrer">Podman API v1.0 Deprecation and Removal Notice</a> has just been posted. The Podman v1.0 API based on the varlink library has been deprecated and will soon be removed from Podman in favor of the new Podmand v2.0 RESTful API. Please see the notice for more details.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
        <category label="varlink" term="varlink"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Speed up container builds with overlay mounts]]></title>
        <id>https://podman.io/blogs/2020/07/18/new</id>
        <link href="https://podman.io/blogs/2020/07/18/new"/>
        <updated>2020-07-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Dan Walsh has another blog post on the Red Hat Enable Sysadmin site this time he's writing on how to Speed up container builds with overlay mounts. In the article Dan walks you through speeding up builds for multiple distributions by sharing the host's metadata.]]></summary>
        <content type="html"><![CDATA[<p>Dan Walsh has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time he's writing on how to <a href="https://www.redhat.com/sysadmin/overlay-mounts" target="_blank" rel="noopener noreferrer">Speed up container builds with overlay mounts</a>. In the article Dan walks you through speeding up builds for multiple distributions by sharing the host's metadata.</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Speed up container builds with overlay mounts]]></title>
        <id>https://podman.io/blogs/2020/07/18/speed-up-build-with-overlayfs</id>
        <link href="https://podman.io/blogs/2020/07/18/speed-up-build-with-overlayfs"/>
        <updated>2020-07-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Speed up container builds with overlay mounts</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-dan-walsh-github">By Dan Walsh <a href="https://github.com/rhatdan" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-dan-walsh-github" class="hash-link" aria-label="Direct link to by-dan-walsh-github" title="Direct link to by-dan-walsh-github">​</a></h2><p>Dan Walsh has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time he's writing on how to <a href="https://www.redhat.com/sysadmin/overlay-mounts" target="_blank" rel="noopener noreferrer">Speed up container builds with overlay mounts</a>. In the article Dan walks you through speeding up builds for multiple distributions by sharing the host's metadata.</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="github" term="github"/>
        <category label="rename" term="rename"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Exploring additional image stores in Podman]]></title>
        <id>https://podman.io/blogs/2020/07/17/additional-image-stores</id>
        <link href="https://podman.io/blogs/2020/07/17/additional-image-stores"/>
        <updated>2020-07-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Exploring additional image stores in Podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-dan-walsh-github">By Dan Walsh <a href="https://github.com/rhatdan" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-dan-walsh-github" class="hash-link" aria-label="Direct link to by-dan-walsh-github" title="Direct link to by-dan-walsh-github">​</a></h2><p>Dan Walsh has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time he's writing about <a href="https://www.redhat.com/sysadmin/image-stores-podman" target="_blank" rel="noopener noreferrer">Exploring additional image stores in Podman</a>. In the article Dan shows you how to store container images on shares, permitting the images to be accessed over the network.</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="github" term="github"/>
        <category label="rename" term="rename"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Exploring additional image stores in Podman]]></title>
        <id>https://podman.io/blogs/2020/07/17/new</id>
        <link href="https://podman.io/blogs/2020/07/17/new"/>
        <updated>2020-07-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Dan Walsh has another blog post on the Red Hat Enable Sysadmin site this time he's writing about Exploring additional image stores in Podman. In the article Dan shows you how to store container images on shares, permitting the images to be accessed over the network.]]></summary>
        <content type="html"><![CDATA[<p>Dan Walsh has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time he's writing about <a href="https://www.redhat.com/sysadmin/image-stores-podman" target="_blank" rel="noopener noreferrer">Exploring additional image stores in Podman</a>. In the article Dan shows you how to store container images on shares, permitting the images to be accessed over the network.</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Building images using Podman and cron]]></title>
        <id>https://podman.io/blogs/2020/07/16/new</id>
        <link href="https://podman.io/blogs/2020/07/16/new"/>
        <updated>2020-07-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tom Sweeney has another blog post on the Red Hat Enable Sysadmin site this time he's writing about Building images using Podman and cron. In the article Tom talks about how necessity became the mother of invention and cron was put into use to build container images on a regular schedule.]]></summary>
        <content type="html"><![CDATA[<p>Tom Sweeney has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time he's writing about <a href="https://www.redhat.com/sysadmin/building-images-podman-cron" target="_blank" rel="noopener noreferrer">Building images using Podman and cron</a>. In the article Tom talks about how necessity became the mother of invention and cron was put into use to build container images on a regular schedule.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Building images using Podman and cron]]></title>
        <id>https://podman.io/blogs/2020/07/16/podman-and-cron</id>
        <link href="https://podman.io/blogs/2020/07/16/podman-and-cron"/>
        <updated>2020-07-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Building images using Podman and cron</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Tom Sweeney has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time he's writing about <a href="https://www.redhat.com/sysadmin/building-images-podman-cron" target="_blank" rel="noopener noreferrer">Building images using Podman and cron</a>. In the article Tom talks about how necessity became the mother of invention and cron was put into use to build container images on a regular schedule.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="github" term="github"/>
        <category label="rename" term="rename"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Podman repository has been renamed]]></title>
        <id>https://podman.io/blogs/2020/07/07/new</id>
        <link href="https://podman.io/blogs/2020/07/07/new"/>
        <updated>2020-07-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The GitHub repository for the Podman project has been moved from github.com/containers/libpod to github.com/containers/podman. More details from Matt Heon in this blog post.]]></summary>
        <content type="html"><![CDATA[<p>The GitHub repository for the Podman project has been moved from <a href="https://github.com/containers/libpod" target="_blank" rel="noopener noreferrer">github.com/containers/libpod</a> to <a href="https://github.com/containers/podman" target="_blank" rel="noopener noreferrer">github.com/containers/podman</a>. More details from Matt Heon in this blog <a href="https://podman.io/blogs/2020/07/07/repo-rename.html" target="_blank" rel="noopener noreferrer">post</a>.</p>]]></content>
        <author>
            <name>mheon</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Podman repository has been renamed]]></title>
        <id>https://podman.io/blogs/2020/07/07/repo-rename</id>
        <link href="https://podman.io/blogs/2020/07/07/repo-rename"/>
        <updated>2020-07-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>The Podman repository has been renamed</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-matthew-heon-github">By Matthew Heon <a href="https://github.com/mheon" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-matthew-heon-github" class="hash-link" aria-label="Direct link to by-matthew-heon-github" title="Direct link to by-matthew-heon-github">​</a></h2><p>The <a href="https://podman.io/" target="_blank" rel="noopener noreferrer">Podman</a> repository on Github is moving from <a href="https://github.com/containers/libpod" target="_blank" rel="noopener noreferrer">github.com/containers/libpod</a> to <a href="https://github.com/containers/podman" target="_blank" rel="noopener noreferrer">github.com/containers/podman</a>! Read on to find out why, and how it will affect you.</p><p>Three years ago, we created a new Git repository to hold our new container-management tool and the library it was based on. At the time, Podman was not named Podman, but <code>kpod</code> - a name no one on the team liked, and one we’d hoped to replace quickly. Given this, we decided to name the repository after the library we’d written to manage containers - <code>libpod</code>. Four months after that, we made the first public release of the tool, and with it came a new name - Podman (POD MANager). The rest is, as they say, history. The Podman team is incredibly grateful for the success we’ve seen since then, and the way that the community has grown.</p><p>With the release of Podman 2.0, we decided it was a good time to for the rename our repository to better match how it’s used today. We’ve decided to rename our Github repository from <code>containers/libpod</code> to <code>containers/podman</code>. The <code>libpod</code> name made sense when we first made the repository, but it hasn’t been the focus of development for some time. We’ve actually been considering moving the <code>libpod</code> library into a separate repository, to make it easier to include in our other tools (and it would be very confusing for <code>containers/libpod</code> to not include <code>libpod</code>!). Given this, and the fact that there are far more users of Podman the tool than <code>libpod</code> the library, renaming the repository makes a great deal of sense.</p><p>Finally, this rename helps make the repository more discoverable - it’s hard for a new Podman user to know that issues should be filed against <code>containers/libpod</code> since they probably don’t know what <code>libpod</code> is.</p><p>We don’t expect this move will break anyone’s workflow. Github will ensure that the old URLs redirect to the new location, so access to the repo itself, as well as our issues and pull requests, should be unaffected.</p>]]></content>
        <author>
            <name>mheon</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="v2" term="v2"/>
        <category label="github" term="github"/>
        <category label="rename" term="rename"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman REST API and Docker compatibility]]></title>
        <id>https://podman.io/blogs/2020/07/01/new</id>
        <link href="https://podman.io/blogs/2020/07/01/new"/>
        <updated>2020-07-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Matt Heon talks about the compatibility of the new Podman REST API and Docker's API is this blog post.]]></summary>
        <content type="html"><![CDATA[<p>Matt Heon talks about the compatibility of the new Podman REST API and Docker's API is this blog <a href="https://podman.io/blogs/2020/07/01/rest-versioning.html" target="_blank" rel="noopener noreferrer">post</a>.</p>]]></content>
        <author>
            <name>mheon</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman REST API and Docker compatibility]]></title>
        <id>https://podman.io/blogs/2020/07/01/rest-versioning</id>
        <link href="https://podman.io/blogs/2020/07/01/rest-versioning"/>
        <updated>2020-07-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman REST API and Docker compatibility</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-matthew-heon-github">By Matthew Heon <a href="https://github.com/mheon" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-matthew-heon-github" class="hash-link" aria-label="Direct link to by-matthew-heon-github" title="Direct link to by-matthew-heon-github">​</a></h2><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="versioning-the-rest-api">Versioning the REST API<a href="#versioning-the-rest-api" class="hash-link" aria-label="Direct link to Versioning the REST API" title="Direct link to Versioning the REST API">​</a></h2><p>Podman v2.0.0 launched recently, and with it the REST API. We’ve seen a great deal of excitement with this new API because of what it will enable - enabling applications and automation to use Podman when the could previously only use Docker. As you may know, Podman’s REST API is split into two halves: one providing a Docker-compatible API, and a Libpod API providing support for Podman’s unique features such as pods. We would love for all projects to eventually grow to support for our native Libpod API, but this will take time (and may be impossible for older, no longer maintained projects). As such, we need to talk about the Compatibility API and how it can be used.</p><p>When we developed the compatibility API layer, we targeted the latest released version of the Docker API, v1.40. Within this version, we aimed to implement all endpoints, with the exception of those used for Swarm(<sup id="fnref-1-253880"><a href="#fn-1-253880" class="footnote-ref">1</a></sup>). Podman is not a tool for managing clusters, and does not intend to become one. We recognize that many existing tools do not target this specific Docker API version, and these are occasionally breaking changes in the Docker API that may make using the newest API impossible. The core Podman team cannot commit to being bug-for-bug compatible with every version of the Docker API. The Podman team commits to fixing bugs related to the latest version of Docker API. We may fix bugs with older versions that affect many users. As a community project, we gladly accept help here - if you find bugs that prevent Podman from working with a specific API version you use and are willing to fix them, we’re always happy to accept patches!</p><p>We’re very excited by the possibilities the new Podman API offers, and encourage everyone to try it out. Question and bug reports are always welcome at our <a href="https://github.com/containers/podman" target="_blank" rel="noopener noreferrer">Github page</a> or our <a href="https://lists.podman.io/admin/lists/podman.lists.podman.io/" target="_blank" rel="noopener noreferrer">email list</a>.</p><div class="footnotes"><hr><ol><li id="fn-1-253880">The Podman team believes the best tool for container orchestration is <a href="https://kubernetes.io/" target="_blank" rel="noopener noreferrer">Kubernetes</a>. The <code>podman generate kube</code> and <code>podman play kube</code> ease developer transitioning from single node containers/pods to full Kubernetes workloads.<a href="#fnref-1-253880" class="footnote-backref">↩</a></li></ol></div>]]></content>
        <author>
            <name>mheon</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="api" term="api"/>
        <category label="rest-api" term="rest-api"/>
        <category label="hpc" term="hpc"/>
        <category label="rest" term="rest"/>
        <category label="v2" term="v2"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Announcing Podman v2.0]]></title>
        <id>https://podman.io/blogs/2020/06/29/new</id>
        <link href="https://podman.io/blogs/2020/06/29/new"/>
        <updated>2020-06-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Announcing Podman v2.0!]]></summary>
        <content type="html"><![CDATA[<p><strong>Announcing Podman v2.0!</strong></p><p>Podman v2.0 is here! Brent Baude talks about the major highlights of the new release, including the new RESTful API, remote client improvements, Auto-update functionality and systemd integration improvements.
More details in the announcement <a href="https://podman.io/blogs/2020/06/29/podman-v2-announce.html" target="_blank" rel="noopener noreferrer">post</a>.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="docker-compose" term="docker-compose"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Announcing Podman v2.0]]></title>
        <id>https://podman.io/blogs/2020/06/29/podman-v2-announce</id>
        <link href="https://podman.io/blogs/2020/06/29/podman-v2-announce"/>
        <updated>2020-06-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Announcing Podman v2</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>If you have been following the upstream development of Podman, you have undoubtedly seen us refer to “2.0” or “Podman 2”. Today, we have made the first release of Podman 2 upstream. The release notes highlight many of the newest features but we wanted to call out some specific things in this blog and expand on them.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="pay-no-attention-to-the-man-behind-the-curtain">“Pay no attention to the man behind the curtain”<a href="#pay-no-attention-to-the-man-behind-the-curtain" class="hash-link" aria-label="Direct link to “Pay no attention to the man behind the curtain”" title="Direct link to “Pay no attention to the man behind the curtain”">​</a></h2><p>Most of the changes to the new Podman should be transparent to end users. We did a significant amount of replumbing in our internals to allow for future enhancements and more closely align many of the code paths. There are some subtle changes to the outputs of some commands and fields within JSON formatted responses. They were largely done to create more consistency amongst our commands as well as driven by user feedback.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="restful-api">RESTful API<a href="#restful-api" class="hash-link" aria-label="Direct link to RESTful API" title="Direct link to RESTful API">​</a></h2><p>The biggest change in Podman 2 is our introduction of a RESTful API to interact with our libraries. In actuality, the RESTful service was present in earlier versions but was tagged experimental. We have also deprecated the previous API implementation based on varlink. We will publish more specific blogs and tutorials on how to use the API but consider this a little introduction.</p><p>The API was designed to have two layers: libpod and compatibility. The libpod layer allows you to interact directly with the libpod libraries. The compatibility layer is designed to emulate the Docker RESTful API to assist in migration of tools, applications, and services long-term to libpod. This can be made clearer with an example. Consider inspecting a container called ‘foobar’ with each layer. The endpoint paths would differ depending on the layers.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">/v1.24/containers/foobar   ← compatibility call</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/v1.0/libpod/containers/foobar  ← libpod call</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Furthermore, the results of each call will differ. The compatibility result will closely emulate the response from Docker.</p><p>Our preference is that people writing new code to interact with Podman should use the libpod layer only. This is a more sound long term strategy. But for people that need to migrate to Podman, the compatibility layer allows for a quick on-boarding. There are of course Docker endpoints we cannot or choose not to emulate due to incompatibities between Docker and Podman. Nevertheless, we have already seen some field success in migration of applications.</p><p>In keeping with Podman’s history the restful API will work in both rootless and rootful mode. If you run in rootful mode, the podman service will listen on <code>/run/podman/podman.sock</code> and rootless is <code>$XDG_RUNTIME_DIR/podman/podman.sock</code> (for example: <code>/run/user/1000/podman/podman.sock</code>). If you install the podman-docker package, the package will set up a link between <code>run/docker/docker.sock</code> and <code>/run/podman/podman.sock</code>.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="remote-clients">Remote clients<a href="#remote-clients" class="hash-link" aria-label="Direct link to Remote clients" title="Direct link to Remote clients">​</a></h2><p>One of the consequences of our re-plumbing work is that our remote clients for Windows, Mac, and Linux are significantly smaller in size. The interface for the remote client connection has also changed to more of a URI format. As a matter of process, we attach a binary version of the remote clients to each release.</p><p>It is also worth noting that a ‘--remote’ flag has been added to the Podman binary to allow it to act as a remote client.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="auto-update">Auto-update<a href="#auto-update" class="hash-link" aria-label="Direct link to Auto-update" title="Direct link to Auto-update">​</a></h2><p>The <code>podman auto-update</code> command allows for updating systemd-managed running containers when their images have been updated on the container registry. While it is still a tech preview in Podman v2.0, we added a number of improvements to better support authentication and to select the correct images on ARM. If you’re interested in auto updates, please check them out and let us know what you think.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="systemd-integration-improvements">systemd Integration Improvements<a href="#systemd-integration-improvements" class="hash-link" aria-label="Direct link to systemd Integration Improvements" title="Direct link to systemd Integration Improvements">​</a></h2><p>A major improvement for Podman’s systemd support is that <code>podman generate systemd</code> now supports using the <code>--new</code> flag on pods. This allows for creating shareable systemd units not only for containers but also for pods. Additionally, we added a number of changes to make the systemd units more robust and reliable, such as cleanly starting after a system crash and clean shutdowns even when conmon has been killed. The names of generated files can further be altered with the new <code>--container-prefix</code> and <code>--pod-prefix</code> flags.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="conclusion">Conclusion<a href="#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h2><p>This is a major new version of Podman with the goal to support all of your local container engine needs. We sincerely hope that the new features meet your needs. We continue to develop new content based on the API including new bits to the API itself. Before making too many more changes, we will let Podman “bake” for a while before the next radical functions are added.</p><p>We would love to hear your feedback and look forward to working with the community on giving Podman users and developers the best container experience. Remember upstream Podman development usually hangs out on <strong>#podman</strong> on <strong>Freenode</strong> and on the Podman <a href="https://lists.podman.io/admin/lists/podman.lists.podman.io/" target="_blank" rel="noopener noreferrer">mailing list</a>.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="docker-compose" term="docker-compose"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
        <category label="hpc" term="hpc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Update on Podman v2]]></title>
        <id>https://podman.io/blogs/2020/05/13/new</id>
        <link href="https://podman.io/blogs/2020/05/13/new"/>
        <updated>2020-05-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The local Podman v2 client is complete. It is passing all of its rootful and rootless system and integration tests.]]></summary>
        <content type="html"><![CDATA[<p><strong>The local Podman v2 client is complete. It is passing all of its rootful and rootless system and integration tests.</strong></p><p>The CI/CID tests have been re-enabled upstream and are run with each pull request submission. We are now hard at work finishing up some of the core podman-remote functions. Once those functions are complete, we can then begin to run our podman-remote system and integration tests to catch any regressions.</p><p>More details in the announcement <a href="https://podman.io/blogs/2020/05/13/podman-v2-update.html" target="_blank" rel="noopener noreferrer">post</a>.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="docker-compose" term="docker-compose"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Update on Podman v2]]></title>
        <id>https://podman.io/blogs/2020/05/13/podman-v2-update</id>
        <link href="https://podman.io/blogs/2020/05/13/podman-v2-update"/>
        <updated>2020-05-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Update on Podman v2</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>A few weeks ago, we made an announcement about the development of Podman V2. In the announcement, we mentioned that the state of upstream code would be jumbled for a while and that we would be temporarily disabling many of our CI/CD tests. The upstream development team has been hard at work, and we are starting to see that work pay off.</p><p>Today, we are very excited to announce:</p><p><strong>The local Podman v2 client is complete. It is passing all of its rootful and rootless system and integration tests.</strong></p><p>The CI/CID tests have been re-enabled upstream and are run with each pull request submission. We are now hard at work finishing up some of the core podman-remote functions. Once those functions are complete, we can then begin to run our podman-remote system and integration tests to catch any regressions.</p><p>We have re-enabled the autobuilds for Podman v2 in Fedora rawhide. As mentioned earlier, the Podman remote client is not complete, so that binary is temporarily being removed from the RPM. It will be re-added when the remote client is complete. As a corollary, the Windows and OS/X clients are also not being compiled or tested. This will occur once the remote client for Linux is complete.</p><p>We encourage you to pull the latest upstream Podman code and exercise it with your use cases to help us protect against regressions from Podman v1. We hope to make a full Podman v2.0 release in several weeks, once we are confident it is stable. We look forward to hearing what you think, and please do not hesitate to raise issues and comments on this in our <a href="https://github.com/containers/podman/issues" target="_blank" rel="noopener noreferrer">GitHub repository</a>, our Freenode IRC channel <code>#podman</code>, or to the Podman mailing list.</p><p>We’re very excited to bring Podman v2.0 to you as it offers a lot more flexibility through it’s new REST API interface and adds several enhancements to the existing commands. If your project builds on top of Podman, we would especially love to have you test this new version out so we can ensure complete compatibility with Podman v1.0 and address any issues found ASAP.</p><p><strong>Note:</strong> This announcement was first released to the Podman mailing list. If you are not yet a member of that community, please join us by sending an email to <a href="mailto:podman-join@lists.podman.io?subject=subscribe" target="_blank" rel="noopener noreferrer">podman-join@lists.podman.io</a> with the word “subscribe” as the title.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="docker-compose" term="docker-compose"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman installation documentation in French]]></title>
        <id>https://podman.io/blogs/2020/05/06/new</id>
        <link href="https://podman.io/blogs/2020/05/06/new"/>
        <updated>2020-05-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Est-ce que tu parles français? Le mien est horrible. But if your abilities to read and speak French is better than mine, check out this website that I was just pointed to. Installation podman sur CentOS 8 by Bilal Kalem shows you how to install Podman on Centos 8. If nothing else, check out the graphic at the top of the page!]]></summary>
        <content type="html"><![CDATA[<p>Est-ce que tu parles français? Le mien est horrible. But if your abilities to read and speak French is better than mine, check out this website that I was just pointed to. <a href="https://ios.dz/installation-podman-centos-8/" target="_blank" rel="noopener noreferrer">Installation podman sur CentOS 8</a> by <a href="https://twitter.com/kalembilal?lang=en" target="_blank" rel="noopener noreferrer">Bilal Kalem</a> shows you how to install Podman on Centos 8. If nothing else, check out the graphic at the top of the page!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="systemd" term="systemd"/>
        <category label="video" term="video"/>
        <category label="docker" term="docker"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman installation documentation in French]]></title>
        <id>https://podman.io/blogs/2020/05/06/podman-in-french</id>
        <link href="https://podman.io/blogs/2020/05/06/podman-in-french"/>
        <updated>2020-05-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-installation-documentation-in-french">Podman installation documentation in French<a href="#podman-installation-documentation-in-french" class="hash-link" aria-label="Direct link to Podman installation documentation in French" title="Direct link to Podman installation documentation in French">​</a></h2><p>Est-ce que tu parles français? Le mien est horrible. But if your abilities to read and speak French is better than mine, check out this website that I was just pointed to. <a href="https://ios.dz/installation-podman-centos-8/" target="_blank" rel="noopener noreferrer">Installation podman sur CentOS 8</a> by <a href="https://twitter.com/kalembilal?lang=en" target="_blank" rel="noopener noreferrer">Bilal Kalem</a> shows you how to install Podman on Centos 8. If nothing else, check out the graphic at the top of the page!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="systemd" term="systemd"/>
        <category label="video" term="video"/>
        <category label="docker" term="docker"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman v1.9.0 Released]]></title>
        <id>https://podman.io/blogs/2020/04/17/new</id>
        <link href="https://podman.io/blogs/2020/04/17/new"/>
        <updated>2020-04-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman has gone 1.9.0!]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-has-gone-190"><a href="https://podman.io/releases/2020/04/17/podman-release-v1.9.0.html" target="_blank" rel="noopener noreferrer">Podman has gone 1.9.0!</a><a href="#podman-has-gone-190" class="hash-link" aria-label="Direct link to podman-has-gone-190" title="Direct link to podman-has-gone-190">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman v2 development update]]></title>
        <id>https://podman.io/blogs/2020/04/16/new</id>
        <link href="https://podman.io/blogs/2020/04/16/new"/>
        <updated>2020-04-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman v2.x is under development and due to the development, some of]]></summary>
        <content type="html"><![CDATA[<p>Podman v2.x is under development and due to the development, some of
the upstream commands may become unstable for a period of time until
the final release is completed. More details in the announcement
<a href="https://podman.io/blogs/2020/04/16/podman-v2-announce.html" target="_blank" rel="noopener noreferrer">post</a>.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="docker-compose" term="docker-compose"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman v2 development update]]></title>
        <id>https://podman.io/blogs/2020/04/16/podman-v2-announce</id>
        <link href="https://podman.io/blogs/2020/04/16/podman-v2-announce"/>
        <updated>2020-04-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman v2 development update</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>In the last few days, the Podman development team has been working to
release Podman-1.9.0. This is likely to be the last Podman-1.X release
before we transition to Podman v2.x. We have been working since
November 2019 to make a significant overhaul of Podman’s architecture.
And if we did our job correctly, most casual Podman users will not
notice a difference. We will continue to investigate and fix issues in
Podman-1.x versions but severity of the bug and priority will dictate
our response.</p><p>What some users who follow upstream development may notice is that
while we make the final push to a 2.x release, our GitHub repository
will look drastically different. For some period of time, certain
Podman commands, if built based on upstream, may not function exactly
as expected nor even exist. We already know we will need to disable
some of our CI testing framework as part of this final push until we
have a more complete Podman v2.x. We will not release Podman 2.0 until
we are satisfied that it is ready. While upstream development will be
impacted by the announced migration to Podman v2.x, you can still open
issues and contribute pull requests to the project.</p><p>As has been the standard with our project, we will remain transparent
in our development activities and try to keep our community appraised
of our progress. We are excited for some of the technical
advancements that Podman v2.x will give our users. Subsequent blog
posts will be written on those advancements and why they matter to our
users.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="docker-compose" term="docker-compose"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
        <category label="api" term="api"/>
        <category label="rest" term="rest"/>
        <category label="rest-api" term="rest-api"/>
        <category label="v2" term="v2"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Dockerless&#58; Build and Run Containers with Podman and systemd]]></title>
        <id>https://podman.io/blogs/2020/04/14/new</id>
        <link href="https://podman.io/blogs/2020/04/14/new"/>
        <updated>2020-04-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In this video, Kirill Shirinkin will show how to use Podman to build container images and run Java applications in containers with systemd. We are going to learn why we should at least try alternatives to Docker, how container runtime landscape changed and how Podman is different and in certain ways better than Docker. Watch now.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://www.youtube.com/watch?v=RfL_CjXfQds" target="_blank" rel="noopener noreferrer">In this video</a>, Kirill Shirinkin will show how to use Podman to build container images and run Java applications in containers with systemd. We are going to learn why we should at least try alternatives to Docker, how container runtime landscape changed and how Podman is different and in certain ways better than Docker. <a href="https://www.youtube.com/watch?v=RfL_CjXfQds" target="_blank" rel="noopener noreferrer">Watch now</a>.</p>]]></content>
        <author>
            <name>kshirinkin</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="systemd" term="systemd"/>
        <category label="video" term="video"/>
        <category label="docker" term="docker"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Dockerless&#58; Build and Run Containers with Podman and systemd]]></title>
        <id>https://podman.io/blogs/2020/04/14/podman-systemd</id>
        <link href="https://podman.io/blogs/2020/04/14/podman-systemd"/>
        <updated>2020-04-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="dockerless-build-and-run-containers-with-podman-and-systemd">Dockerless<!-- -->:<!-- --> Build and Run Containers with Podman and systemd<a href="#dockerless-build-and-run-containers-with-podman-and-systemd" class="hash-link" aria-label="Direct link to dockerless-build-and-run-containers-with-podman-and-systemd" title="Direct link to dockerless-build-and-run-containers-with-podman-and-systemd">​</a></h2><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-kirill-shirinkin-github">By Kirill Shirinkin <a href="https://github.com/Fodoj" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-kirill-shirinkin-github" class="hash-link" aria-label="Direct link to by-kirill-shirinkin-github" title="Direct link to by-kirill-shirinkin-github">​</a></h2><p><a href="https://www.youtube.com/watch?v=RfL_CjXfQds" target="_blank" rel="noopener noreferrer">In this video</a>, Kirill Shirinkin will show how to use Podman to build container images and run Java applications in containers with systemd.</p><p>We are going to learn why we should at least try alternatives to Docker, how container runtime landscape changed and how Podman is different and in certain ways better than Docker.</p><p><a href="https://www.youtube.com/watch?v=RfL_CjXfQds" target="_blank" rel="noopener noreferrer">Watch now</a>.</p>]]></content>
        <author>
            <name>kshirinkin</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="systemd" term="systemd"/>
        <category label="video" term="video"/>
        <category label="docker" term="docker"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Managing Podman pods with pods-compose]]></title>
        <id>https://podman.io/blogs/2020/04/05/managing-podman-pods-with-pods-compose</id>
        <link href="https://podman.io/blogs/2020/04/05/managing-podman-pods-with-pods-compose"/>
        <updated>2020-04-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Managing Podman pods with pods-compose</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-balázs-németh-github">By Balázs Németh <a href="https://github.com/abalage" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-balázs-németh-github" class="hash-link" aria-label="Direct link to by-balázs-németh-github" title="Direct link to by-balázs-németh-github">​</a></h2><p><a href="https://balagetech.com/managing-podman-pods-with-pods-compose/" target="_blank" rel="noopener noreferrer">Managing Podman pods with pods-compose</a> makes your move to Podman easier. Balázs Németh already converted his docker-compose services to pods with Podman, however some features were missing, up until now. Let’s meet <a href="https://github.com/abalage/pods-compose" target="_blank" rel="noopener noreferrer">pods-compose</a>.</p>]]></content>
        <author>
            <name>balage</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="docker-compose" term="docker-compose"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Managing Podman pods with pods-compose]]></title>
        <id>https://podman.io/blogs/2020/04/05/new</id>
        <link href="https://podman.io/blogs/2020/04/05/new"/>
        <updated>2020-04-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Managing Podman pods with pods-compose makes your move to Podman easier. Balázs Németh already converted his docker-compose services to pods with Podman, however some features were missing, up until now. Let’s meet pods-compose.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://balagetech.com/managing-podman-pods-with-pods-compose/" target="_blank" rel="noopener noreferrer">Managing Podman pods with pods-compose</a> makes your move to Podman easier. Balázs Németh already converted his docker-compose services to pods with Podman, however some features were missing, up until now. Let’s meet <a href="https://github.com/abalage/pods-compose" target="_blank" rel="noopener noreferrer">pods-compose</a>.</p>]]></content>
        <author>
            <name>balage</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="docker-compose" term="docker-compose"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Convert docker-compose services to pods with Podman]]></title>
        <id>https://podman.io/blogs/2020/04/04/convert-docker-compose-to-pods</id>
        <link href="https://podman.io/blogs/2020/04/04/convert-docker-compose-to-pods"/>
        <updated>2020-04-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Convert docker-compose services to pods with Podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-balázs-németh-github">By Balázs Németh <a href="https://github.com/abalage" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-balázs-németh-github" class="hash-link" aria-label="Direct link to by-balázs-németh-github" title="Direct link to by-balázs-németh-github">​</a></h2><p>How to deploy pods with Podman when you only need a single-host system and not a complete Kubernetes. Check the blog post <a href="https://balagetech.com/convert-docker-compose-services-to-pods/" target="_blank" rel="noopener noreferrer">Convert your docker-compose services to pods with Podman</a> by Balázs Németh to see how it can be done.</p>]]></content>
        <author>
            <name>balage</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="docker-compose" term="docker-compose"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Convert docker-compose services to pods with Podman]]></title>
        <id>https://podman.io/blogs/2020/04/04/new</id>
        <link href="https://podman.io/blogs/2020/04/04/new"/>
        <updated>2020-04-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[How to deploy pods with Podman when you only need a single-host system and not a complete Kubernetes. Check the blog post Convert your docker-compose services to pods with Podman by Balázs Németh to see how it can be done.]]></summary>
        <content type="html"><![CDATA[<p>How to deploy pods with Podman when you only need a single-host system and not a complete Kubernetes. Check the blog post <a href="https://balagetech.com/convert-docker-compose-services-to-pods/" target="_blank" rel="noopener noreferrer">Convert your docker-compose services to pods with Podman</a> by Balázs Németh to see how it can be done.</p>]]></content>
        <author>
            <name>balage</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="docker-compose" term="docker-compose"/>
        <category label="podman" term="podman"/>
        <category label="networking" term="networking"/>
        <category label="pod" term="pod"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Pulling podman images from a container repository]]></title>
        <id>https://podman.io/blogs/2020/03/31/build-pull-options</id>
        <link href="https://podman.io/blogs/2020/03/31/build-pull-options"/>
        <updated>2020-03-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Pulling podman images from a container repository</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Tom Sweeney has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time he's writing about <a href="https://www.redhat.com/sysadmin/podman-image-pulling" target="_blank" rel="noopener noreferrer">Pulling podman images from a container repository</a>. Learn the different varieties of pull that the <code>podman build</code> command can use to speed up or further secure your environment in this post.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="oci" term="oci"/>
        <category label="networking" term="networking"/>
        <category label="runtime" term="runtime"/>
        <category label="windows" term="windows"/>
        <category label="microsoft" term="microsoft"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Pulling podman images from a container repository]]></title>
        <id>https://podman.io/blogs/2020/03/31/new</id>
        <link href="https://podman.io/blogs/2020/03/31/new"/>
        <updated>2020-03-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tom Sweeney has another blog post on the Red Hat Enable Sysadmin site this time he's writing about Pulling podman images from a container repository. Learn the different varieties of pull that the podman build command can use to speed up or further secure your environment in this post.]]></summary>
        <content type="html"><![CDATA[<p>Tom Sweeney has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time he's writing about <a href="https://www.redhat.com/sysadmin/podman-image-pulling" target="_blank" rel="noopener noreferrer">Pulling podman images from a container repository</a>. Learn the different varieties of pull that the <code>podman build</code> command can use to speed up or further secure your environment in this post.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to sign and distribute container images using Podman]]></title>
        <id>https://podman.io/blogs/2020/03/13/image-signing</id>
        <link href="https://podman.io/blogs/2020/03/13/image-signing"/>
        <updated>2020-03-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Sascha Grunert has written a tutorial explaining how to use Gnu Privacy Guard]]></summary>
        <content type="html"><![CDATA[<p><a href="https://github.com/saschagrunert" target="_blank" rel="noopener noreferrer">Sascha Grunert</a> has written a tutorial explaining how to use Gnu Privacy Guard
(GPG) keys to secure your container images stored in a container repository.
Signing container images is nothing magical and can drastically enhance
security to mitigate man-in-the-middle (MITM) attacks. Read all about it
<a href="https://github.com/containers/podman/blob/main/docs/tutorials/image_signing.md" target="_blank" rel="noopener noreferrer">here</a>.</p>]]></content>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="signing" term="signing"/>
        <category label="podman" term="podman"/>
        <category label="cri-o" term="cri-o"/>
        <category label="oci" term="oci"/>
        <category label="gpg" term="gpg"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[What happens behind the scenes of a rootless Podman container?]]></title>
        <id>https://podman.io/blogs/2020/03/03/behind-the-covers</id>
        <link href="https://podman.io/blogs/2020/03/03/behind-the-covers"/>
        <updated>2020-03-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>What happens behind the scenes of a rootless Podman container?</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-dan-walsh-github">By Dan Walsh <a href="https://github.com/rhatdan" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-dan-walsh-github" class="hash-link" aria-label="Direct link to by-dan-walsh-github" title="Direct link to by-dan-walsh-github">​</a></h2><p>Dan Walsh along with Matt Heon have a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/behind-scenes-podman" target="_blank" rel="noopener noreferrer">What happens behind the scenes of a rootless Podman container?</a>. If you ever wanted to know what happens under the covers of a rootless container, this is the article for you!</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="oci" term="oci"/>
        <category label="networking" term="networking"/>
        <category label="runtime" term="runtime"/>
        <category label="windows" term="windows"/>
        <category label="microsoft" term="microsoft"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[What happens behind the scenes of a rootless Podman container?]]></title>
        <id>https://podman.io/blogs/2020/03/03/new</id>
        <link href="https://podman.io/blogs/2020/03/03/new"/>
        <updated>2020-03-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Dan Walsh along with Matt Heon have a blog post on the Red Hat Enable Sysadmin site, What happens behind the scenes of a rootless Podman container?. If you ever wanted to know what happens under the covers of a rootless container, this is the article for you!]]></summary>
        <content type="html"><![CDATA[<p>Dan Walsh along with Matt Heon have a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site, <a href="https://www.redhat.com/sysadmin/behind-scenes-podman" target="_blank" rel="noopener noreferrer">What happens behind the scenes of a rootless Podman container?</a>. If you ever wanted to know what happens under the covers of a rootless container, this is the article for you!</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Building Container Images with Podman and Buildah]]></title>
        <id>https://podman.io/blogs/2020/03/02/building-with-podman-and-buildah</id>
        <link href="https://podman.io/blogs/2020/03/02/building-with-podman-and-buildah"/>
        <updated>2020-03-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Building Container Images with Podman and Buildah</h1><p>We were just pointed to this post <a href="https://blog.giantswarm.io/building-container-images-with-podman-and-buildah/" target="_blank" rel="noopener noreferrer">Building Container Images with Podman and Buildah</a> by Puja Abbassi on the <a href="https://blog.giantswarm.io/" target="_blank" rel="noopener noreferrer">Giant Swarm</a> site. In the article Puja goes over how Podman and Buildah handle daemonless and rootless building processes. A tardy link on this site, but worth a read!</p>]]></content>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="oci" term="oci"/>
        <category label="networking" term="networking"/>
        <category label="runtime" term="runtime"/>
        <category label="windows" term="windows"/>
        <category label="microsoft" term="microsoft"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Building Container Images with Podman and Buildah]]></title>
        <id>https://podman.io/blogs/2020/03/02/new</id>
        <link href="https://podman.io/blogs/2020/03/02/new"/>
        <updated>2020-03-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We were just pointed to this post Building Container Images with Podman and Buildah by Puja Abbassi on the Giant Swarm site. In the article Puja goes over how Podman and Buildah handle daemonless and rootless building processes. A tardy link on this site, but worth a read!]]></summary>
        <content type="html"><![CDATA[<p>We were just pointed to this post <a href="https://blog.giantswarm.io/building-container-images-with-podman-and-buildah/" target="_blank" rel="noopener noreferrer">Building Container Images with Podman and Buildah</a> by Puja Abbassi on the <a href="https://blog.giantswarm.io/" target="_blank" rel="noopener noreferrer">Giant Swarm</a> site. In the article Puja goes over how Podman and Buildah handle daemonless and rootless building processes. A tardy link on this site, but worth a read!</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[6 guides on making containers secure]]></title>
        <id>https://podman.io/blogs/2020/02/07/new</id>
        <link href="https://podman.io/blogs/2020/02/07/new"/>
        <updated>2020-02-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Dan Walsh has another blog post on the Red Hat Enable Sysadmin site this time he's writing about 6 guides on making containers secure. It's a quick article with pointers to other blog posts showing how to secure your containers.]]></summary>
        <content type="html"><![CDATA[<p>Dan Walsh has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time he's writing about <a href="https://www.redhat.com/sysadmin/making-containers-secure" target="_blank" rel="noopener noreferrer">6 guides on making containers secure</a>. It's a quick article with pointers to other blog posts showing how to secure your containers.</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[6 guides on making containers secure]]></title>
        <id>https://podman.io/blogs/2020/02/07/secure-containers</id>
        <link href="https://podman.io/blogs/2020/02/07/secure-containers"/>
        <updated>2020-02-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>6 guides on making containers secure</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-dan-walsh-github">By Dan Walsh <a href="https://github.com/rhatdan" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-dan-walsh-github" class="hash-link" aria-label="Direct link to by-dan-walsh-github" title="Direct link to by-dan-walsh-github">​</a></h2><p>Dan Walsh has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time he's writing about <a href="https://www.redhat.com/sysadmin/making-containers-secure" target="_blank" rel="noopener noreferrer">6 guides on making containers secure</a>. It's a quick article with pointers to other blog posts showing how to secure your containers.</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="oci" term="oci"/>
        <category label="networking" term="networking"/>
        <category label="runtime" term="runtime"/>
        <category label="windows" term="windows"/>
        <category label="microsoft" term="microsoft"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Deploy a Pod on CentOS with Podman]]></title>
        <id>https://podman.io/blogs/2020/02/06/deploy-pod-on-centos</id>
        <link href="https://podman.io/blogs/2020/02/06/deploy-pod-on-centos"/>
        <updated>2020-02-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Deploy a Pod on CentOS with Podman</h1><p><a href="https://thenewstack.io/author/jack-wallen/" target="_blank" rel="noopener noreferrer">Jack Wallen</a> has a blog post on the <a href="https://thenewstack.io/" target="_blank" rel="noopener noreferrer">THENEWSTACK</a> site with a great introduction on how to <a href="https://thenewstack.io/deploy-a-pod-on-centos-with-podman/" target="_blank" rel="noopener noreferrer">Deploy a Pod on CentOS with Podman</a>. In the post, Jack talks about how Podman fits in the Red Hat ecosystem and then walks you through the fundamentals of creating and running a pod using Podman.</p>]]></content>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="oci" term="oci"/>
        <category label="networking" term="networking"/>
        <category label="runtime" term="runtime"/>
        <category label="windows" term="windows"/>
        <category label="microsoft" term="microsoft"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Deploy a Pod on CentOS with Podman]]></title>
        <id>https://podman.io/blogs/2020/02/06/new</id>
        <link href="https://podman.io/blogs/2020/02/06/new"/>
        <updated>2020-02-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Jack Wallen has a blog post on the THENEWSTACK site with a great introduction on how to Deploy a Pod on CentOS with Podman. In the post, Jack talks about how Podman fits in the Red Hat ecosystem and then walks you through the fundamentals of creating and running a pod using Podman.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://thenewstack.io/author/jack-wallen/" target="_blank" rel="noopener noreferrer">Jack Wallen</a> has a blog post on the <a href="https://thenewstack.io/" target="_blank" rel="noopener noreferrer">THENEWSTACK</a> site with a great introduction on how to <a href="https://thenewstack.io/deploy-a-pod-on-centos-with-podman/" target="_blank" rel="noopener noreferrer">Deploy a Pod on CentOS with Podman</a>. In the post, Jack talks about how Podman fits in the Red Hat ecosystem and then walks you through the fundamentals of creating and running a pod using Podman.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to run Podman on Windows with WSL2]]></title>
        <id>https://podman.io/blogs/2020/01/30/new</id>
        <link href="https://podman.io/blogs/2020/01/30/new"/>
        <updated>2020-01-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Brent Baude has another blog post on the Red Hat Enable Sysadmin site this time it's all about How to run Podman on Windows with WSL2. If you want to know how to run Podman on Windows 10, this article will show you how.]]></summary>
        <content type="html"><![CDATA[<p>Brent Baude has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time it's all about <a href="https://www.redhat.com/sysadmin/podman-windows-wsl2" target="_blank" rel="noopener noreferrer">How to run Podman on Windows with WSL2</a>. If you want to know how to run Podman on Windows 10, this article will show you how.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to run Podman on Windows with WSL2]]></title>
        <id>https://podman.io/blogs/2020/01/30/podman-wsl</id>
        <link href="https://podman.io/blogs/2020/01/30/podman-wsl"/>
        <updated>2020-01-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>How to run Podman on Windows with WSL2</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>Brent Baude has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time it's all about <a href="https://www.redhat.com/sysadmin/podman-windows-wsl2" target="_blank" rel="noopener noreferrer">How to run Podman on Windows with WSL2</a>. If you want to know how to run Podman on Windows 10, this article will show you how.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="oci" term="oci"/>
        <category label="networking" term="networking"/>
        <category label="runtime" term="runtime"/>
        <category label="windows" term="windows"/>
        <category label="microsoft" term="microsoft"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Blog posts from the Web]]></title>
        <id>https://podman.io/blogs/2020/01/22/blog-posts</id>
        <link href="https://podman.io/blogs/2020/01/22/blog-posts"/>
        <updated>2020-01-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Blog posts from the Web</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Over the holiday break, a number of great posts were added to a number of sites that filled up my Twitter feed, so I thought I'd throw together a quick block with links to the highlights from the past month:</p><ul><li><a href="https://lukas.zapletalovi.com/2020/01/deploy-photoprism-in-centos-80.html" target="_blank" rel="noopener noreferrer">Deploy PhotoPrism in CentOS 8(using Podman)</a> - <a href="https://lukas.zapletalovi.com/about_me.html" target="_blank" rel="noopener noreferrer">Lukas Zapletal</a></li><li><a href="https://blog.martdj.nl/2020/01/13/replacing-docker-with-podman-first-steps/" target="_blank" rel="noopener noreferrer">Replacing Docker with Podman - first steps</a> - <a href="https://twitter.com/martdj" target="_blank" rel="noopener noreferrer">Martijn de Jong</a></li><li><a href="https://twitter.com/fatherlinux/status/1216807772458815493" target="_blank" rel="noopener noreferrer">Podman lands on Debian (Twitter Posting)</a> - <a href="https://twitter.com/fatherlinux" target="_blank" rel="noopener noreferrer">Scott McCarty</a></li><li>Video: <a href="https://www.techrepublic.com/videos/how-to-install-the-podman-container-engine-on-centos-8/#ftag=RSS56d97e7" target="_blank" rel="noopener noreferrer">How to install Podman container engine on CentOS 8</a> - <a href="https://www.techrepublic.com/" target="_blank" rel="noopener noreferrer">Tech Republic</a></li><li><a href="https://blog.tomecek.net/post/building-containers-with-buildah-and-ansible/" target="_blank" rel="noopener noreferrer">Building Container Images with Buildah and Ansible</a> - <a href="https://twitter.com/tomastomec?lang=en" target="_blank" rel="noopener noreferrer">Tomas Tomecek</a></li><li>Video: <a href="https://www.techrepublic.com/article/how-to-deploy-a-pod-with-podman/#ftag=RSS56d97e7" target="_blank" rel="noopener noreferrer">How to deploy a pod with Podman</a> - <a href="https://twitter.com/jlwallen" target="_blank" rel="noopener noreferrer">Jack Wallen</a></li><li><a href="https://itnext.io/podman-and-skopeo-on-macos-1b3b9cf21e60" target="_blank" rel="noopener noreferrer">Podman and Skopeo on macOS</a> - Balazs Szeti</li><li><a href="https://www.osradar.com/how-to-install-podman-on-debian-on-10-9/" target="_blank" rel="noopener noreferrer">How To Install Podman on Debian on 10 / 9</a> - <a href="https://www.osradar.com/author/sabi/" target="_blank" rel="noopener noreferrer">Sabi</a></li><li><a href="https://www.osradar.com/how-to-run-docker-containers-using-podman-and-libpod/" target="_blank" rel="noopener noreferrer">How to run Docker Containers using Podman and Libpod</a> - <a href="https://www.osradar.com/author/sabi/" target="_blank" rel="noopener noreferrer">Sabi</a></li><li><a href="https://www.osradar.com/how-to-install-podman-on-arch-linux-manjaro/" target="_blank" rel="noopener noreferrer">How to Install Podman on Arch Linux / Manjaro</a> - <a href="https://www.osradar.com/author/sabi/" target="_blank" rel="noopener noreferrer">Sabi</a></li></ul>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Blog posts from the Web]]></title>
        <id>https://podman.io/blogs/2020/01/22/new</id>
        <link href="https://podman.io/blogs/2020/01/22/new"/>
        <updated>2020-01-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A number of blog posts were posted over the past month and given the holiday crunch, we didn't get them listed on the site. So as a catch up, checkout the Blog posts on the Web blog which has a number of links on it to those great articles and videos.]]></summary>
        <content type="html"><![CDATA[<p>A number of blog posts were posted over the past month and given the holiday crunch, we didn't get them listed on the site. So as a catch up, checkout the <a href="https://podman.io/blogs/2020/01/22/blog-posts.html" target="_blank" rel="noopener noreferrer">Blog posts on the Web</a> blog which has a number of links on it to those great articles and videos.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[New API coming for Podman]]></title>
        <id>https://podman.io/blogs/2020/01/17/new</id>
        <link href="https://podman.io/blogs/2020/01/17/new"/>
        <updated>2020-01-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The new API for Podman, referred to as apiv2, has been merged into the libpod repository. It's a simpler REST API that's more compatible with Docker implementations than the varlink protocol that's currently in use. For more details, see this release announcement by Brent Baude.]]></summary>
        <content type="html"><![CDATA[<p>The new API for Podman, referred to as <em>apiv2</em>, has been merged into the <a href="https://github.com/containers/podman/" target="_blank" rel="noopener noreferrer">libpod</a> repository. It's a simpler REST API that's more compatible with Docker implementations than the <a href="https://varlink.org/" target="_blank" rel="noopener noreferrer">varlink</a> protocol that's currently in use. For more details, see this <a href="https://podman.io/blogs/2020/01/17/podman-new-api.html" target="_blank" rel="noopener noreferrer">release announcement</a> by Brent Baude.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[New API coming for Podman]]></title>
        <id>https://podman.io/blogs/2020/01/17/podman-new-api</id>
        <link href="https://podman.io/blogs/2020/01/17/podman-new-api"/>
        <updated>2020-01-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>If you follow the traffic on IRC (#podman on libera.chat) or GitHub from the developers of <a href="https://github.com/containers/podman/" target="_blank" rel="noopener noreferrer">libpod</a>, you might have seen us referencing a new API. We often referred to it as <em>apiv2</em> and for about a month, there has been an 'apiv2' branch for libpod on GitHub. This week, we have begun to merge that branch but have yet to “wire it up.”</p><p>First and foremost, the Golang libpod API remains largely unchanged. What is changing is the API we expose for automation and remote usage. Our previous API was based on the <a href="https://varlink.org/" target="_blank" rel="noopener noreferrer">varlink</a> protocol. But we heard from users that varlink was a hurdle for libpod adoption especially for those who were using the Docker API and its bindings. They simply could not or did not want to rewrite their custom applications for libpod’s new, varlink-based API.</p><p>The new API is a simpler implementation based on HTTP/REST. We provide two basic groups of endpoints. The first one is for libpod; the second is for Docker compatibility, to ease adoption. The two endpoints are namespaced to keep them separate. Our goal with implementing a portion of the Docker API, is to be as compatible as possible; while similar calls in the libpod API might bring back additional libpod specific information.</p><p>While these two endpoints work similarly, there are important and somewhat nuanced differences. The Docker API endpoint is useful for existing automation tied to that API and potentially tools like docker-compose.</p><h4 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h4><p>If you wanted a list of images with the libpod endpoint, you would use the following endpoint:</p><p><code>&lt;endpoint_base_url&gt;/libpod/images/json</code></p><p>And if you wanted a list of images but in docker-compatibility, you would use:</p><p><code>&lt;endpoint_base_url&gt;/images/json</code></p><p>In our proof of concepts, we have tested our endpoint with the <a href="https://docker-py.readthedocs.io/en/stable/" target="_blank" rel="noopener noreferrer">docker-py</a> project. There are of course subtle differences which we are still working on. And there are compatibility endpoints that we can not support like <code>swarm</code> which Podman does not support.</p><p>We are working on a set of Golang bindings for the libpod endpoints. Eventually these bindings will be used to rewire our remote client. The rewire begins after all the libpod endpoints are working and have tests. We plan on working with the upstream community on podman-python support for the new libpod API, enabling python developers fully support for using podman containers.</p><p>As for the existing varlink code, it has been in maintenance mode already. We will continue to address bugs but no new functionality will be developed. Once the new API is fully implemented, we plan to make a deprecation announcement.</p><p>We are hopeful these changes help our users and larger community. We hope that the new API helps encourage contributors to help us complete the API as well as write bindings. Look for more information in the near future including status updates as well as how-tos.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="community" term="community"/>
        <category label="open source" term="open source"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="api" term="api"/>
        <category label="REST" term="REST"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Bioinformatics with rootless Podman]]></title>
        <id>https://podman.io/blogs/2020/01/15/bioinformatics-with-rootless-podman</id>
        <link href="https://podman.io/blogs/2020/01/15/bioinformatics-with-rootless-podman"/>
        <updated>2020-01-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Bioinformatics with rootless podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-valentin-rothberg-github">By Valentin Rothberg <a href="https://github.com/BryanHepworth" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-valentin-rothberg-github" class="hash-link" aria-label="Direct link to by-valentin-rothberg-github" title="Direct link to by-valentin-rothberg-github">​</a></h2><p>Over the last 10 years I've seen machines and workflows evolve where I work. From the initial dedicated server, to hpc environments
and now the latest instance, containers.</p><p>From an admin point of view this is great - The initial servers had to be carefully built and maintained so that everything would work nicely together. Incompatible programs at that time were run through a VM until such time as they could be folded in to the mix.</p><p>The HPC's had versioned software and environment modules and were built to load the relevant dependencies at run time.</p><p>Now we are into a new era, containers - and not just any old containers, but containers that end users can build and run up fairly
quickly to perform what-if's, and move on quickly through iterations until they perform the required functions.</p><p>Podman has developed very rapidly and is incredibly easy to use. You can use it in conjunction with quay.io or run it on a local machine.</p><p>I should add that Adrian Reber gave a <a href="https://youtu.be/TtHSNsbU24E" target="_blank" rel="noopener noreferrer">talk</a> and has also created a Podman <a href="https://podman.io/blogs/2019/09/26/podman-in-hpc.html" target="_blank" rel="noopener noreferrer">article</a> using openhpc; well worth a watch and a read.</p><p>If you don't have a RedHat Developer Subscription now is an ideal time to get one:</p><p><a href="https://developers.redhat.com/articles/getting-red-hat-developer-subscription-what-rhel-users-need-know/" target="_blank" rel="noopener noreferrer">https://developers.redhat.com/articles/getting-red-hat-developer-subscription-what-rhel-users-need-know/</a></p><p>..and download RedHat Enterprise 8.1</p><p>Do a Standard RedHat GUI Server default install</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">yum update</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">yum module install container-tools</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>RedHat 8.1 does rootless containers right out of the box. If you created a user during the setup, it'll have the details in /etc/subuid and /etc/subgid already.</p><p>Log in with your userID and you can start creating a container</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">podman pull ubi8/ubi</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">podman run --interactive --tty ubi8/ubi bash</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The first command pulls down the ubi8 Universal Base Image, which is a great building block. The second command starts an interactive ubi8 image at a bash prompt. You can run any commands you like in this:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo ~]$ podman run --interactive --tty ubi8/ubi bash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@f471459c7619 /]# cat /etc/redhat-release</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Red Hat Enterprise Linux release 8.1 (Ootpa)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@f471459c7619 /]#</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Notice how the prompt changed from nbh23@colombo to root@f471459c7619 - the f471459c7619 is the part to remember, we'll interact with that later on in this post. It's a random allocation, so your instance will be different.</p><p>The Podman help menu's are excellent, podman -h gives you a list of subcommands, which you can then also query:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo ~]$ podman -h</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">manage pods and images</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Usage:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  podman [flags]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  podman [command]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Available Commands:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  attach      Attach to a running container</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  build       Build an image using instructions from Dockerfiles</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  commit      Create new image based on the changed container</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  container   Manage Containers</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  cp          Copy files/folders between a container and the local filesystem</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  create      Create but do not start a container</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  diff        Inspect changes on container's file systems</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  events      Show podman events</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  exec        Run a process in a running container</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  export      Export container's filesystem contents as a tar archive</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  generate    Generated structured data</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  healthcheck Manage Healthcheck</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  help        Help about any command</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  history     Show history of a specified image</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  image       Manage images</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  images      List images in local storage</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  import      Import a tarball to create a filesystem image</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  info        Display podman system information</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  init        Initialize one or more containers</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  inspect     Display the configuration of a container or image</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  kill        Kill one or more running containers with a specific signal</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  load        Load an image from container archive</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  login       Login to a container registry</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  logout      Logout of a container registry</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  logs        Fetch the logs of a container</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  mount       Mount a working container's root filesystem</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  pause       Pause all the processes in one or more containers</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  play        Play a pod</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  pod         Manage pods</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  port        List port mappings or a specific mapping for the container</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ps          List containers</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  pull        Pull an image from a registry</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  push        Push an image to a specified destination</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  restart     Restart one or more containers</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  rm          Remove one or more containers</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  rmi         Removes one or more images from local storage</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  run         Run a command in a new container</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  save        Save image to an archive</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  search      Search registry for image</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  start       Start one or more containers</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  stats       Display a live stream of container resource usage statistics</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  stop        Stop one or more containers</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  system      Manage podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  tag         Add an additional name to a local image</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  top         Display the running processes of a container</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  umount      Unmounts working container's root filesystem</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  unpause     Unpause the processes in one or more containers</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  unshare     Run a command in a modified user namespace</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  varlink     Run varlink interface</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  version     Display the Podman Version Information</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  volume      Manage volumes</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  wait        Block on one or more containers</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Flags:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --cgroup-manager string        Cgroup manager to use (cgroupfs or systemd, default systemd)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --cni-config-dir string        Path of the configuration directory for CNI networks</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --config string                Path of a libpod config file detailing container server configuration options</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --conmon string                Path of the conmon binary</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --cpu-profile string           Path for the cpu profiling results</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --default-mounts-file string   Path to default mounts file</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --events-backend string        Events backend to use</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --help                         Help for podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --hooks-dir strings            Set the OCI hooks directory path (may be set multiple times)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --log-level string             Log messages above specified level: debug, info, warn, error, fatal or panic (default "error")</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --namespace string             Set the libpod namespace, used to create separate views of the containers and pods on the system</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --network-cmd-path string      Path to the command for configuring the network</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --root string                  Path to the root directory in which data, including images, is stored</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --runroot string               Path to the 'run directory' where all state information is stored</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --runtime string               Path to the OCI-compatible binary used to run containers, default is /usr/bin/runc</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --storage-driver string        Select which storage driver is used to manage storage of images and containers (default is overlay)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --storage-opt stringArray      Used to pass an option to the storage driver</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --syslog                       Output logging information to syslog as well as the console</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --tmpdir string                Path to the tmp directory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --trace                        Enable opentracing output</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      --version                      Version for podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Use "podman [command] --help" for more information about a command.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo ~]$ podman image -h</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Manage images</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Usage:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  podman image [command]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Available Commands:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  build       Build an image using instructions from Dockerfiles</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  exists      Check if an image exists in local storage</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  history     Show history of a specified image</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  import      Import a tarball to create a filesystem image</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  inspect     Display the configuration of an image</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  list        List images in local storage</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  load        Load an image from container archive</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  prune       Remove unused images</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  pull        Pull an image from a registry</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  push        Push an image to a specified destination</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  rm          Removes one or more images from local storage</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  save        Save image to an archive</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  sign        Sign an image</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  tag         Add an additional name to a local image</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  tree        Prints layer hierarchy of an image in a tree format</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  trust       Manage container image trust policy</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo ~]$</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>We can list out the images and containers as follows, which is handy if you lose track of where you are at.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo ~]$ podman image list</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">REPOSITORY                            TAG      IMAGE ID       CREATED       SIZE</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">registry.access.redhat.com/ubi8/ubi   latest   096cae65a207   5 weeks ago   239 MB</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo ~]$ podman container list</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">CONTAINER ID  IMAGE                                       COMMAND  CREATED      STATUS          PORTS  NAMES</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">a1fc64bd8e47  registry.access.redhat.com/ubi8/ubi:latest  bash     2 hours ago  Up 2 hours ago         zen_albattani</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo ~]$</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>So we created a container to interact with, but how about creating a new image?
I found that Podman is very easy to interact with and created a Dockerfile. This is a list of commands in a text file that controls what gets installed.
Create a new directory - in this case whatshap, to put the Dockerfile in:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo whatshap]$ cat Dockerfile</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">FROM registry.access.redhat.com/ubi8/ubi</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">RUN yum -y update \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">&amp;&amp; yum -y install python3 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">&amp;&amp; yum -y install make \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">&amp;&amp; yum -y install gcc \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">&amp;&amp; yum -y install redhat-rpm-config \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">&amp;&amp; yum -y install zlib-devel \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">&amp;&amp; yum -y install bzip2-devel \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">&amp;&amp; yum -y install xz-devel \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">&amp;&amp; yum -y install python3-devel \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">&amp;&amp; yum clean all</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">RUN pip3 install pysam &amp;&amp; pip3 install whatshap</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then we build the container image - from within the whatshap directory run:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">podman build -t whatshap .</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Notice the '.' at the end, that's important!</p><p>You'll see the container image start to build, with notifications of where it's at. If all goes to plan you will then finally see notification that it's completed:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">STEP 4: COMMIT whatshap</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">d523727fc6c297086e84e7ec99f62e8f5e6d093d9decb1b58ee8a4205d46b3dd</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>We can then check it works:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo whatshap]$ podman run -it whatshap</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@ac05564bd51b /]# whatshap -h</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">usage: whatshap [-h] [--version] [--debug]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                {phase,stats,compare,hapcut2vcf,unphase,haplotag,genotype} ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">positional arguments:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  {phase,stats,compare,hapcut2vcf,unphase,haplotag,genotype}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    phase               Phase variants in a VCF with the WhatsHap algorithm</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    stats               Print phasing statistics of a single VCF file</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    compare             Compare two or more phasings</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    hapcut2vcf          Convert hapCUT output format to VCF</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    unphase             Remove phasing information from a VCF file</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    haplotag            Tag reads by haplotype</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    genotype            Genotype variants</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">optional arguments:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -h, --help            show this help message and exit</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --version             show program's version number and exit</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --debug               Print debug messages</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@ac05564bd51b /]#</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Which all looks good - we now have our container image and can re-run that to do our whatshap analysis.</p><p>All well and good, but what happens about storage of that analysis?</p><p>We can add that to our Podman command, if we have a directory called data in /home we can map that as follows:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">podman run -v /home/nbh23/data:/home/nbh23:z -it whatshap</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The nice thing is that the UID and GID for files created this way all match up. The trailing :z makes selinux happy :-)</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo whatshap]$ podman run -v /home/nbh23/data:/home/nbh23:z -it whatshap</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@fef561d523b8 /]# ls</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@fef561d523b8 /]# cd /home</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@fef561d523b8 home]# ls</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">nbh23</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@fef561d523b8 home]# cd nbh23</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@fef561d523b8 nbh23]# touch testfile</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@fef561d523b8 nbh23]# ls -la</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">total 0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxrwxr-x. 2 root root 22 Jan 21 09:09 .</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x. 3 root root 19 Jan 21 09:09 ..</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">-rw-r--r--. 1 root root  0 Jan 21 09:09 testfile</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@fef561d523b8 nbh23]# exit</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo ~]$ ls</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Containers  data  Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo ~]$ cd data</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo data]$ ls -la</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">total 4</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxrwxr-x.  2 nbh23 nbh23   22 Jan 21 09:09 .</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwx------. 17 nbh23 nbh23 4096 Jan 21 09:07 ..</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">-rw-r--r--.  1 nbh23 nbh23    0 Jan 21 09:09 testfile</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo data]$</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>One of the things I discovered whilst creating a more complex container image was that you can start the existing image into a bash session, doing the manipulation that you require, and then use the Podman commit command to write those changes.
For example using our whatshap container image we can run it as follows:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo data]$ podman run -it whatshap bash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@73c4742e4724 /]#</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>We can then make our alterations, and from another session commit those changes:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo ~]$ podman commit 73c4742e4724 whatshap-altered</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Getting image source signatures</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob c630f5c3e169 skipped: already exists</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob 4bd7408cc1c8 skipped: already exists</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob 1383f0e3c813 skipped: already exists</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob a2ff5e229058 skipped: already exists</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob b75bf3e68dab done</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying config 931b7f5302 done</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Writing manifest to image destination</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Storing signatures</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">931b7f5302af9965bff14e460c19ff9e756d74095940c6d85e63f929006c35f0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo ~]$</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then do podman image list to see what we have:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo ~]$ podman image list</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">REPOSITORY                            TAG      IMAGE ID       CREATED              SIZE</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">localhost/whatshap-altered            latest   931b7f5302af   About a minute ago   545 MB</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">localhost/whatshap                    latest   d523727fc6c2   3 days ago           545 MB</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">registry.access.redhat.com/ubi8/ubi   latest   096cae65a207   5 weeks ago          239</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[nbh23@colombo ~]$</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can make multiple changes to your original container image until you are satisfied that it's working as you'd like.</p><p>This has covered command line container image creation and usage, I'll be creating another blog post detailing graphical interactive containers as i'm aware that there are various interactive visual programs to cover too.</p><p>Feel free to contact me with any ideas or suggestions / questions.</p>]]></content>
        <author>
            <name>bhepworth</name>
        </author>
        <category label="bioinformatics" term="bioinformatics"/>
        <category label="rootless" term="rootless"/>
        <category label="podman" term="podman"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Bioinformatics and rootless containers with Podman]]></title>
        <id>https://podman.io/blogs/2020/01/15/new</id>
        <link href="https://podman.io/blogs/2020/01/15/new"/>
        <updated>2020-01-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Bryan Hepworth demonstrating how to create a rootless container image for a Bioinformatics program here.]]></summary>
        <content type="html"><![CDATA[<p>Bryan Hepworth demonstrating how to create a rootless container image for a Bioinformatics program <a href="https://podman.io/blogs/2020/01/15/bioinformatics-with-rootless-podman.html" target="_blank" rel="noopener noreferrer">here</a>.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Running containers with Podman and shareable systemd services]]></title>
        <id>https://podman.io/blogs/2019/12/17/new</id>
        <link href="https://podman.io/blogs/2019/12/17/new"/>
        <updated>2019-12-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman version 1.7 is coming out soon and will include new features that will make management of containers with systemd services even easier. Valentin Rothberg has a blog post on the Red Hat Enable Sysadmin site that previews the features: Running containers with Podman and shareable systemd services. In the post Valentin goes over the highlights and then gives a great working example.]]></summary>
        <content type="html"><![CDATA[<p>Podman version 1.7 is coming out soon and will include new features that will make management of containers with systemd services even easier. Valentin Rothberg has a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site that previews the features: <a href="https://www.redhat.com/sysadmin/podman-shareable-systemd-services" target="_blank" rel="noopener noreferrer">Running containers with Podman and shareable systemd services</a>. In the post Valentin goes over the highlights and then gives a great working example.</p>]]></content>
        <author>
            <name>vrothberg</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Running containers with Podman and shareable systemd services]]></title>
        <id>https://podman.io/blogs/2019/12/17/podman-systemd-1-7</id>
        <link href="https://podman.io/blogs/2019/12/17/podman-systemd-1-7"/>
        <updated>2019-12-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Running containers with Podman and shareable systemd services</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-bryan-hepworth-github">By Bryan Hepworth <a href="https://github.com/vrothberg" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-bryan-hepworth-github" class="hash-link" aria-label="Direct link to by-bryan-hepworth-github" title="Direct link to by-bryan-hepworth-github">​</a></h2><p>Podman version 1.7 is coming out soon and will include new features that will make management of containers with systemd services even easier. Valentin Rothberg has a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site that previews the features: <a href="https://www.redhat.com/sysadmin/podman-shareable-systemd-services" target="_blank" rel="noopener noreferrer">Running containers with Podman and shareable systemd services</a>. In the post Valentin goes over the highlights and then gives a great working example.</p>]]></content>
        <author>
            <name>vrothberg</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="oci" term="oci"/>
        <category label="networking" term="networking"/>
        <category label="runtime" term="runtime"/>
        <category label="systemd" term="systemd"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Working with Linux containers on RHEL 8 with Podman, image builder and web console]]></title>
        <id>https://podman.io/blogs/2019/12/14/new</id>
        <link href="https://podman.io/blogs/2019/12/14/new"/>
        <updated>2019-12-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Do you want to know how to setup RHEL 8 to run containers using Podman? Xuegang Jin has a blog post on the Red Hat Blog about this very subject, Working with Linux containers on RHEL 8 with Podman, image builder and web console. In the post Xuegang shows you how you can use Image Builder to create an OS image, how to run containers with Podman, and how to check the host and containers performance using Web Console.]]></summary>
        <content type="html"><![CDATA[<p>Do you want to know how to setup RHEL 8 to run containers using Podman? Xuegang Jin has a blog post on the <a href="https://www.redhat.com/en/blog" target="_blank" rel="noopener noreferrer">Red Hat Blog</a> about this very subject, <a href="https://www.redhat.com/en/blog/working-linux-containers-rhel-8-podman-image-builder-and-web-console" target="_blank" rel="noopener noreferrer">Working with Linux containers on RHEL 8 with Podman, image builder and web console</a>. In the post Xuegang shows you how you can use Image Builder to create an OS image, how to run containers with Podman, and how to check the host and containers performance using Web Console.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Working with Linux containers on RHEL 8 with Podman, image builder and web console]]></title>
        <id>https://podman.io/blogs/2019/12/14/rhel8-podman</id>
        <link href="https://podman.io/blogs/2019/12/14/rhel8-podman"/>
        <updated>2019-12-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Working with Linux containers on RHEL 8 with Podman, image builder and web console</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Do you want to know how to setup RHEL 8 to run containers using Podman? Xuegang Jin has a blog post on the <a href="https://www.redhat.com/en/blog" target="_blank" rel="noopener noreferrer">Red Hat Blog</a> about this very subject, <a href="https://www.redhat.com/en/blog/working-linux-containers-rhel-8-podman-image-builder-and-web-console" target="_blank" rel="noopener noreferrer">Working with Linux containers on RHEL 8 with Podman, image builder and web console</a>. In the post Xuegang explains how you can use Image Builder to create an OS image, how to run containers with Podman, and how to check the host and containers performance using Web Console.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Understanding root inside and outside a container]]></title>
        <id>https://podman.io/blogs/2019/12/11/new</id>
        <link href="https://podman.io/blogs/2019/12/11/new"/>
        <updated>2019-12-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Do you run containers as root, or as a regular user? Scott McCarty has a blog post on the Red Hat Blog about this very subject, Understanding root inside and outside a container. In the post Scott walks you through what a rootless container does and how it can be a safer alternative to a container run by root.]]></summary>
        <content type="html"><![CDATA[<p>Do you run containers as root, or as a regular user? Scott McCarty has a blog post on the <a href="https://www.redhat.com/en/blog" target="_blank" rel="noopener noreferrer">Red Hat Blog</a> about this very subject, <a href="https://www.redhat.com/en/blog/understanding-root-inside-and-outside-container" target="_blank" rel="noopener noreferrer">Understanding root inside and outside a container</a>. In the post Scott walks you through what a rootless container does and how it can be a safer alternative to a container run by root.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Understanding root inside and outside a container]]></title>
        <id>https://podman.io/blogs/2019/12/11/understanding-root</id>
        <link href="https://podman.io/blogs/2019/12/11/understanding-root"/>
        <updated>2019-12-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Understanding root inside and outside a container</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Do you run containers as root, or as a regular user? Scott McCarty has a blog post on the <a href="https://www.redhat.com/en/blog" target="_blank" rel="noopener noreferrer">Red Hat Blog</a> about this very subject, <a href="https://www.redhat.com/en/blog/understanding-root-inside-and-outside-container" target="_blank" rel="noopener noreferrer">Understanding root inside and outside a container</a>. In the post Scott walks you through what a rootless container does and how it can be a safer alternative to a container run by root.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Rootless Podman and NFS]]></title>
        <id>https://podman.io/blogs/2019/11/26/new</id>
        <link href="https://podman.io/blogs/2019/11/26/new"/>
        <updated>2019-11-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Dan Walsh has another blog post on the Red Hat Enable Sysadmin site this time about Rootless Podman and NFS. In the post Dan talks about how you can make some minor configuration changes to allow Podman to use a user's home directory on an NFS share. Give it a read!]]></summary>
        <content type="html"><![CDATA[<p>Dan Walsh has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time about <a href="https://www.redhat.com/sysadmin/rootless-podman-nfs" target="_blank" rel="noopener noreferrer">Rootless Podman and NFS</a>. In the post Dan talks about how you can make some minor configuration changes to allow Podman to use a user's home directory on an NFS share. Give it a read!</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Rootless Podman and NFS]]></title>
        <id>https://podman.io/blogs/2019/11/26/rootless-podman-and-nfs</id>
        <link href="https://podman.io/blogs/2019/11/26/rootless-podman-and-nfs"/>
        <updated>2019-11-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Rootless Podman and NFS</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-dan-walsh-github">By Dan Walsh <a href="https://github.com/rhatdan" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-dan-walsh-github" class="hash-link" aria-label="Direct link to by-dan-walsh-github" title="Direct link to by-dan-walsh-github">​</a></h2><p>Dan Walsh has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time about <a href="https://www.redhat.com/sysadmin/rootless-podman-nfs" target="_blank" rel="noopener noreferrer">Rootless Podman and NFS</a>. In the post Dan talks about how you can make some minor configuration changes to allow Podman to use a user's home directory on an NFS share. Give it a read!</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="oci" term="oci"/>
        <category label="nfs" term="nfs"/>
        <category label="network" term="network"/>
        <category label="runtime" term="runtime"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How To Install Podman on Debian]]></title>
        <id>https://podman.io/blogs/2019/11/20/new</id>
        <link href="https://podman.io/blogs/2019/11/20/new"/>
        <updated>2019-11-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Josphat Mutai posted a blog post on the Computing for Geeks site talking about How To Install Podman on Debian. In the post Josphat walks through all the steps necessary from 'A' to 'Z' to get Podman up and running on Debian and how to do some initial Podman commands.]]></summary>
        <content type="html"><![CDATA[<p>Josphat Mutai posted a blog post on the <a href="https://computingforgeeks.com/" target="_blank" rel="noopener noreferrer">Computing for Geeks</a> site talking about <a href="https://computingforgeeks.com/how-to-install-podman-on-debian/" target="_blank" rel="noopener noreferrer">How To Install Podman on Debian</a>. In the post Josphat walks through all the steps necessary from 'A' to 'Z' to get Podman up and running on Debian and how to do some initial Podman commands.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[How To Install Podman on Debian]]></title>
        <id>https://podman.io/blogs/2019/11/20/run-podman-on-debian</id>
        <link href="https://podman.io/blogs/2019/11/20/run-podman-on-debian"/>
        <updated>2019-11-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>How To Install Podman on Debian</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Josphat Mutai posted a blog post on the <a href="https://computingforgeeks.com/" target="_blank" rel="noopener noreferrer">Computing for Geeks</a> site talking about <a href="https://computingforgeeks.com/how-to-install-podman-on-debian/" target="_blank" rel="noopener noreferrer">How To Install Podman on Debian</a>. In the post Josphat walks through all the steps necessary from 'A' to 'Z' to get Podman up and running on Debian and how to do some initial Podman commands.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="oci" term="oci"/>
        <category label="networking" term="networking"/>
        <category label="runtime" term="runtime"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Leasing routable IP addresses with Podman containers]]></title>
        <id>https://podman.io/blogs/2019/11/13/lease-routable-ip-addrs</id>
        <link href="https://podman.io/blogs/2019/11/13/lease-routable-ip-addrs"/>
        <updated>2019-11-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Leasing routable IP addresses with Podman containers</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>Brent Baude has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time about <a href="https://www.redhat.com/sysadmin/leasing-ips-podman" target="_blank" rel="noopener noreferrer">Leasing routable IP addresses with Podman containers</a>. In the post Brent talks about using the macvlan and the dhcp plugins that ship with the container-networking project in order to lease ip addresses for your containers.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="oci" term="oci"/>
        <category label="networking" term="networking"/>
        <category label="runtime" term="runtime"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Leasing routable IP addresses with Podman containers]]></title>
        <id>https://podman.io/blogs/2019/11/13/new</id>
        <link href="https://podman.io/blogs/2019/11/13/new"/>
        <updated>2019-11-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Brent Baude has another blog post on the Red Hat Enable Sysadmin site this time about Leasing routable IP addresses with Podman containers. In the post Brent talks about using the macvlan and the dhcp plugins that ship with the container-networking project in order to lease ip addresses for your containers.]]></summary>
        <content type="html"><![CDATA[<p>Brent Baude has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time about <a href="https://www.redhat.com/sysadmin/leasing-ips-podman" target="_blank" rel="noopener noreferrer">Leasing routable IP addresses with Podman containers</a>. In the post Brent talks about using the macvlan and the dhcp plugins that ship with the container-networking project in order to lease ip addresses for your containers.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Fedora 31 and Control Group v2]]></title>
        <id>https://podman.io/blogs/2019/11/12/F31-Control-Group-v2</id>
        <link href="https://podman.io/blogs/2019/11/12/F31-Control-Group-v2"/>
        <updated>2019-11-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Fedora 31 and Control Group v2</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-dan-walsh-github">By Dan Walsh <a href="https://github.com/rhatdan" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-dan-walsh-github" class="hash-link" aria-label="Direct link to by-dan-walsh-github" title="Direct link to by-dan-walsh-github">​</a></h2><p>Dan Walsh has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time about <a href="https://www.redhat.com/sysadmin/fedora-31-control-group-v2" target="_blank" rel="noopener noreferrer">Fedora 31 and Control Group v2</a>. In the post Dan talks about the new version of control groups that is part of the Fedora 31 release and how it makes containers even more secure.</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="oci" term="oci"/>
        <category label="security" term="security"/>
        <category label="runtime" term="runtime"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Fedora 31 and Control Group v2]]></title>
        <id>https://podman.io/blogs/2019/11/12/new</id>
        <link href="https://podman.io/blogs/2019/11/12/new"/>
        <updated>2019-11-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Dan Walsh has another blog post on the Red Hat Enable Sysadmin site this time about Fedora 31 and Control Group v2. In the post Dan talks about the new version of control groups that is part of the Fedora 31 release and how it makes containers even more secure.]]></summary>
        <content type="html"><![CDATA[<p>Dan Walsh has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time about <a href="https://www.redhat.com/sysadmin/fedora-31-control-group-v2" target="_blank" rel="noopener noreferrer">Fedora 31 and Control Group v2</a>. In the post Dan talks about the new version of control groups that is part of the Fedora 31 release and how it makes containers even more secure.</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Building freely distributed containers with open tools]]></title>
        <id>https://podman.io/blogs/2019/11/08/build-ctrs-with-open-tools</id>
        <link href="https://podman.io/blogs/2019/11/08/build-ctrs-with-open-tools"/>
        <updated>2019-11-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Building freely distributed containers with open tools</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Scott McCarty (@fatherlinux) has an amazing video on YouTube about <a href="https://www.youtube.com/watch?v=Qcys7fKSzB0&amp;t=84" target="_blank" rel="noopener noreferrer">Building freely distributed containers with open tools</a>. As only Scott could say "Although explaining how to ride a Tron-style light cycle is beyond the scope of this tutorial, we will discuss something almost as exhilarating—building containers with #Podman and #RedHat Universal Base Image (UBI). We will cover how to build and run #containers based on #UBI using just your regular user account—no daemon, no root (rootless), no fuss. Finally, we will order the deresolution of all of our containers with a really cool command. You probably won’t be promoted to CEO of ENCOM after this talk, but you will have new tools in your toolbelt for how to find, run, build, and share container images."</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="oci" term="oci"/>
        <category label="security" term="security"/>
        <category label="runtime" term="runtime"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Building freely distributed containers with open tools]]></title>
        <id>https://podman.io/blogs/2019/11/08/new</id>
        <link href="https://podman.io/blogs/2019/11/08/new"/>
        <updated>2019-11-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Scott McCarty (@fatherlinux) has an amazing video on YouTube about Building freely distributed containers with open tools. As only Scott could say "Although explaining how to ride a Tron-style light cycle is beyond the scope of this tutorial, we will discuss something almost as exhilarating—building containers with #Podman and #RedHat Universal Base Image (UBI). We will cover how to build and run #containers based on #UBI using just your regular user account—no daemon, no root (rootless), no fuss. Finally, we will order the deresolution of all of our containers with a really cool command. You probably won’t be promoted to CEO of ENCOM after this talk, but you will have new tools in your toolbelt for how to find, run, build, and share container images."]]></summary>
        <content type="html"><![CDATA[<p>Scott McCarty (@fatherlinux) has an amazing video on YouTube about <a href="https://www.youtube.com/watch?v=Qcys7fKSzB0&amp;t=84" target="_blank" rel="noopener noreferrer">Building freely distributed containers with open tools</a>. As only Scott could say "Although explaining how to ride a Tron-style light cycle is beyond the scope of this tutorial, we will discuss something almost as exhilarating—building containers with #Podman and #RedHat Universal Base Image (UBI). We will cover how to build and run #containers based on #UBI using just your regular user account—no daemon, no root (rootless), no fuss. Finally, we will order the deresolution of all of our containers with a really cool command. You probably won’t be promoted to CEO of ENCOM after this talk, but you will have new tools in your toolbelt for how to find, run, build, and share container images."</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Basic security principles for containers and container runtimes]]></title>
        <id>https://podman.io/blogs/2019/11/07/basic-security-principles</id>
        <link href="https://podman.io/blogs/2019/11/07/basic-security-principles"/>
        <updated>2019-11-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Basic security principles for containers and container runtimes</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>Brent Baude has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time about <a href="https://www.redhat.com/sysadmin/basic-security-principles-containers" target="_blank" rel="noopener noreferrer">Basic security principles for containers and container runtimes</a>. In the post Brent talks about the three core security themes concerning containers and why user privileges matter in the space.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="hpc" term="hpc"/>
        <category label="oci" term="oci"/>
        <category label="security" term="security"/>
        <category label="runtime" term="runtime"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Basic security principles for containers and container runtimes]]></title>
        <id>https://podman.io/blogs/2019/11/07/new</id>
        <link href="https://podman.io/blogs/2019/11/07/new"/>
        <updated>2019-11-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Brent Baude has another blog post on the Red Hat Enable Sysadmin site this time about Basic security principles for containers and container runtimes. In the post Brent talks about the three core security themes concerning containers and why user privileges matter in the space.]]></summary>
        <content type="html"><![CDATA[<p>Brent Baude has another blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site this time about <a href="https://www.redhat.com/sysadmin/basic-security-principles-containers" target="_blank" rel="noopener noreferrer">Basic security principles for containers and container runtimes</a>. In the post Brent talks about the three core security themes concerning containers and why user privileges matter in the space.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Migrating from Docker to Podman]]></title>
        <id>https://podman.io/blogs/2019/11/05/docker2podman</id>
        <link href="https://podman.io/blogs/2019/11/05/docker2podman"/>
        <updated>2019-11-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Migrating from Docker to Podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Elliott Sales de Andrade's post on <a href="https://qulogic.gitlab.io/" target="_blank" rel="noopener noreferrer">Quantum Logic</a>, <a href="https://qulogic.gitlab.io/posts/2019-10-20-migrating-to-podman/" target="_blank" rel="noopener noreferrer">Migrating from Docker to Podman</a> takes a look at his migration from Docker to Podman and a good assessment of where the Podman tool stands in comparison to Docker.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Migrating from Docker to Podman]]></title>
        <id>https://podman.io/blogs/2019/11/05/new</id>
        <link href="https://podman.io/blogs/2019/11/05/new"/>
        <updated>2019-11-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Elliott Sales de Andrade's post on Quantum Logic, Migrating from Docker to Podman takes a look at his migration from Docker to Podman and a good assessment of where the Podman tool stands in comparison to Docker.]]></summary>
        <content type="html"><![CDATA[<p>Elliott Sales de Andrade's post on <a href="https://qulogic.gitlab.io/" target="_blank" rel="noopener noreferrer">Quantum Logic</a>, <a href="https://qulogic.gitlab.io/posts/2019-10-20-migrating-to-podman/" target="_blank" rel="noopener noreferrer">Migrating from Docker to Podman</a> takes a look at his migration from Docker to Podman and a good assessment of where the Podman tool stands in comparison to Docker.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[The current adoption status of cgroup v2 in containers]]></title>
        <id>https://podman.io/blogs/2019/10/31/cgroupv2</id>
        <link href="https://podman.io/blogs/2019/10/31/cgroupv2"/>
        <updated>2019-10-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>The current adoption status of cgroup v2 in containers</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>In case you missed Akihiro Suda's post on <a href="https://medium.com/" target="_blank" rel="noopener noreferrer">Medium.com</a>, <a href="https://medium.com/nttlabs/cgroup-v2-596d035be4d7" target="_blank" rel="noopener noreferrer">The current adoption status of cgroup v2 in containers</a>, here's a quick link to it. In the article Akihiro talks all things cgroup v2 and what changes it promises to bring to the world of containers, and Podman is at the forefront of that change.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The current adoption status of cgroup v2 in containers]]></title>
        <id>https://podman.io/blogs/2019/10/31/new</id>
        <link href="https://podman.io/blogs/2019/10/31/new"/>
        <updated>2019-10-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In case you missed Akihiro Suda's post on Medium.com, The current adoption status of cgroup v2 in containers, here's a quick link to it. In the article Akihiro talks all things cgroup v2 and what changes it promises to bring to the world of containers, and Podman is at the forefront of that change.]]></summary>
        <content type="html"><![CDATA[<p>In case you missed Akihiro Suda's post on <a href="https://medium.com/" target="_blank" rel="noopener noreferrer">Medium.com</a>, <a href="https://medium.com/nttlabs/cgroup-v2-596d035be4d7" target="_blank" rel="noopener noreferrer">The current adoption status of cgroup v2 in containers</a>, here's a quick link to it. In the article Akihiro talks all things cgroup v2 and what changes it promises to bring to the world of containers, and Podman is at the forefront of that change.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[First Look&#58; Rootless Containers and cgroup v2 on Fedora 31]]></title>
        <id>https://podman.io/blogs/2019/10/29/new</id>
        <link href="https://podman.io/blogs/2019/10/29/new"/>
        <updated>2019-10-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Want to allow your users without privileges to run a container securerly on your host? Then this post Rootless Containers and cgroup v2 on Fedora 31 will show you how. It's quick, it's easy, it's secure and it won't even cost $19.99!]]></summary>
        <content type="html"><![CDATA[<p>Want to allow your users without privileges to run a container securerly on your host? Then this post: <a href="https://podman.io/blogs/2019/10/29/podman-crun-f31.html" target="_blank" rel="noopener noreferrer">First Look: Rootless Containers and cgroup v2 on Fedora 31</a> will show you how. It's quick, it's easy, it's secure and it won't even cost $19.99!</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[First Look&#58; Rootless Containers and cgroup v2 on Fedora 31]]></title>
        <id>https://podman.io/blogs/2019/10/29/podman-crun-f31</id>
        <link href="https://podman.io/blogs/2019/10/29/podman-crun-f31"/>
        <updated>2019-10-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>First Look<!-- -->:<!-- --> Rootless Containers and cgroup v2 on Fedora 31</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>I often times stay up too late at night watching late night television and run into these crazy commercials that tell you how easy their product is to use. If you’ve stayed up too, you know them as well. Just put your chicken and veggies in our oven, press 3 buttons and 45 minutes later a perfectly cooked meal! Easy! Got a leak? Slap on this tape and no more leak! Easy! Got a messy floor, just use this sweeper and you’ve the cleanest floor in the neighborhood! Easy!</p><p>Podman runs secure rootless containers and it really is easy! Trust me, I’m not like those other folks! As we’ve had a number of people asking us about what’s needed to set Podman rootless containers up, I decided to run through the process myself and to blog about the steps I took.</p><p>The first bit of the work has to be done as either the root user or someone with root privileges. For this walkthrough I used the root user on the console and the first thing I did was to upgrade my Fedora 30 Virtual Machine (VM) to Fedora 31. If you want to install Fedora 31 directly, the beta version just became available at the time of this writing, you could do that instead. The steps to do the upgrade are:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># dnf -y upgrade --refresh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># dnf -y install dnf-plugin-system-upgrade</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># dnf -y system-upgrade download --releasever=31</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># dnf system-upgrade reboot</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>After the machine finished rebooting, my VM was running Fedora 31 so now I needed to install Podman with <code>dnf -y install podman</code>. After that completes, verify that you have Podman Version 1.6.2 or higher.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># podman version</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Version:            1.6.2</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">RemoteAPI Version:  1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Go Version:         go1.13.1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">OS/Arch:            linux/amd64</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now I’m going to follow the steps in the <a href="https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md" target="_blank" rel="noopener noreferrer">Basic Setup and Use of Podman in a Rootless environments</a> tutorial to do the configuration necessary to run rootless containers.</p><p>Podman running rootless containers does have a few software dependencies. Most if not all of these should be installed for you on Fedora 31 by default, but just to verify I did:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># dnf -y install slirp4netns fuse-overlayfs</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Last metadata expiration check: 0:02:26 ago on Sat 14 Sep 2019 07:56:03 PM EDT.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Package slirp4netns-0.4.0-20.1.dev.gitbbd6f25.fc31.x86_64 is already installed.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Package fuse-overlayfs-0.6.2-2.git67a4afe.fc31.x86_64 is already installed.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Dependencies resolved.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Nothing to do.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Complete!</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now the user namespaces need to be setup. Rootless Podman requires the user running it to have a range of UIDs and GIDs listed in the /etc/subuid and /etc/subgid files. These files control which UIDs and GIDs the user is allocated to use on the system. Depending upon how your user was first created, these files may already have entries in them for your user. If so, you don’t need to do anything else. If not, then you can edit either file directly, or you can use <code>useradd</code> to create the user and allocate entries in both files, or you can use the <code>usermod</code> command to allocate them for a preexisting user. In this example usermod has allocated the values from 10000 to 55537 for the local “tom” account to use in our system.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># usermod -v 10000-65536 -w 10000-65536 tom</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># cat /etc/subuid</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tom:10000:55537</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># cat /etc/subgid</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tom:10000:55537</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If you have multiple users, you’ll need to be sure that the ranges that are assigned to them in either <code>/etc/subuid</code> or <code>/etc/subgid</code> don’t overlap or they could gain control of the other persons containers in that overlap.</p><p>Now we’re done running with a privileged account. From here on out we can run as a non-privileged user, so I next opened up a new terminal and ssh’d into the host using the non-privileged ‘tom’ account:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ ssh tom@192.168.122.228</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tom@192.168.122.228's password:</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The first thing to do is to check for the <code>crun</code> command.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># whereis crun</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">crun: /usr/bin/crun /usr/share/man/man1/crun.1.gz</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The <code>crun</code> command is the runtime the allows for cgroup V2 support and is supplied starting with Fedora 31. Other container systems use the <code>runc</code> runtime. However, runc only supports cgroup V1. The cgroup kernel feature allows you to allocate resources such as CPU time, network bandwidth and system memory to a container. Version 1 of cgroup only supports containers that are run by root, while version 2 supports containers that are run by root or a non-privileged user.</p><p>A few tweaks to the ‘tom’ account config files may be needed, in most cases these files will not need tweaking, but let’s verify them. The first up is libpod.conf and to get a default variant of that file, just run <code>podman info</code> first.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ podman info</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ vi .config/containers/libpod.conf</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>And if it’s not already set, set the <code>runtime</code> option in libpod.conf to “crun”.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">runtime = "crun"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then in <code>.config/containers/storage.conf</code> make sure the <code>mount_program = “/usr/bin/fuse-overlayfs”</code> line is uncommented.</p><p>Just that easy, you’re ready to run Rootless Podman. See I told you I’m not like those other guys! Let’s try setting up a rootless container running httpd. Let’s create this Dockerfile in the local directory:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ cat Dockerfile</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">FROM registry.access.redhat.com/ubi8/ubi:8.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">MAINTAINER Podman Mailing List &lt;podman@lists.podman.io&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ENV DOCROOT=/var/www/html</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">RUN yum --disableplugin=subscription-manager --nodocs -y install httpd \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  &amp;&amp; yum --disableplugin=subscription-manager clean all \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  &amp;&amp; echo "Hello from the httpd-parent container!" &gt; ${DOCROOT}/index.html</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">EXPOSE 80</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">CMD httpd -D FOREGROUND</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>And now build using it:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$  podman build -t myhttp .</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">STEP 1: FROM registry.access.redhat.com/ubi8/ubi:8.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Getting image source signatures</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob 641d7cc5cbc4 done</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob c65691897a4d done</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying config 11f9dba4d1 done</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Writing manifest to image destination</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Storing signatures</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">STEP 2: MAINTAINER Podman Mailing List &lt;podman@lists.podman.io&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bed974e664909b511f14e2cc21a59642c81fd1d958db12d7ef8fdc1e74f3d364</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">STEP 3: ENV DOCROOT=/var/www/html</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">5eee83e1e640a4aa2c5f39caa11c3a24ec22e37f99633c2ee9912e8f65a5ff81</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">STEP 4: RUN yum --disableplugin=subscription-manager --nodocs -y install httpd   &amp;&amp; yum --disableplugin=subscription-manager clean all   &amp;&amp; echo "Hello from the httpd-parent container!" &gt; ${DOCROOT}/index.html</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Red Hat Universal Base Image 8 (RPMs) - AppStre 1.0 MB/s | 2.3 MB     00:02</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Red Hat Universal Base Image 8 (RPMs) - BaseOS  769 kB/s | 754 kB     00:00</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Dependencies resolved.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">{A number of normal yum output lines removed for brevity}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Installed:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  httpd-2.4.37-12.module+el8.0.0+4096+eb40e6da.x86_64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  apr-util-openssl-1.6.1-6.el8.x86_64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  apr-util-bdb-1.6.1-6.el8.x86_64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  apr-1.6.3-9.el8.x86_64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  apr-util-1.6.1-6.el8.x86_64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  httpd-tools-2.4.37-12.module+el8.0.0+4096+eb40e6da.x86_64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  mod_http2-1.11.3-3.module+el8.0.0+4096+eb40e6da.x86_64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  httpd-filesystem-2.4.37-12.module+el8.0.0+4096+eb40e6da.noarch</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  mailcap-2.1.48-3.el8.noarch</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  redhat-logos-httpd-80.7-1.el8.noarch</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Complete!</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">16 files removed</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">45fcaaf719615e97190bf38aa9d8d06e5437f0e10741343fd318777647584d6f</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">STEP 5: EXPOSE 80</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">865abb5a809cb0ffbc63fef2def892595fe54cfeffc67013a0096a5f0fff4b27</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">STEP 6: CMD httpd -D FOREGROUND</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">STEP 7: COMMIT myhttp</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">f8d0bf10faa0460a111283a51d95e94421d1a46a21bca7f6f43a762469504593</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now to verify the myhttp image has been created:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ podman images</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">REPOSITORY                            TAG      IMAGE ID       CREATED         SIZE</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">localhost/myhttp                      latest   a76baf5989a3   2 minutes ago   236 MB</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">registry.access.redhat.com/ubi8/ubi   8.0      11f9dba4d1bc   5 weeks ago     216 MB</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Let’s now run our container and check that the http server is responding:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ podman run --detach --name myhttp_ctr localhost/myhttp 30d8b54f63c5d2a8ecbe30b56546082e32e701a87c98df81ee0d2565ed33db72</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ curl localhost</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">curl: (7) Failed to connect to localhost port 80: Connection refused</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>But wait! Why did the curl command fail rather than return our index.html output from our webserver? That’s because we’re running a rootless container and the user running this container doesn’t have the privilege to connect to the container host’s port 80 for the webserver. So how can we be certain that the webserver is up and running? First let’s see if the container is up:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ podman ps</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">CONTAINER ID  IMAGE                    COMMAND               CREATED        STATUS            PORTS  NAMES</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">30d8b54f63c5  localhost/myhttp:latest  /bin/sh -c httpd ...  3 minutes ago  Up 3 minutes ago         myhttp_ctr</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The container appears to be up and running. Let’s exec into it and see if we can resolve the web server from inside of the container:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ podman exec -it myhttp_ctr /bin/bash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bash-4.4# curl localhost</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Hello from the httpd-parent container!</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>We’ve made contact with our web server from within the container. Granted this is not the most useful example from a real world side of things. However, it does show how a rootless container is able to run while the administrator of the host can build a good secure separation from the rootless container. Rootless containers keep unprivileged users from running or controlling things they should not on the host.</p><p>Setting up a host to run rootless containers using Podman is a relatively painless process. Out of the box the only thing that may need to be done is to add entries in the /etc/subuid and /etc/subgid files for users that will be running containers. That’s it! We did a little more checking on the files above, but that wasn’t required. Once the user has those entries created for them, they can run containers in their own space without controlling things on the host that they should not. It really is just that easy, and best yet, you didn’t even have to stay up late at night so you could call now “For just $19.99 we’ll give you rootless containers and if you sign up now, you can run them safely too!”. Instead, rootless containers are there and ready for your use starting in Podman v1.6.2 right now.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="hpc" term="hpc"/>
        <category label="rootless" term="rootless"/>
        <category label="crun" term="crun"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman and NFS]]></title>
        <id>https://podman.io/blogs/2019/10/28/new</id>
        <link href="https://podman.io/blogs/2019/10/28/new"/>
        <updated>2019-10-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Adrian Reber wrote up a quick post on "Podman and NFS" here. In the article Adrian shows how he extended his HPC environment to us a shared NFS home directory.]]></summary>
        <content type="html"><![CDATA[<p>Adrian Reber wrote up a quick post on "Podman and NFS" <a href="https://podman.io/blogs/2019/10/28/podman-with-nfs.html" target="_blank" rel="noopener noreferrer">here</a>. In the article Adrian shows how he extended his HPC environment to us a shared NFS home directory.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman and NFS]]></title>
        <id>https://podman.io/blogs/2019/10/28/podman-with-nfs</id>
        <link href="https://podman.io/blogs/2019/10/28/podman-with-nfs"/>
        <updated>2019-10-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman and NFS</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-adrian-reber-github">By Adrian Reber <a href="https://github.com/adrianreber" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-adrian-reber-github" class="hash-link" aria-label="Direct link to by-adrian-reber-github" title="Direct link to by-adrian-reber-github">​</a></h2><p>In my previous <a href="https://podman.io/blogs/2019/09/26/podman-in-hpc.html" target="_blank" rel="noopener noreferrer">Podman in HPC
environments</a> article I
introduced how Podman can be used to run containers under the control of Open
MPI. In this article I want to extend my HPC environment to use a shared NFS
home directory.</p><p>The following examples are running on CentOS 7.7 and are
configuring Podman for rootless usage based on <a href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html-single/managing_containers/index#running_containers_as_root_or_rootless" target="_blank" rel="noopener noreferrer">the official
documentation</a>.</p><p>The user in my examples is named <em>centos</em>.</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sh</span><span class="token plain"> -c </span><span class="token string" style="color:#e3116c">"echo 'user.max_user_namespaces=28633' &gt; /etc/sysctl.d/userns.conf"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> sysctl -p /etc/sysctl.d/userns.conf</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sh</span><span class="token plain"> -c </span><span class="token string" style="color:#e3116c">"echo 'centos:200000:65536' &gt;&gt; /etc/subuid"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">sh</span><span class="token plain"> -c </span><span class="token string" style="color:#e3116c">"echo 'centos:200000:65536' &gt;&gt; /etc/subgid"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>With this the system should be ready to run rootless containers. As I am focussing
on containers running under Open MPI's control I am using Podman with <em>--net=host</em>,
as mentioned in my <a href="https://podman.io/blogs/2019/09/26/podman-in-hpc.html" target="_blank" rel="noopener noreferrer">previous article</a>.</p><p>During system setup I am also configuring Podman to be ready to run on a NFS
based home directory because, as far as I know, it is not possible for Podman
to correctly setup the necessary <a href="https://man7.org/linux/man-pages/man7/user_namespaces.7.html" target="_blank" rel="noopener noreferrer">user
namespaces</a> when
the storage backend is running on NFS.</p><p>The following commands are necessary on my system to tell Podman to use
<em>/tmp/centos/containers</em> as the storage backend:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> info</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sed</span><span class="token plain"> -e </span><span class="token string" style="color:#e3116c">"s,graphroot.*$,graphroot = </span><span class="token string entity" style="color:#36acaa">\"</span><span class="token string" style="color:#e3116c">/tmp/centos/containers</span><span class="token string entity" style="color:#36acaa">\"</span><span class="token string" style="color:#e3116c">,g"</span><span class="token plain"> -i .config/containers/storage.conf</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">rm</span><span class="token plain"> -f ./.local/share/containers/storage/libpod/bolt_state.db ./.local/share/containers/cache/blob-info-cache-v1.boltdb</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The first command lets Podman create an initial configuration for the current
system. As the home directory is on a NFS mounted directory it is necessary to
tell Podman to use a non NFS directory for backend storage
(<em>/tmp/centos/containers</em> in this example). As this happens during initial
system (or user) configuration and no container has yet been run by Podman I
can easily delete Podman's local database which contains reference to the home
directory as the storage backend. With these 3 steps Podman is ready to be used
on a NFS based home directory once the user logs in for the first time.</p><p>I am now running the same Open MPI based container example as in my
<a href="https://podman.io/blogs/2019/09/26/podman-in-hpc.html" target="_blank" rel="noopener noreferrer">previous article</a>.</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ mpirun --hostfile hostfile </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   --mca orte_tmpdir_base /tmp/podman-mpirun </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> run --env-host </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     -v /tmp/podman-mpirun:/tmp/podman-mpirun </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     --userns</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">keep-id </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     --net</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">host --pid</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">host --ipc</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">host </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     quay.io/adrianreber/mpi-test:30 /home/ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> has cleared MPI_Init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> has completed ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> has completed MPI_Barrier</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> has cleared MPI_Init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> has completed ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> has completed MPI_Barrier</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> has cleared MPI_Init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> has completed ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> has completed MPI_Barrier</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> has cleared MPI_Init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> has completed ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> has completed MPI_Barrier</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The difference to the previous article is that my home directory is now NFS
based. Podman will now go to the specified registry (<em>quay.io</em>) to download for
each host involved in the MPI job the specified container to
<em>/tmp/centos/containers</em>.</p><p>This enables me to use Podman in a even more HPC like environment where shared
home directories are very common to share input and output data.</p>]]></content>
        <author>
            <name>adrianr</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="hpc" term="hpc"/>
        <category label="nfs" term="nfs"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[PMM Server + podman&#58; Running a Container Without root Privileges]]></title>
        <id>https://podman.io/blogs/2019/10/23/Perona-PMM</id>
        <link href="https://podman.io/blogs/2019/10/23/Perona-PMM"/>
        <updated>2019-10-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>PMM Server + podman: Running a Container Without root Privileges</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Ceri Williams talks about how the Percona Monitoring and Management (PMM) can be run in a container using Podman without root privileges <a href="https://www.percona.com/blog/2019/10/22/pmm-server-podman-running-a-container-without-root-privileges/?utm_campaign=2019%20Blog%20Q4&amp;utm_content=103803368&amp;utm_medium=social&amp;utm_source=twitter&amp;hss_channel=tw-35373186" target="_blank" rel="noopener noreferrer">here</a>. In the post Ceri talks about how Percona was able to replace Docker with Podman and Buildah and are able to run containers more securely by doing so.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[PMM Server + podman&#58; Running a Container Without root Privileges]]></title>
        <id>https://podman.io/blogs/2019/10/23/new</id>
        <link href="https://podman.io/blogs/2019/10/23/new"/>
        <updated>2019-10-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Ceri Williams talks about how the Percona Monitoring and Management (PMM) can be run in a container using Podman without root privileges here. In the post Ceri talks about how Percona was able to replace Docker with Podman and Buildah and are able to run containers more securely by doing so.]]></summary>
        <content type="html"><![CDATA[<p>Ceri Williams talks about how the Percona Monitoring and Management (PMM) can be run in a container using Podman without root privileges <a href="https://www.percona.com/blog/2019/10/22/pmm-server-podman-running-a-container-without-root-privileges/?utm_campaign=2019%20Blog%20Q4&amp;utm_content=103803368&amp;utm_medium=social&amp;utm_source=twitter&amp;hss_channel=tw-35373186" target="_blank" rel="noopener noreferrer">here</a>. In the post Ceri talks about how Percona was able to replace Docker with Podman and Buildah and are able to run containers more securely by doing so.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Generate SECCOMP Profiles for Containers Using Podman and eBPF]]></title>
        <id>https://podman.io/blogs/2019/10/15/generate-seccomp-profiles</id>
        <link href="https://podman.io/blogs/2019/10/15/generate-seccomp-profiles"/>
        <updated>2019-10-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Generate SECCOMP Profiles for Containers Using Podman and eBPF</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-valentin-rothberg-github">By Valentin Rothberg <a href="https://github.com/vrothberg" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-valentin-rothberg-github" class="hash-link" aria-label="Direct link to by-valentin-rothberg-github" title="Direct link to by-valentin-rothberg-github">​</a></h2><p>Containers run everywhere. They run in the cloud, they run on IoT devices, they run in small and in big companies and wherever they run, we want them to run as securely as possible. In this article, I describe the <a href="https://summerofcode.withgoogle.com/" target="_blank" rel="noopener noreferrer">Google Summer of Code</a> project that <a href="https://twitter.com/weirdwiz_" target="_blank" rel="noopener noreferrer">Divyansh Kamboj</a>, <a href="https://twitter.com/rhatdan" target="_blank" rel="noopener noreferrer">Dan Walsh</a> and <a href="https://twitter.com/vlntnrthbrg" target="_blank" rel="noopener noreferrer">I</a> have been working on and how we improved the state of the art in securing containers, and how you can try it out.</p><h1>Background</h1><p>At <a href="https://www.devconf.info/cz/" target="_blank" rel="noopener noreferrer">DevConf.cz</a> in early 2019, Dan Walsh and I were talking about container security and how we could improve the status quo in a user-friendly fashion. Among other things, we talked about <a href="https://man7.org/linux/man-pages/man2/seccomp.2.html" target="_blank" rel="noopener noreferrer">seccomp</a>, a widely used security feature of Linux. At its very core, seccomp allows for filtering the syscalls invoked by a process and can thereby be used to restrict which syscalls a given process is allowed to execute. Many software projects such as Android, Flatpak, Chrome and Firefox use seccomp to further tighten the security. One threat model seccomp protects against is the damage a malicious process can do. The fewer syscalls are available, the smaller is the attack surface. Hence, an attacker might gain control over some process of a web browser but seccomp will restrict the set of available syscalls to only those it needs. For instance, the syscalls needed for a rendering a website. The reduced attack surface can prevent the attacker from gaining control over the system. This makes seccomp a powerful security tool but while talking about it Dan and I quickly realized there is room for improvement.</p><p>The tricky part of security is making it user friendly. A security mechanism should not turn into an annoyance or an obstacle. Otherwise some users will turn it off. Most container tools use a default seccomp filter which was initially written by <a href="https://twitter.com/jessfraz?lang=de" target="_blank" rel="noopener noreferrer">Jesse Frazelle</a> for Docker. This default filter found a balance between tightening the security while remaining portable to allow most workloads to run without receiving permission errors. The fact that this default filter is used by Docker, Podman, CRI-O, containerd and other tools on millions of deployments around the globe, shows its importance and impact. However, the default filter is pretty loose and it still allows more than 300 of the 435 syscalls on Linux 5.3 x86_64. The high number of available syscalls is essential to support as many containers as possible but according to Aqua Sec, most containers require only <a href="https://blog.aquasec.com/aqua-3.2-preventing-container-breakouts-with-dynamic-system-call-profiling" target="_blank" rel="noopener noreferrer">40 to 70 syscalls</a>. This means that the syscall attack surface of an average container could further be reduced by around 80 percent. But if we want to restrict more syscalls than the default filter, we face the problem of finding out which syscalls a container actually needs. That’s the problem we decided to work on and to ultimately come up with an open-source solution that users can easily use and integrate into their workflows.</p><p>Dan and I started to philosophize about how we wanted to tackle the problem of finding out which syscalls a given container needs. Statically analyzing the code is theoretically optimal as we can determine the exact set of syscalls the program needs. But we quickly run into practical issues where corner cases cannot be covered and where users need a deep understanding of the code and certainly of the limitations of the individual analyzers. Such approaches are also programming-language specific and hence not generally applicable. All in all, static analysis does not provide the level of user friendliness and automation we wanted. Hence, we decided upon runtime analysis and proposed a project for Google Summer of Code under the umbrella of the <a href="https://getfedora.org/" target="_blank" rel="noopener noreferrer">Fedora project</a>. The project proposal was to trace the processes running inside a container and to create a seccomp filter based on the set of recorded syscalls. The proposal was eventually accepted and we are thrilled how far we came thanks to Divyansh Kamboj who worked with us during this summer and who has turned into an active contributor to our <a href="https://github.com/containers" target="_blank" rel="noopener noreferrer">github.com/containers</a> projects.</p><h1>Tracing the syscalls of a container</h1><p>After some initial experiments with <a href="https://en.wikipedia.org/wiki/Ptrace" target="_blank" rel="noopener noreferrer">ptrace</a>, we were looking for an alternative tracing mechanism. Ptrace has some considerable performance impacts that we were not willing to take, so Divyansh explored the idea of using audit logging of seccomp actions. Since Linux v4.14, the actions of seccomp filters can be recorded in the audit log. Using seccomp to create a new seccomp filter was tempting and the initial experiments have shown promising results until we started to run multiple containers in parallel. We could see and track which syscalls have been used but we could not figure out which process and hence which syscall belongs to which container. The Linux kernel community is currently debating to add an <a href="https://lwn.net/Articles/750313/" target="_blank" rel="noopener noreferrer">audit container ID</a> which identifies a container in the logs but there is no consensus yet and we do not expect a solution in the near future. We had to find another solution.</p><p>Eventually, we decided to use the <a href="https://lwn.net/Articles/740157/" target="_blank" rel="noopener noreferrer">extended Berkeley Packet Filter (eBPF)</a> for tracing. eBPF allows for writing custom programs that can hook into various code paths in the kernel. These programs can be injected from user space into the kernel who interprets them in a special virtual machine. BPF was originally written to inspect networking packets directly in the kernel to achieve the lowest possible latency and best performance. Nowadays, with eBPF we can inspect many more aspects of the kernel. For our purpose, we hook into the sysenter tracepoint when entering the kernel from user space. This allows us to quickly inspect which syscalls are called by a given process. Although eBPF is fast, we still faced the aforementioned absence of a container concept in the kernel, so we had to find a way to know if a given process is part of the container we want to trace or not. We decided to identify a container by its PID namespace. If the PID namespace of the process we hit in our eBPF program corresponds to the container we are currently tracing, then we record the syscall. Ultimately, if a container creates a new PID namespace, we will not trace processes inside the new namespace and generate an inaccurate filter. But that is pretty much the only limitation.</p><h1>The OCI seccomp bpf hook</h1><p>We implemented the syscall tracer as an Open Container Initiative (OCI) <a href="https://github.com/opencontainers/runtime-spec/blob/master/config.md#posix-platform-hooks" target="_blank" rel="noopener noreferrer">runtime hook</a>. OCI runtime hooks are called at different stages of the lifecycle of a container and are executed by OCI-compliant container runtimes, such as runc. Runc is used to spawn and run containers, and is the default runtime of Podman, containerd, Docker and many other tools. Our syscall-tracing hook runs at the prestart stage, where the init process of the container is created but not yet started. At this point, we can extract the PID namespace of the container, compile the eBPF program and start it. All this happens before the container is started, so we do not run into a race condition and avoid losing any early syscalls of the container. Once the eBPF program is running, we detach it from the hook and the container runtime can start the container. All source code is open source and can be downloaded from <a href="https://github.com/containers/oci-seccomp-bpf-hook" target="_blank" rel="noopener noreferrer">github.com/containers/oci-seccomp-bpf-hook</a>. We are currently creating packages for Fedora and CentOS and hope to provide packages for more distributions in the near future. In the following, we go through a step-by-step example how the hook can be used in practice.</p><p>Let’s first install <a href="https://podman.io/" target="_blank" rel="noopener noreferrer">Podman</a>. Podman is a daemonless container engine for running containers and Pods and supports running <a href="https://opensource.com/article/19/2/how-does-rootless-podman-work" target="_blank" rel="noopener noreferrer">rootless containers</a>.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo dnf install -y podman</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Next, we clone the git repository of the OCI seccomp bpf hook to compile and install it. Note that we need to install a few more packages in order to compile the hook.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo dnf install -y bcc-devel bcc-tools git golang libseccomp-devel golang-github-cpuguy83-md2man make</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ git clone https://github.com/containers/oci-seccomp-bpf-hook.git</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ cd oci-seccomp-bpf-hook</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ make binary</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ PREFIX=/usr sudo make install</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now, with the hook being installed we can use Podman to run a container and use the hook for tracing syscalls. eBPF requires root privileges so we cannot make use of Podman’s rootless support while tracing. However, we can use the generated seccomp profiles for running the workloads in a rootless container.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman run --annotation io.containers.trace-syscall=of:/tmp/ls.json fedora:30 ls / &gt; /dev/null</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>In the upper example, we are running ls in a fedora:30 container. The annotation io.containers.trace-syscall is used to start our hook while its value expects a mandatory output file (short “of:”) that points to a path where we want the new seccomp filter to be written. In fact, the output file is a json file which is often referred to as a seccomp profile that container engines such as Podman and Docker will eventually parse and compile into a seccomp filter for the kernel. When inspecting the generated profile we will notice that there are more syscalls than ls executes. Those syscalls are the ones that runc invokes after having applied the seccomp profile and before starting the container, so they are essential to prevent us from getting permission errors when reusing the profile. However, we do not need to worry about that as the hook is clever enough to add these syscalls. Let’s run a few containers using the generated profile.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman run --security-opt seccomp=/tmp/ls.json fedora:30 ls / &gt; /dev/null</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman run --security-opt seccomp=/tmp/ls.json fedora:30 ls -l / &gt; /dev/null</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ls: cannot access '/': Operation not permitted</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Maybe you are as surprised as we were when first running this very example. It seems that ls uses additional syscalls with the -l flag which instructs ls to use a more verbose listing format. This example shows a limitation of our approach since the quality and completeness of the generated seccomp profile depends on the exhaustiveness when tracing, and that’s clearly something to keep in mind when using the hook. To avoid rerunning everything from scratch, the hook allows for the specification of an additional input file. This input file serves as a baseline to which all traced syscalls are added. This way, we do not need to redundantly run all, potentially time-costly, previous workloads but can add new data on top. Let’s try this out and rerun ls -l.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman run --annotation io.containers.trace-syscall=”if:/tmp/ls.json;of:/tmp/lsl.json” fedora:30 ls -l / &gt; /dev/null</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>As mentioned above, we need root privileges for running the eBPF hook. But now, as we have generated the new seccomp profile, we can use it for running the same workload in a rootless container.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ id -u</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">1000</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ podman run --security-opt seccomp=/tmp/lsl.json fedora:30 ls -l / &gt; /dev/null</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h1>When can I lock down my container?</h1><p>One of the issues with attempting to generate seccomp profiles this way is that we cannot always be sure of having crossed all code paths that the container can potentially run. But if we have fairly extensive tests we should be able to gather a substantial amount of the syscalls for running the container within our CI/CD system. Now when we put our container into production, we can continue tracing the syscalls in the new environment. For example, if you use Kubernetes you could send the annotation down to <a href="https://github.com/cri-o/cri-o" target="_blank" rel="noopener noreferrer">CRI-O</a> and it would run the hook. Now, we can periodically check if the generated profile has changed over time. If we do not see new syscalls added for a given amount of time, we can feel confident to start using the profile. If a container using the profile gets blocked from using a syscall, the kernel will continue to report these in the audit.log which allows us to manually look for missing syscalls.</p><h1>Try it out!</h1><p>It was essential for us to base our work on open standards, which is why we decided to use the hooks specified in the OCI runtime specification. This way, our approach works with OCI compliant container runtimes such as runc or crun. Furthermore, we did not want to tie the tracing feature to a specific container engine. We wanted different tools such as Podman, Docker, CRI-O or containerd to be able to use the hook to encourage collaboration across different communities. Hence, we chose to use an OCI runtime annotation (i.e., io.containers.trace-syscall) to trigger the hook which is a generally supported feature.</p><p>As a next step, feel free to generate your own seccomp profiles with the oci-seccomp-bpf-hook. We would love to have feedback and always welcome contributions.</p>]]></content>
        <author>
            <name>vrothberg</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="security" term="security"/>
        <category label="seccomp" term="seccomp"/>
        <category label="oci" term="oci"/>
        <category label="bpf" term="bpf"/>
        <category label="ebpf" term="ebpf"/>
        <category label="tracing" term="tracing"/>
        <category label="syscall" term="syscall"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Generate SECCOMP Profiles for Containers Using Podman and eBPF]]></title>
        <id>https://podman.io/blogs/2019/10/15/new</id>
        <link href="https://podman.io/blogs/2019/10/15/new"/>
        <updated>2019-10-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Valentin Rothberg checks in with the "Generate SECCOMP Profiles for Containers Using Podman and eBPF" blog here. In the article Valentin introduces the OCI seccomp hook which allows you to trace the syscalls of a container and then runs through a working example.]]></summary>
        <content type="html"><![CDATA[<p>Valentin Rothberg checks in with the "Generate SECCOMP Profiles for Containers Using Podman and eBPF" blog <a href="https://podman.io/blogs/2019/10/15/generate-seccomp-profiles.html" target="_blank" rel="noopener noreferrer">here</a>. In the article Valentin introduces the OCI seccomp hook which allows you to trace the syscalls of a container and then runs through a working example.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Say “Hello” to Buildah, Podman, and Skopeo]]></title>
        <id>https://podman.io/blogs/2019/10/14/1-new</id>
        <link href="https://podman.io/blogs/2019/10/14/1-new"/>
        <updated>2019-10-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Saharsh Singh talks about how he's moved on from his Docker daemon and moved on to Podman, Buildah and Skopeo here on the Red Hat Service Blog site. Saharsh walks you through a history of container tools and then talks about Podman, Buildah and Skopeo with a lot of great examples.]]></summary>
        <content type="html"><![CDATA[<p>Saharsh Singh talks about how he's moved on from his Docker daemon and moved on to Podman, Buildah and Skopeo <a href="https://servicesblog.redhat.com/2019/10/09/say-hello-to-buildah-podman-and-skopeo/?sc_cid=701f2000000txokAAA&amp;utm_source=bambu&amp;utm_medium=social&amp;utm_campaign=abm" target="_blank" rel="noopener noreferrer">here</a> on the Red Hat Service Blog site. Saharsh walks you through a history of container tools and then talks about Podman, Buildah and Skopeo with a lot of great examples.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Here’s why podman is more secured than Docker – DevSecOps]]></title>
        <id>https://podman.io/blogs/2019/10/14/2-new</id>
        <link href="https://podman.io/blogs/2019/10/14/2-new"/>
        <updated>2019-10-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Ganesh Mani discusses why Podman is more secure than Docker here on the CLOUDNWEB site. Ganesh talks about why Podman's fork and execute model is more secure than Docker's client server model.]]></summary>
        <content type="html"><![CDATA[<p>Ganesh Mani discusses why Podman is more secure than Docker <a href="https://cloudnweb.dev/2019/10/heres-why-podman-is-more-secured-than-docker-devsecops/" target="_blank" rel="noopener noreferrer">here</a> on the <a href="https://cloudnweb.dev/" target="_blank" rel="noopener noreferrer">CLOUDNWEB</a> site. Ganesh talks about why Podman's fork and execute model is more secure than Docker's client server model.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Say “Hello” to Buildah, Podman, and Skopeo]]></title>
        <id>https://podman.io/blogs/2019/10/14/SayHello</id>
        <link href="https://podman.io/blogs/2019/10/14/SayHello"/>
        <updated>2019-10-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Say “Hello” to Buildah, Podman, and Skopeo</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Saharsh Singh talks about how he's moved on from his Docker daemon and moved on to Podman, Buildah and Skopeo <a href="https://servicesblog.redhat.com/2019/10/09/say-hello-to-buildah-podman-and-skopeo/?sc_cid=701f2000000txokAAA&amp;utm_source=bambu&amp;utm_medium=social&amp;utm_campaign=abm" target="_blank" rel="noopener noreferrer">here</a> on the Red Hat Service Blog site. Saharsh walks you through a history of container tools and then talks about Podman, Buildah and Skopeo with a lot of great examples.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Here’s why podman is more secured than Docker – DevSecOps]]></title>
        <id>https://podman.io/blogs/2019/10/14/docker-vs-podman-security</id>
        <link href="https://podman.io/blogs/2019/10/14/docker-vs-podman-security"/>
        <updated>2019-10-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Here’s why podman is more secured than Docker – DevSecOps</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Ganesh Mani discusses why Podman is more secure than Docker <a href="https://cloudnweb.dev/2019/10/heres-why-podman-is-more-secured-than-docker-devsecops/" target="_blank" rel="noopener noreferrer">here</a> on the <a href="https://cloudnweb.dev/" target="_blank" rel="noopener noreferrer">CLOUDNWEB</a> site. Ganesh talks about why Podman's fork and execute model is more secure than Docker's client server model.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Configuring container networking with Podman]]></title>
        <id>https://podman.io/blogs/2019/10/02/container-networking</id>
        <link href="https://podman.io/blogs/2019/10/02/container-networking"/>
        <updated>2019-10-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Configuring container networking with Podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>Brent Baude has a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site about <a href="https://www.redhat.com/sysadmin/container-networking-podman" target="_blank" rel="noopener noreferrer">Configuring container networking with Podman</a>. In the post Brent goes over how you can communicate between a container and the host, between containers in and out of a pod, while running as a root and as a non-root user.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
        <category label="networking" term="networking"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Configuring container networking with Podman]]></title>
        <id>https://podman.io/blogs/2019/10/02/new</id>
        <link href="https://podman.io/blogs/2019/10/02/new"/>
        <updated>2019-10-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Brent Baude has a blog post on the Red Hat Enable Sysadmin site about Configuring container networking with Podman. In the post Brent goes over how you can communicate between a container and the host, between containers in and out of a pod, while running as a root and as a non-root user.]]></summary>
        <content type="html"><![CDATA[<p>Brent Baude has a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site about <a href="https://www.redhat.com/sysadmin/container-networking-podman" target="_blank" rel="noopener noreferrer">Configuring container networking with Podman</a>. In the post Brent goes over how you can communicate between a container and the host, between containers in and out of a pod, while running as a root and as a non-root user.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman in HPC environments]]></title>
        <id>https://podman.io/blogs/2019/09/26/podman-in-hpc</id>
        <link href="https://podman.io/blogs/2019/09/26/podman-in-hpc"/>
        <updated>2019-09-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman in HPC environments</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-adrian-reber-github">By Adrian Reber <a href="https://github.com/adrianreber" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-adrian-reber-github" class="hash-link" aria-label="Direct link to by-adrian-reber-github" title="Direct link to by-adrian-reber-github">​</a></h2><p>A <em>High-Performance Computing</em> (<strong>HPC</strong>) environment can mean a lot of things,
but in this article I want to focus on running <em>Message Passing Interface</em>
(<strong>MPI</strong>) parallelized programs with the help of Podman.</p><p>The following is a simple MPI based example taken from Open MPI: <a href="https://raw.githubusercontent.com/open-mpi/ompi/master/orte/test/mpi/ring.c" target="_blank" rel="noopener noreferrer">ring.c</a></p><p>To use it on a Fedora 30 system I first installed Open MPI and then I compiled
the example:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> dnf </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> openmpi-devel</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ module load mpi/openmpi-x86_64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token builtin class-name">echo</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"module load mpi/openmpi-x86_64"</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&gt;&gt;</span><span class="token plain"> .bashrc</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ mpicc -o ring ring.c</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Running this on my test system (Fedora 30) with 4 CPUs gives me this:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ mpirun ./ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> has cleared MPI_Init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> has cleared MPI_Init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> has cleared MPI_Init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> has cleared MPI_Init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> has completed ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> has completed ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> has completed ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> has completed ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> has completed MPI_Barrier</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> has completed MPI_Barrier</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> has completed MPI_Barrier</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> has completed MPI_Barrier</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>To be able to use Podman in combination with mpirun I created a container with
the following definition:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">cat</span><span class="token plain"> Dockerfile</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">FROM registry.fedoraproject.org/fedora:30</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">RUN dnf -y </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> openmpi </span><span class="token operator" style="color:#393A34">&amp;&amp;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    dnf clean all</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">COPY ring /home/ring</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>After building the container (<code>podman build --tag=mpi-test:31 .</code>) I pushed the
container to the <a href="https://quay.io" target="_blank" rel="noopener noreferrer">quay.io</a> container registry (<code>podman push
mpi-test:31 quay.io/adrianreber/mpi-test:31</code>) and can now pull it like this:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> pull quay.io/adrianreber/mpi-test:30</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>And then I can run mpirun to start multiple containers. In my case 4 containers
are started as each of the two involved systems has 2 CPUs:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ mpirun --hostfile hostfile </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   --mca orte_tmpdir_base /tmp/podman-mpirun </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> run --env-host </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     -v /tmp/podman-mpirun:/tmp/podman-mpirun </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     --userns</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">keep-id </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     --net</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">host --pid</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">host --ipc</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">host </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     quay.io/adrianreber/mpi-test:30 /home/ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> has cleared MPI_Init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> has completed ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> has completed MPI_Barrier</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> has cleared MPI_Init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> has completed ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> has completed MPI_Barrier</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> has cleared MPI_Init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> has completed ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> has completed MPI_Barrier</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> has cleared MPI_Init</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> has completed ring</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Rank </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> has completed MPI_Barrier</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now mpirun starts up 4 Podman containers and each container is running one
instance of <code>ring</code>. All 4 processes are communicating over MPI with each other.</p><p>The following mpirun options are used:</p><ul><li><p><code>--hostfile hostfile</code></p><p>The <code>hostfile</code> tells Open MPI on which systems to run how many processes.
In the case of this example it contained:</p><p><code>host1 slots=2</code><br>
<code>host2 slots=2</code></p><p>This means to run two processes on <code>host1</code> and two processes on <code>host2</code>.</p></li><li><p><code>--mca orte_tmpdir_base /tmp/podman-mpirun</code></p><p>This tells Open MPI to create all its temporary files in <code>/tmp/podman-mpirun</code>
and not in <code>/tmp</code>. If this is not specified Open MPI will create its temporary
files in a directory with a host name in it in <code>/tmp</code> and if using more than one
node this directory will be named differently on other nodes. This requires
mounting the complete <code>/tmp</code> directory into the container which is a bit more
complicated due to not being able to change SELinux labels of <code>/tmp</code>.</p></li></ul><p>This is it for all the necessary parameters for <code>mpirun</code>, now the command is
specified that <code>mpirun</code> should start; <code>podman</code> in this case.</p><ul><li><p><code>run</code></p><p>This just tells Podman to run a container.</p></li><li><p><code>--env-host</code></p><p>This copies all environment variables from the host into the container. This
is necessary to make Open MPI work at all. When <code>mpirun</code> is started it creates a
daemon with which all other processes in this MPI job are communicating, it
also tells all the MPI processes how to communicate with each other. All this
is passed from <code>mpirun</code> to the actual MPI processes using environment variables.</p><p>Options passed from the user to <code>mpirun</code> are also communicated through
environment variables. Now that the MPI process in the container has all the
environment variables it can communicate with the main process (<em>Head Node
Process</em> (<strong>HNP</strong>)) and all the other involved processes.</p></li><li><p><code>-v /tmp/podman-mpirun:/tmp/podman-mpirun</code></p><p>This tells Podman to mount the directory where Open MPI creates its temporary
directories and files to be available in the container. Through the environment
variables from above the MPI process knows where to look for this directory.</p></li><li><p><code>--userns=keep-id</code></p><p>The user ID in the container should be mapped to the same ID on the outside of
the container. This is necessary as all processes are communicating with each
other over shared memory and this fails if the processes have different user
IDs. Also the access of the temporary files in <code>/tmp/podman-mpirun</code> breaks
without this.</p></li><li><p><code>--net=host --pid=host --ipc=host</code></p><p>Do not use separate namespace for <em>network</em>, <em>PID</em> and <em>IPC</em>. Without this nothing
works, as all processes are also communicating via TCP on <code>127.0.0.1</code> which fails
with separate network namespaces. Shared memory communication will also not work
if the processes are not in the same <em>PID</em> and <em>IPC</em> namespace.</p></li><li><p><code>quay.io/adrianreber/mpi-testmpi-test:30</code></p><p>This is the name of the container as downloaded previously with <code>podman pull</code>.
If <code>mpirun</code> will spawn processes on a host which has not yet downloaded
this container image, Podman will do it before launching this container.</p></li><li><p><code>/home/ring</code></p><p>The MPI program in the container which should be started.</p></li></ul><p>Thanks to Podman's fork-exec model it is really simple to use it in combination
with Open MPI as Open MPI will start Podman just as it would start the actual
MPI application.</p>]]></content>
        <author>
            <name>adrianr</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="hpc" term="hpc"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman in HPC environments]]></title>
        <id>https://podman.io/blogs/2019/09/25/new</id>
        <link href="https://podman.io/blogs/2019/09/25/new"/>
        <updated>2019-09-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Adrian Reber talks all about the Message Passing Interface (MPI) in a High-Performance Computing (HPC) environment with the help of Podman here. Adrian provides a nice walk through of how he accomplished this and then explains each of his steps in great detail.]]></summary>
        <content type="html"><![CDATA[<p>Adrian Reber talks all about the Message Passing Interface (MPI) in a High-Performance Computing (HPC) environment with the help of Podman <a href="https://podman.io/blogs/2019/09/26/podman-in-hpc.html" target="_blank" rel="noopener noreferrer">here</a>. Adrian provides a nice walk through of how he accomplished this and then explains each of his steps in great detail.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Why can’t rootless Podman pull my image?]]></title>
        <id>https://podman.io/blogs/2019/09/11/new</id>
        <link href="https://podman.io/blogs/2019/09/11/new"/>
        <updated>2019-09-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Matt Heon has a blog post on the Red Hat Enable Sysadmin site about Why can’t rootless Podman pull my image?. In the blog Matt discusses why restrictions on rootless containers can be inconvenient, but why they're necessary. In the blog Matt covers the use of user namespace and the allocations of uid and gid's that are required to make rootless containers work securely in your environment.]]></summary>
        <content type="html"><![CDATA[<p>Matt Heon has a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site about <a href="https://www.redhat.com/sysadmin/rootless-podman" target="_blank" rel="noopener noreferrer">Why can’t rootless Podman pull my image?</a>. In the blog Matt discusses why restrictions on rootless containers can be inconvenient, but why they're necessary. In the blog Matt covers the use of user namespace and the allocations of uid and gid's that are required to make rootless containers work securely in your environment.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Why can’t rootless Podman pull my image?]]></title>
        <id>https://podman.io/blogs/2019/09/11/rootless-pulling</id>
        <link href="https://podman.io/blogs/2019/09/11/rootless-pulling"/>
        <updated>2019-09-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Why can’t rootless Podman pull my image?</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-matthew-heon-github">By Matthew Heon <a href="https://github.com/mheon" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-matthew-heon-github" class="hash-link" aria-label="Direct link to by-matthew-heon-github" title="Direct link to by-matthew-heon-github">​</a></h2><p>Matthew Heon has a blog post on the <a href="https://www.redhat.com/sysadmin/" target="_blank" rel="noopener noreferrer">Red Hat Enable Sysadmin</a> site about <a href="https://www.redhat.com/sysadmin/rootless-podman" target="_blank" rel="noopener noreferrer">Why can’t rootless Podman pull my image?</a>. In the blog Matt discusses why restrictions on rootless containers can be inconvenient, but why they're necessary. In the blog Matt covers the use of user namespace and the allocations of uid and gid's that are required to make rootless containers work securely in your environment.</p>]]></content>
        <author>
            <name>mheon</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Best practices for running Buildah in a container]]></title>
        <id>https://podman.io/blogs/2019/08/28/buildah-in-containers</id>
        <link href="https://podman.io/blogs/2019/08/28/buildah-in-containers"/>
        <updated>2019-08-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Best practices for running Buildah in a container</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-dan-walsh-github">By Dan Walsh <a href="https://github.com/rhatdan" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-dan-walsh-github" class="hash-link" aria-label="Direct link to by-dan-walsh-github" title="Direct link to by-dan-walsh-github">​</a></h2><p>Dan Walsh has recently posted a blog on the Red Hat Developer Blog, <a href="https://developers.redhat.com/blog/2019/08/14/best-practices-for-running-buildah-in-a-container/" target="_blank" rel="noopener noreferrer">Best practices for running Buildah in a container</a>. The post walks you through the balancing act of running a container securely using while keeping an eye on performance. A big boost to the performance side of things is the concept of "Additional Stores". Dan walks you through the use of those in this blog and then wraps it all up with an on-line video at the end.</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Best practices for running Buildah in a container]]></title>
        <id>https://podman.io/blogs/2019/08/28/new</id>
        <link href="https://podman.io/blogs/2019/08/28/new"/>
        <updated>2019-08-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Dan Walsh has recently posted a blog on the Red Hat Developer Blog, Best practices for running Buildah in a container. The post walks you through the balancing act of running a container securely using Podman while keeping an eye on performance. A big boost to the performance side of things is the concept of "Additional Stores". Dan walks you through the use of those in this blog and then wraps it all up with an on-line video at the end.]]></summary>
        <content type="html"><![CDATA[<p>Dan Walsh has recently posted a blog on the Red Hat Developer Blog, <a href="https://developers.redhat.com/blog/2019/08/14/best-practices-for-running-buildah-in-a-container/" target="_blank" rel="noopener noreferrer">Best practices for running Buildah in a container</a>. The post walks you through the balancing act of running a container securely using Podman while keeping an eye on performance. A big boost to the performance side of things is the concept of "Additional Stores". Dan walks you through the use of those in this blog and then wraps it all up with an on-line video at the end.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman, contenedores sin Docker]]></title>
        <id>https://podman.io/blogs/2019/08/23/new</id>
        <link href="https://podman.io/blogs/2019/08/23/new"/>
        <updated>2019-08-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[How's your espanol? If it's good, checkout this video blog on YouTube Podman, contenedores sin Docker! In it Iñigo Serrano shows how to run Wildfly in a Podman container without Docker.]]></summary>
        <content type="html"><![CDATA[<p>How's your espanol? If it's good, checkout this video blog on YouTube <a href="https://www.youtube.com/watch?v=pzRf0G43DYw&amp;feature=youtu.be" target="_blank" rel="noopener noreferrer">Podman, contenedores sin Docker</a>! In it Iñigo Serrano shows how to run Wildfly in a Podman container without Docker.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman, contenedores sin Docker]]></title>
        <id>https://podman.io/blogs/2019/08/23/podman-en-espanol</id>
        <link href="https://podman.io/blogs/2019/08/23/podman-en-espanol"/>
        <updated>2019-08-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman, contendores sin Docker</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>How's your espanol? If it's good or you want to work on it, checkout this video blog on YouTube from Iñigo Serrano <a href="https://www.youtube.com/watch?v=pzRf0G43DYw&amp;feature=youtu.be" target="_blank" rel="noopener noreferrer">Podman, contenedores sin Docker</a>. In it Iñigo Serrano shows how to run Wildfly in a Podman container without Docker.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using the rootless containers Tech Preview in RHEL 8.0]]></title>
        <id>https://podman.io/blogs/2019/08/22/new</id>
        <link href="https://podman.io/blogs/2019/08/22/new"/>
        <updated>2019-08-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Scott McCarty has a blog post on the Red Hat Blog about Using the rootless containers Tech Preview in RHEL 8.0. Podman rootless containers has hit Tech Preview for RHEL 8.0 and Scott walks you through the setup necessary for rootless containers. Small hint, it's a short post because it's just that easy.]]></summary>
        <content type="html"><![CDATA[<p>Scott McCarty has a blog post on the <a href="https://www.redhat.com/en/blog" target="_blank" rel="noopener noreferrer">Red Hat Blog</a> about <a href="https://www.redhat.com/en/blog/using-rootless-containers-tech-preview-rhel-80" target="_blank" rel="noopener noreferrer">Using the rootless containers Tech Preview in RHEL 8.0</a>. Podman rootless containers has hit Tech Preview for RHEL 8.0 and Scott walks you through the setup necessary for rootless containers. Small hint, it's a short post because it's just that easy.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using the rootless containers Tech Preview in RHEL 8.0]]></title>
        <id>https://podman.io/blogs/2019/08/22/podman-tech-preview</id>
        <link href="https://podman.io/blogs/2019/08/22/podman-tech-preview"/>
        <updated>2019-08-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Using the rootless containers Tech Preview in RHEL 8.0</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Scott McCarty has a blog post on the <a href="https://www.redhat.com/en/blog" target="_blank" rel="noopener noreferrer">Red Hat Blog</a> about <a href="https://www.redhat.com/en/blog/using-rootless-containers-tech-preview-rhel-80" target="_blank" rel="noopener noreferrer">Using the rootless containers Tech Preview in RHEL 8.0</a>. Podman rootless containers has hit Tech Preview for RHEL 8.0 and Scott walks you through the setup necessary for rootless containers. Small hint, it's a short post because it's just that easy.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman v1.5.0 Released]]></title>
        <id>https://podman.io/blogs/2019/08/14/new</id>
        <link href="https://podman.io/blogs/2019/08/14/new"/>
        <updated>2019-08-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Podman has gone 1.5.0!]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-has-gone-150"><a href="https://podman.io/releases/2019/08/14/podman-release-v1.5.0.html" target="_blank" rel="noopener noreferrer">Podman has gone 1.5.0!</a><a href="#podman-has-gone-150" class="hash-link" aria-label="Direct link to podman-has-gone-150" title="Direct link to podman-has-gone-150">​</a></h2>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[How templating works with Podman, Kubernetes, and Red Hat OpenShift]]></title>
        <id>https://podman.io/blogs/2019/08/10/new</id>
        <link href="https://podman.io/blogs/2019/08/10/new"/>
        <updated>2019-08-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Olaph Wagner has put together a nice introduction on How templating works with Podman, Kubernetes, and Red Hat OpenShift on the IBM Developer blog site. If you want to find out how to use Podman to create images that helps Red Hat OpenShift to make templates on the IBM Cloud(TM), then this is the article for you!]]></summary>
        <content type="html"><![CDATA[<p>Olaph Wagner has put together a nice introduction on <a href="https://developer.ibm.com/articles/templating-and-podman-openshift/?cm_mmc=OSocial_Twitter-_-Developer_IBM+Developer-_-WW_WW-_-ibmdev-&amp;cm_mmca1=000037FD&amp;cm_mmca2=10010797&amp;linkId=71651828&amp;es_p=9869602" target="_blank" rel="noopener noreferrer">How templating works with Podman, Kubernetes, and Red Hat OpenShift</a> on the <a href="https://developer.ibm.com/" target="_blank" rel="noopener noreferrer">IBM Developer</a> blog site. If you want to find out how to use Podman to create images that helps Red Hat OpenShift to make templates on the IBM Cloud(TM), then this is the article for you!</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[How templating works with Podman, Kubernetes, and Red Hat OpenShift]]></title>
        <id>https://podman.io/blogs/2019/08/10/podman-ibm-developer</id>
        <link href="https://podman.io/blogs/2019/08/10/podman-ibm-developer"/>
        <updated>2019-08-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>How templating works with Podman, Kubernetes, and Red Hat OpenShift</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Olaph Wagner has put together a nice introduction on <a href="https://developer.ibm.com/articles/templating-and-podman-openshift/?cm_mmc=OSocial_Twitter-_-Developer_IBM+Developer-_-WW_WW-_-ibmdev-&amp;cm_mmca1=000037FD&amp;cm_mmca2=10010797&amp;linkId=71651828&amp;es_p=9869602" target="_blank" rel="noopener noreferrer">How templating works with Podman, Kubernetes, and Red Hat OpenShift</a> on the <a href="https://developer.ibm.com/" target="_blank" rel="noopener noreferrer">IBM Developer</a> blog site. If you want to find out how to
use Podman to create images that helps Red Hat OpenShift to make templates on the IBM Cloud(TM), then this is the article for you!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Command Highlight&#58; podman images]]></title>
        <id>https://podman.io/blogs/2019/08/08/new</id>
        <link href="https://podman.io/blogs/2019/08/08/new"/>
        <updated>2019-08-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A quick asciinema demo highlighting what the podman images command can do. A great way to get quickly immersed with this command in just a few minutes time. Checkout the demo here and if you want to run the script yourself, it can be found here.]]></summary>
        <content type="html"><![CDATA[<p>A quick <a href="https://asciinema.org/" target="_blank" rel="noopener noreferrer">asciinema</a> demo highlighting what the <code>podman images</code> command can do. A great way to get quickly immersed with this command in just a few minutes time. Checkout the demo <a href="https://podman.io/asciinema/podman/images/" target="_blank" rel="noopener noreferrer">here</a> and if you want to run the script yourself, it can be found <a href="https://github.com/containers/Demos/blob/main/podman_cli/podman_images.sh" target="_blank" rel="noopener noreferrer">here</a>.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Command Highlight&#58; podman images]]></title>
        <id>https://podman.io/blogs/2019/08/08/podman-images</id>
        <link href="https://podman.io/blogs/2019/08/08/podman-images"/>
        <updated>2019-08-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Command Highlight<!-- -->:<!-- --> podman images</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>A quick <a href="https://asciinema.org/" target="_blank" rel="noopener noreferrer">asciinema</a> demo highlighting what the <code>podman images</code> command can do. A great way to get quickly immersed with this command in just a few minutes time. Checkout the demo <a href="https://podman.io/asciinema/podman/images/" target="_blank" rel="noopener noreferrer">here</a> and if you want to run the script yourself, it can be found <a href="https://github.com/containers/Demos/blob/main/podman_cli/podman_images.sh" target="_blank" rel="noopener noreferrer">here</a>.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman&#58; Linux containers made easy, part 3]]></title>
        <id>https://podman.io/blogs/2019/07/29/new</id>
        <link href="https://podman.io/blogs/2019/07/29/new"/>
        <updated>2019-07-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[It's in German again, but a worthy read Podman: Linux containers made easy, part 3. Valentin Rothberg (@vrothberg) introduces Podman to the reader and talks about how it fits in the container eco-system. If your German is a little rusty, you may need to lean on Google Translate.]]></summary>
        <content type="html"><![CDATA[<p>It's in German again, but a worthy read <a href="https://www.heise.de/developer/artikel/Podman-Linux-Container-einfach-gemacht-Teil-3-4476343.html" target="_blank" rel="noopener noreferrer">Podman: Linux containers made easy, part 3</a>. Valentin Rothberg (@vrothberg) introduces Podman to the reader and talks about how it fits in the container eco-system. If your German is a little rusty, you may need to lean on <a href="https://translate.google.com/?hl=en&amp;tab=TT&amp;authuser=0" target="_blank" rel="noopener noreferrer">Google Translate</a>.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman&#58; Linux containers made easy, part 3]]></title>
        <id>https://podman.io/blogs/2019/07/29/podman-made-easy3</id>
        <link href="https://podman.io/blogs/2019/07/29/podman-made-easy3"/>
        <updated>2019-07-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman<!-- -->:<!-- --> Linux containers made easy, part 3</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>It's in German again, but a worthy read <a href="https://www.heise.de/developer/artikel/Podman-Linux-Container-einfach-gemacht-Teil-3-4476343.html" target="_blank" rel="noopener noreferrer">Podman: Linux containers made easy, part 3</a> Valentin Rothberg (@vrothberg) introduces Podman to the reader and talks about how it fits in the container eco-system. If your German is a little rusty, you may need to lean on <a href="https://translate.google.com/?hl=en&amp;tab=TT&amp;authuser=0" target="_blank" rel="noopener noreferrer">Google Translate</a>.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How Podman replaces Docker and Docker Compose for local development]]></title>
        <id>https://podman.io/blogs/2019/07/06/new</id>
        <link href="https://podman.io/blogs/2019/07/06/new"/>
        <updated>2019-07-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Is it possible to completely replace Docker with Podman without any loss]]></summary>
        <content type="html"><![CDATA[<p>Is it possible to completely replace Docker with Podman without any loss
of developer's productivity? Read about real use case in new article on
mkdev.me blog: <a href="https://mkdev.me/en/posts/dockerless-part-3-moving-development-environment-to-containers-with-podman" target="_blank" rel="noopener noreferrer">Dockerless, part 3: Moving development environment to containers with Podman</a>.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[How Podman replaces Docker and Docker Compose for local development]]></title>
        <id>https://podman.io/blogs/2019/07/06/ruby</id>
        <link href="https://podman.io/blogs/2019/07/06/ruby"/>
        <updated>2019-07-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>How Podman replaces Docker and Docker Compose for local development</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-kirill-shirinkin-github">By Kirill Shirinkin <a href="https://github.com/Fodoj" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-kirill-shirinkin-github" class="hash-link" aria-label="Direct link to by-kirill-shirinkin-github" title="Direct link to by-kirill-shirinkin-github">​</a></h2><p>Is it possible to completely replace Docker with Podman without any loss
of developer's productivity? Read about how one company did it for
Ruby on Rails application in new article on
mkdev.me blog: <a href="https://mkdev.me/en/posts/dockerless-part-3-moving-development-environment-to-containers-with-podman" target="_blank" rel="noopener noreferrer">Dockerless, part 3: Moving development environment to containers with Podman</a>.</p>]]></content>
        <author>
            <name>kshirinkin</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="ruby" term="ruby"/>
        <category label="rails" term="rails"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Replacing Docker with Podman]]></title>
        <id>https://podman.io/blogs/2019/06/26/new</id>
        <link href="https://podman.io/blogs/2019/06/26/new"/>
        <updated>2019-06-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Ganesh Mani recently wrote the blog Replacing Docker with Podman — Power of Podman — Cloudnweb. The article gives a nice overview of Docker, Podman, their differences, and how you can use Podman to replace Docker. A nice read and really, who doesn't love a blog that wraps up with a meme featuring The Rock?]]></summary>
        <content type="html"><![CDATA[<p>Ganesh Mani recently wrote the blog <a href="https://medium.com/@ganeshmani009/replacing-docker-with-podman-power-of-podman-cloudnweb-23cfb7541538" target="_blank" rel="noopener noreferrer">Replacing Docker with Podman — Power of Podman — Cloudnweb</a>. The article gives a nice overview of Docker, Podman, their differences, and how you can use Podman to replace Docker. A nice read and really, who doesn't love a blog that wraps up with a meme featuring The Rock?</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Replacing Docker with Podman]]></title>
        <id>https://podman.io/blogs/2019/06/26/replace-docker-with-podman</id>
        <link href="https://podman.io/blogs/2019/06/26/replace-docker-with-podman"/>
        <updated>2019-06-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Replacing Docker with Podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Ganesh Mani recently wrote the blog <a href="https://medium.com/@ganeshmani009/replacing-docker-with-podman-power-of-podman-cloudnweb-23cfb7541538" target="_blank" rel="noopener noreferrer">Replacing Docker with Podman — Power of Podman — Cloudnweb</a>. The article gives a nice overview of Docker, Podman, their differences, and how you can use Podman to replace Docker. A nice read and
really, who doesn't love a blog that wraps up with a meme featuring The Rock?</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OnDemand Course&#58; Container pipelines for sys admins—and anyone, really—with Buildah and Podman]]></title>
        <id>https://podman.io/blogs/2019/06/19/new</id>
        <link href="https://podman.io/blogs/2019/06/19/new"/>
        <updated>2019-06-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Red Hat has recently posted an OnDemand course: Container pipelines for sys admins—and anyone, really—with Buildah and Podman. The session teaches you how to integrate both Podman and Buildah into your continuous delivery (CI/CD) solutions and also serves as a good introduction to both tools. The cost can't be beat (free!), so if you're looking for a quick introduction into the tools, this is a good way to go.]]></summary>
        <content type="html"><![CDATA[<p>Red Hat has recently posted an OnDemand course: <a href="https://www.redhat.com/en/events/webinar/container-pipelines-sys-admins-and-anyone-really-buildah-and-podman?sc_cid=701f2000000txokAAA&amp;utm_source=bambu&amp;utm_medium=social&amp;utm_campaign=abm" target="_blank" rel="noopener noreferrer">Container pipelines for sys admins—and anyone, really—with Buildah and Podman</a>. The session teaches you how to integrate both Podman and Buildah into your continuous delivery (CI/CD) solutions and also serves as a good introduction to both tools. The cost can't be beat (free!), so if you're looking for a quick introduction into the tools, this is a good way to go.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[OnDemand Course&#58; Container pipelines for sys admins—and anyone, really—with Buildah and Podman]]></title>
        <id>https://podman.io/blogs/2019/06/19/ondemand-course</id>
        <link href="https://podman.io/blogs/2019/06/19/ondemand-course"/>
        <updated>2019-06-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>OnDemand Course<!-- -->:<!-- --> Container pipelines for sys admins—and anyone, really—with Buildah and Podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Red Hat has recently posted an OnDemand course: <a href="https://www.redhat.com/en/events/webinar/container-pipelines-sys-admins-and-anyone-really-buildah-and-podman?sc_cid=701f2000000txokAAA&amp;utm_source=bambu&amp;utm_medium=social&amp;utm_campaign=abm" target="_blank" rel="noopener noreferrer">Container pipelines for sys admins—and anyone, really—with Buildah and Podman</a>. The session teaches you how to integrate both Podman and Buildah into your continuous delivery (CI/CD) solutions and also serves as a good introduction to both tools. The cost can't be beat (free!), so if you're looking for a quick introduction into the tools, this is a good way to go.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Mailing list]]></title>
        <id>https://podman.io/blogs/2019/06/17/mailinglist</id>
        <link href="https://podman.io/blogs/2019/06/17/mailinglist"/>
        <updated>2019-06-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Mailing List</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>We've received a number of requests for a mailing list for Podman and we're happy to announce that one has just been created! We've built a friendly community on IRC and GitHub and plan to continue that growth in this new mailing list. The maintainers of the project are all members of the list and we're happy to take any and all questions there about Podman. You can also just use the list as a way to track what's going on with Podman as release announcements and other important news will be posted there.</p><p>To sign up for the mailing list use email or the web interface:</p><ul><li>Send an email to <a href="mailto:podman-join@lists.podman.io?subject=subscribe" target="_blank" rel="noopener noreferrer">podman-join@lists.podman.io</a> with the word "Subscribe" in the subject.</li><li>Go to this <a href="https://lists.podman.io/admin/lists/podman.lists.podman.io/" target="_blank" rel="noopener noreferrer">page</a> on the <a href="https://lists.podman.io" target="_blank" rel="noopener noreferrer">https://lists.podman.io</a> site, scroll down to the bottom of the page and enter your email and optionally name, then click on the "Subscribe" button.</li></ul><p>Regardless of which method you use, a confirmation email will be sent to you. After you reply back to that confirmation email, you'll then be able to send mail directly to <a href="mailto:podman@lists.podman.io" target="_blank" rel="noopener noreferrer">podman@lists.podman.io</a>. You can then also go to the list's web page at <a href="https://lists.podman.io" target="_blank" rel="noopener noreferrer">lists.podman.io</a>, click on the <a href="https://lists.podman.io/archives/list/podman@lists.podman.io/" target="_blank" rel="noopener noreferrer">Podman</a> link and from there you can see all of the past conversations on the list or manage your subscription.</p><p>Please note, if you have a bug that you'd like to report, it's best to report them <a href="https://github.com/containers/podman/issues" target="_blank" rel="noopener noreferrer">here</a> by creating a "New issue" rather than sending an email to the list.</p><p>We hope over time this mailing list will be a friendly and useful tool for the entire Podman community.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Announcing the Podman Mailing List!]]></title>
        <id>https://podman.io/blogs/2019/06/17/new</id>
        <link href="https://podman.io/blogs/2019/06/17/new"/>
        <updated>2019-06-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We've received a number of requests for a mailing list for Podman and we're happy to announce that one has just been created! We've built a friendly community on IRC and GitHub and plan to continue that growth in this new mailing list. The maintainers of the project are all members of the list and we're happy to take any and all questions there about Podman. You can also just use the list as a way to track what's going on with Podman as release announcements and other important news will be posted there.]]></summary>
        <content type="html"><![CDATA[<p>We've received a number of requests for a mailing list for Podman and we're happy to announce that one has just been created! We've built a friendly community on IRC and GitHub and plan to continue that growth in this new mailing list. The maintainers of the project are all members of the list and we're happy to take any and all questions there about Podman. You can also just use the list as a way to track what's going on with Podman as release announcements and other important news will be posted there.</p><p>Get all the details on this <a href="https://podman.io/blogs/2019/06/17/mailinglist.html" target="_blank" rel="noopener noreferrer">blog</a> post!</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Cheat Sheet]]></title>
        <id>https://podman.io/blogs/2019/06/13/new</id>
        <link href="https://podman.io/blogs/2019/06/13/new"/>
        <updated>2019-06-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Red Hat Developer recently posted a new Podman Cheat Sheet on their blog. It's a handy guide that cover the commands that focus on images, containers and container resources. Check it out!]]></summary>
        <content type="html"><![CDATA[<p>Red Hat Developer recently posted a new <a href="https://developers.redhat.com/cheat-sheets/podman-basics/" target="_blank" rel="noopener noreferrer">Podman Cheat Sheet</a> on their blog. It's a handy guide that cover the commands that focus on images, containers and container resources. Check it out!</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Cheat Sheet]]></title>
        <id>https://podman.io/blogs/2019/06/13/podman-cheatsheet</id>
        <link href="https://podman.io/blogs/2019/06/13/podman-cheatsheet"/>
        <updated>2019-06-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Cheat Sheet</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Red Hat Developer recently posted a new <a href="https://developers.redhat.com/cheat-sheets/podman-basics/" target="_blank" rel="noopener noreferrer">Podman Cheat Sheet</a> on their blog. It's a handy guide that cover the commands that focus on images, containers and container resources. Check it out!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman&#58; Linux containers made easy, part 2]]></title>
        <id>https://podman.io/blogs/2019/05/24/podman-made-easy2</id>
        <link href="https://podman.io/blogs/2019/05/24/podman-made-easy2"/>
        <updated>2019-05-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman<!-- -->:<!-- --> Linux containers made easy, part 2</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>It's in German again, but a worthy read <a href="https://www.heise.de/developer/artikel/Podman-Linux-Container-einfach-gemacht-Teil-2-4429630.html" target="_blank" rel="noopener noreferrer">Podman: Linux containers made easy, part 2</a> Valentin Rothberg (@vrothberg) introduces Podman to the reader and talks about how it fits in the container eco-system. If your German is a little rusty, you may need to lean on <a href="https://translate.google.com/?hl=en&amp;tab=TT&amp;authuser=0" target="_blank" rel="noopener noreferrer">Google Translate</a>.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Building Smaller Container Images]]></title>
        <id>https://podman.io/blogs/2019/05/18/micro-dnf</id>
        <link href="https://podman.io/blogs/2019/05/18/micro-dnf"/>
        <updated>2019-05-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Building Smaller Container Images</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Muayyad Alsadi's article in Fedora Magazine talks about <a href="https://fedoramagazine.org/building-smaller-container-images/" target="_blank" rel="noopener noreferrer">Building Smaller Container Images</a> by leveraging microdnf within fedora-minimal. It's a really nice way to save space and build more compact containers.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Monitoring container vitality and availability with Podman]]></title>
        <id>https://podman.io/blogs/2019/04/22/health</id>
        <link href="https://podman.io/blogs/2019/04/22/health"/>
        <updated>2019-04-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Monitoring container vitality and availability with Podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>Who doesn't want a healthy container in their environment? Now with Podman you can setup healthchecks so you can check if your container and it's application is up and running as you'd expect. <a href="https://developers.redhat.com/blog/author/bbaude/" target="_blank" rel="noopener noreferrer">Brent Baude</a> introduces the new functionality in this article on the Red Hat Developer Blog: <a href="https://developers.redhat.com/blog/2019/04/18/monitoring-container-vitality-and-availability-with-podman" target="_blank" rel="noopener noreferrer">Monitoring container vitality and availability with Podman</a>.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Build and run Buildah inside a Podman container]]></title>
        <id>https://podman.io/blogs/2019/04/16/cinc</id>
        <link href="https://podman.io/blogs/2019/04/16/cinc"/>
        <updated>2019-04-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Build and run Buildah inside a Podman container</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>What happens when you combine <a href="https://en.wikipedia.org/wiki/Matryoshka_doll" target="_blank" rel="noopener noreferrer">Matryoshka Dolls</a> with containers? Why you get containers in containers in containers! Read all about it with this new article on the Red Hat Developer Blog: <a href="https://developers.redhat.com/blog/2019/04/04/build-and-run-buildah-inside-a-podman-container/" target="_blank" rel="noopener noreferrer">Build and run Buildah inside a Podman container</a>.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Saves My Crossword Habit]]></title>
        <id>https://podman.io/blogs/2019/04/01/podman-crosswords</id>
        <link href="https://podman.io/blogs/2019/04/01/podman-crosswords"/>
        <updated>2019-04-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman Saves My Crossword Habit</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Ed Santiago (@edsantiago) needed help with his New York Times crossword puzzle. So naturally he turned to Podman to save the day. Read about it in his blog post: <a href="http://blog.edsantiago.com/2019/03/podman-saves-my-crossword/" target="_blank" rel="noopener noreferrer">Podman Saves My Crossword Habit</a>. Many thanks to Ed for sharing this
innovative use of Podman.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman&#58; Linux containers made easy, part 1]]></title>
        <id>https://podman.io/blogs/2019/03/22/podman-made-easy</id>
        <link href="https://podman.io/blogs/2019/03/22/podman-made-easy"/>
        <updated>2019-03-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman<!-- -->:<!-- --> Linux containers made easy, part 1</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>It's in German, but a worthy read <a href="https://www.heise.de/developer/artikel/Podman-Linux-Container-einfach-gemacht-Teil-1-4329067.html" target="_blank" rel="noopener noreferrer">Podman: Linux containers made easy, part 1</a>. Valentin Rothberg (@vrothberg) introduces Podman to the reader and talks about how it fits in the container eco-system. If your German is a little rusty, you may need to lean on <a href="https://translate.google.com/?hl=en&amp;tab=TT&amp;authuser=0" target="_blank" rel="noopener noreferrer">Google Translate</a>.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[CI, and CI, and CI, oh my! &lpar;then more CI&rpar;]]></title>
        <id>https://podman.io/blogs/2019/03/18/CI3</id>
        <link href="https://podman.io/blogs/2019/03/18/CI3"/>
        <updated>2019-03-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>CI, and CI, and CI, oh my! (then more CI)</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-chris-evich-github">By Chris Evich <a href="https://github.com/cevich" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-chris-evich-github" class="hash-link" aria-label="Direct link to by-chris-evich-github" title="Direct link to by-chris-evich-github">​</a></h2><p>I wanted to write a detailed post about the CI setup we use for exercising proposed
changes to <a href="https://github.com/containers/podman" target="_blank" rel="noopener noreferrer">libpod (podman repo)</a>. &nbsp;Unfortunately
this topic (and automation in general)
is so big, most readers would end up on the floor, sound asleep, in a puddle of their
own drool. &nbsp;Instead, I will keep your fidget-spinner twirling, by jumping around
several topics.</p><p>Starting with an overview on why we chose to use <a href="https://cirrus-ci.org/" target="_blank" rel="noopener noreferrer">Cirrus CI</a>, I'll
provide a short 3-step
walk-through of how it works, along with lots of links. &nbsp;Then, we'll go into more detail
regarding VM Image orchestration, before connecting that back to our Cirrus-CI
configuration.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="why-cirrus-ci">Why Cirrus-CI<a href="#why-cirrus-ci" class="hash-link" aria-label="Direct link to Why Cirrus-CI" title="Direct link to Why Cirrus-CI">​</a></h3><p>I once said "testing code is at least 10x harder than writing it". This is especially true when a
software-engineer believes their code is "perfectly good" (meaning, tons of bugs). At the same
time, test automation is generally as reliable, as the inverse of its simplicity (especially when
it's never simple). Which brings me back to around July/August of '18:</p><p>The libpod project was considered by many to be "perfectly good", but its automation was definitely
not simple. At least one part or another constantly <a href="https://en.wiktionary.org/wiki/jacked_up#English" target="_blank" rel="noopener noreferrer">jacked-up</a>.
At the time, automation was split
across two totally different services, operating with incompatible yet duplicate configurations.
The third service is a downstream consumer of libpod, but at the time was also under consideration
to take over pull-request automation from the first two:</p><ul><li><p>Travis</p><ul><li>With <a href="https://lists.ubuntu.com/archives/ubuntu-announce/2014-April/000182.html" target="_blank" rel="noopener noreferrer">Ubuntu Trusty only a few years old</a>,
we ran tests on a platform version nobody was using,
with bleeding edge-code jammed on top. &nbsp;Some OS-X tests ran, and we think at least one person
looked at the results, some of the time, every once in a while.</li><li>Required a contrived containerized-environment to workaround host-side limitations. &nbsp;Fixes for
fake environments almost never improve reality. e.g. impossible to test or fix AppArmor or
SELinux problems from inside a container.</li><li>The tests did not represent reality. &nbsp;Most people would never run container tools within a
container, and certain security tools like SELinux and AppArmor would not be tested running
inside this environment.</li></ul></li><li><p>PAPR</p><ul><li>An internal "maintenance mode" service, meaning only bug-fixes, no new features. Supported by a
single, talented engineer, from another group, perfectly happy to be working on something else.</li><li>Fortunately it does have great support for running things on Atomic Host, which we still use to
maintain our insanity...I mean, double-check some things.</li><li>The underlying infrastructure is unpredictably reliable. Mainly due to frequent
<a href="https://en.wikipedia.org/wiki/Eating_your_own_dog_food" target="_blank" rel="noopener noreferrer">dog-food poisoning</a>.</li></ul></li><li><p>OpenShift</p><ul><li>An elegant, impressive piece of machinery, with tests so numerous that most other projects would
have trouble calling up enough drool.</li><li>Fantastic at testing containers and at-scale orchestration. &nbsp;However way too complex for our
low-level, host-side poking of runtimes, and userspace.</li><li>Downstream from libpod by weeks or months depending on the platform, like RHEL for example.</li><li>Both Travis and PAPR already demonstrated the pain of testing host-side libraries/tools
within a container, no further lessons or reruns required.</li></ul></li></ul><p>As if this vegetarian sausage wasn't already dripping with liquid goodness. &nbsp;The smallest little
network blip, and you have to re-run the entire suite again. &nbsp;The importance of network speed and
robustness can never be overstated. So I set out on a mission against complexity, toward being
able to reliably and frequently ruin engineer's "perfectly good" code before it merges.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="get-off-my-lawwwwwn">GET OFF MY LAWWWWWN!<a href="#get-off-my-lawwwwwn" class="hash-link" aria-label="Direct link to GET OFF MY LAWWWWWN!" title="Direct link to GET OFF MY LAWWWWWN!">​</a></h3><p>The Cirrus CI killer feature. &nbsp;You can selfishly
<a href="https://cirrus-ci.org/guide/supported-computing-services/" target="_blank" rel="noopener noreferrer">bring&nbsp;your own cloud</a>
and everything else to make
it work, and not have to share with Billy Bob's Used tire and doughnut shop. &nbsp;You're the master of
the entire host and runtime environment, OS, kernel, packages, updates, everything! &nbsp;Then, with
<a href="https://github.com/marketplace/cirrus-ci" target="_blank" rel="noopener noreferrer">the Cirrus CI app</a>
on your code repository, testing follows this simple automated sequence:</p><ol><li>Create VMs (or containers) in your cloud, using your encrypted credentials.</li><li>Follow <a href="https://cirrus-ci.org/guide/writing-tasks/#script-instruction" target="_blank" rel="noopener noreferrer">instructions you've spelled out like B-A-S-H</a>.</li><li>Show green on exit(0) - the "pretty" engineer's code is properly spoiled (i.e. functional).</li></ol><p>So
<a href="https://cirrus-ci.org/#comparison-with-popular-ciaas" target="_blank" rel="noopener noreferrer">Cirrus CI gives all the power</a>
for success, and/or blasting giant, perfectly round, holes in your own two feet!
Our CI experience can be as simple or complex as we like, and reliability will match that of major
cloud providers and the inverse of our cleverness. What could possibly go wrong? :D</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="vm-image-orchestration">VM Image Orchestration<a href="#vm-image-orchestration" class="hash-link" aria-label="Direct link to VM Image Orchestration" title="Direct link to VM Image Orchestration">​</a></h3><p>Implementing the bowels of any CI/Automation stack usually begins with orchestrate the initial
operating system state. &nbsp;Therefore, for efficiency-sake, it's handy to cache this work before,
exercising project-code changes. Otherwise, it's a complete waste of (expensive) engineer-time
to constantly install, update, and configure all aspects of the system during every test run.</p><p>As
<a href="https://cirrus-ci.org/guide/supported-computing-services/#custom-vm-images" target="_blank" rel="noopener noreferrer">recommended by Cirrus CI</a>
, we utilize a tool by the inventors of Vagrant: <a href="https://www.packer.io/" target="_blank" rel="noopener noreferrer">Packer</a>. &nbsp;I was able to
make it do things in a matter of minutes, as packer is fairly brain-dead-simple. &nbsp;It accepts a JSON
file, which I have simplified as YAML for readability. A simple (non-functional) example will
demonstrate the basic ideas:
{% raw %}</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">---</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">variables</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># all up-front, no guessing allowed!</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;foo</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"bar"</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># simple</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;build_image_suffix</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"-libpod-{{env `COMMIT_SHA`}}"</span><span class="token comment" style="color:#999988;font-style:italic"># from env. var</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">builders</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># Where to do stuff</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> "googlecompute" &nbsp;&nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># TONS of others supported too</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'{{build_name}}{{user `build_image_suffix`}}'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># ... more details ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> type "googlecompute"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># ...other OSes...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">provisioners</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># How to do stuff</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"shell"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">script</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> "/path/to/</span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">build_name</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">_setup.sh" &nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># macro looks up OS</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">post-processors</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># Where to stick stuff</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">type</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'googlecompute-export'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token key atrule" style="color:#00a4db">paths</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">...</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># name of storage bucket where VM Image will rest.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">```</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">% endraw %</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">In English</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">the above translates to</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">1. Using some provided variables like `foo`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> but fill the variable `build_image_suffix`</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   using the env. vars `$COMMIT_SHA`</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">2. Spin up some VMs in GCE.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">3. Upload and execute a shell script on each VM (in parallel).</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">4. Assuming success</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> store the resulting VM image into a storage bucket for</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   later use as needed</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> or will expire and get automatically deleted after a time.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Perhaps that's over</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">simplifying things a little</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> but</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">packer provides mostly </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">just the bear</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">necessities</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">(https</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">//www.packer.io/docs/provisioners/index.html)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">(sorry</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">song is stuck in my head</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">(https</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">//www.youtube.com/watch</span><span class="token punctuation" style="color:#393A34">?</span><span class="token plain">v=08NlhjpVFsU)). Roughly ten</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">minutes after running a simple packer build command</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> the VMs are automatically torn down</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> and their disks</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">saved. &nbsp;At a time of our choosing</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> an image can be imported from the storage bucket</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">then a small PR tossed up to activate the images for Cirrus.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">### Packer &amp;rarr; Cirrus-CI Connection</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Next up the stack</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> we'll dig into some basic details of the Cirrus CI system. &nbsp;If you've used</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">services like Travis before</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> this example .cirrus.yml file won't be too surprising (simplified</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">somewhat for example purposes)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">```yaml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">---</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Safely stored details about accessing our cloud</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">gcp_credentials</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> ENCRYPTED</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">blahblah</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">env</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># environment and behavioral values for all tasks and scripts</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># Where to clone the source code into</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;CIRRUS_WORKING_DIR</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"/var/tmp/go/src/github.com/containers/libpod"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;SCRIPT_BASE</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> ./contrib/cirrus &nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># saves some typing (below)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">testing_task</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># One particular set of things to do</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;gce_instance</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># What kind of VM to use</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># Same as image_name produced by packer (above)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;script</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># Step by step</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> $SCRIPT_BASE/setup_environment.sh &nbsp;&nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># does what it says</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> $SCRIPT_BASE/unit_test.sh &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># this too</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> $SCRIPT_BASE/integration_test.sh &nbsp;&nbsp;&nbsp;</span><span class="token comment" style="color:#999988;font-style:italic"># and this</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>With <a href="https://cirrus-ci.org/guide/quick-start/" target="_blank" rel="noopener noreferrer">Cirrus CI "installed"</a>
on a GitHub repository, upon any pull
request change, Cirrus CI will step
in to kick things within GCE, then report back results in your pull request.</p><p>However, we also need to test more than one OS. &nbsp;This is easily accomplished in Cirrus CI, by
using what they call a
<a href="https://cirrus-ci.org/guide/writing-tasks/#matrix-modification" target="_blank" rel="noopener noreferrer">matrix modification</a>.
Roughly translated into simple country-folk speak as: "<em>we done messed up our YAML parser
to do more fancier things, and stuff</em>". Illustrated in part by looking at an
excerpt from our
<a href="https://github.com/containers/podman/blob/main/.cirrus.yml" target="_blank" rel="noopener noreferrer">actual .cirrus.yml file</a>
in the libpod repository:</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">...</span><span class="token plain">cut</span><span class="token punctuation" style="color:#393A34">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key atrule" style="color:#00a4db">testing_task</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;gce_instance</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image_project</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"libpod-123456"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zone</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"us-central1-a"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpu</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memory</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"4Gb"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disk</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">200</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"ubuntu-18-libpod-a250386d"</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic"># &lt;-- name from packer</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"fedora-28-libpod-a250386d"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image_name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"fedora-29-libpod-a250386d"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">...</span><span class="token plain">cut</span><span class="token punctuation" style="color:#393A34">...</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The above will automatically duplicate the <code>testing_task</code> three times, running a different VM image
for each. You can run a matrix across other items as well, like environment variables. There are
also options for filtering your matrix, and adding dependencies between tasks. I'd spell those
our for you, but it's liable to suck the lubrication from your fidget-spinner.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="good-looks-and-clean-presentation">Good looks and clean presentation<a href="#good-looks-and-clean-presentation" class="hash-link" aria-label="Direct link to Good looks and clean presentation" title="Direct link to Good looks and clean presentation">​</a></h3><p>Another Cirrus CI feature we utilize, has to do with the way
<a href="https://cirrus-ci.org/guide/writing-tasks/#script-instruction" target="_blank" rel="noopener noreferrer">the scripting</a> output is
presented. This
includes what you don't see, like extraneous buttons and widgets. The way details are presented
can be critical for debugging. Here's how we leverage that simplicity:</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">testing_task</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;</span><span class="token punctuation" style="color:#393A34">...</span><span class="token plain">cut</span><span class="token punctuation" style="color:#393A34">...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;setup_environment_script</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> $SCRIPT_BASE/setup_environment.sh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;unit_test_script</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> $SCRIPT_BASE/unit_test.sh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;integration_test_script</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> $SCRIPT_BASE/integration_test.sh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> &nbsp;&nbsp;&nbsp;</span><span class="token punctuation" style="color:#393A34">...</span><span class="token plain">cut</span><span class="token punctuation" style="color:#393A34">...</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>It's possible to have multiple scripts or commands per <!-- -->_<!-- -->script section. &nbsp;Because we dedicate one
per, the output is presented in bite-size pieces:</p><p>This makes it super easy to find what you're looking for. If the unit-tests fail with a complaint about
some invalid environment variable. It's easier to drop down that box than to go scrolling through
a giant
<a href="https://en.wikipedia.org/wiki/Wikipedia:Wall_of_text" target="_blank" rel="noopener noreferrer">wall of text</a>
(though that's sometimes necessary also). On the other hand, if the output
was all jammed into a single <!-- -->_<!-- -->script block, tracking down problems might get too challenging
for my old-fogy sensibilities. Mind I've only celebrated my 38th birthday four times so far...and
remember exactly zero of what happened those nights.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="conclusion">Conclusion<a href="#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion">​</a></h3><p>There are many other details I could get into, but sadly, my coffee mug is empty and I can see that I
forgot to wash it (again). &nbsp;Nevertheless, if you need some simple nuts-and-bolts automation, I
highly recommend <a href="https://cirrus-ci.org" target="_blank" rel="noopener noreferrer">Cirrus-CI</a>. It's (beer) free to use for open-source
projects. The
<a href="https://cloud.google.com" target="_blank" rel="noopener noreferrer">Google Cloud Engine</a>
is also pseudo-free for quite a while, since they give you a
very generous, and substantial startup credit.</p><p>Other than finding a new mug or my soap, if there are any burning questions here,
or snide remarks there, please feel free to find me in #podman on Freenode (IRC).
Unless the question is too-smart, I might even be able to answer it. Until then,
may your pretty code keep its bugs well hidden <em>and</em> out of sight.</p>]]></content>
        <author>
            <name>cevich</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="ci" term="ci"/>
        <category label="automation" term="automation"/>
        <category label="test" term="test"/>
        <category label="cloud" term="cloud"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[podman-install]]></title>
        <id>https://podman.io/blogs/2019/03/16/podman-install</id>
        <link href="https://podman.io/blogs/2019/03/16/podman-install"/>
        <updated>2019-03-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[x---]]></summary>
        <content type="html"><![CDATA[<p>x---
title: Installation of Podman to Run Docker Container - Part 1<br>
<!-- -->layout: default
author: tsweeney
categories: <!-- -->[blogs]<!-- -->
tags: <!-- -->[containers, images, docker, buildah, podman, oci]</p><hr><p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Installation of Podman to Run Docker Container - Part 1</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>A new article about how Opvizor installed <a href="https://www.opvizor.com/installation-of-podman-to-run-docker-container-part-1?sp_url=6k5w" target="_blank" rel="noopener noreferrer">Podman to run Docker containers</a>. This blog entry at Opvizor looks into their installation process and their early takeaways on Podman.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman and Buildah for Docker Users!]]></title>
        <id>https://podman.io/blogs/2019/02/21/pandb-4-users</id>
        <link href="https://podman.io/blogs/2019/02/21/pandb-4-users"/>
        <updated>2019-02-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman and Buildah for Docker Users</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>A new article about how Docker users can use Podman and Buildah on the <a href="https://developers.redhat.com/blog/2019/02/21/podman-and-buildah-for-docker-users/" target="_blank" rel="noopener noreferrer">Red Hat Developer Site</a>. William Henry (@ipbabble) introduces the two tools to Docker users and explains how they can be used to replace Docker and how the two tools are related.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Container Tools on RHEL 8 & How to Hack Podman]]></title>
        <id>https://podman.io/blogs/2019/02/07/hack-and-tools</id>
        <link href="https://podman.io/blogs/2019/02/07/hack-and-tools"/>
        <updated>2019-02-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><p>Scott McCarty wrote "<a href="https://www.redhat.com/en/blog/red-hat-enterprise-linux-8-beta-new-set-container-tools" target="_blank" rel="noopener noreferrer">Red Hat Enterprise Linux 8 Beta: A new set of container tools</a>". In the blog Scott introduces the new container tools in RHEL 8 Beta. Spoiler Alert! No Big Fat Daemons were harmed in the examples Scott provides!</p><p>Hervé Beraud wrote "<a href="https://herve.beraud.io/containers/linux/podman/isolate/environment/2019/02/06/how-to-hack-on-podman.html" target="_blank" rel="noopener noreferrer">How to Hack on Podman</a>, which walks you through contributing to the Podman project.</p><p>Both are great reads to help build your container tools knowledge.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Programmatic remote access to Podman via the varlink protocol]]></title>
        <id>https://podman.io/blogs/2019/01/16/podman-varlink</id>
        <link href="https://podman.io/blogs/2019/01/16/podman-varlink"/>
        <updated>2019-01-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Programmatic remote access to Podman via the varlink protocol</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-harald-hoyer-github">By Harald Hoyer <a href="https://github.com/haraldh" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-harald-hoyer-github" class="hash-link" aria-label="Direct link to by-harald-hoyer-github" title="Direct link to by-harald-hoyer-github">​</a></h2><p>This guide shows how to access Podman remotely via the <a href="https://varlink.org" target="_blank" rel="noopener noreferrer">varlink interface</a>
with CLI tools and programmatically with python, go and rust.</p><p>This should work on Linux, MacOS and Windows 10.</p><p>The <a href="https://varlink.org/Language-Bindings" target="_blank" rel="noopener noreferrer">compatibility matrix</a> shows which feature is supported on which OS in which language.</p><blockquote><p>Note: replace <code>&lt;podman-machine&gt;</code> in this guide with the IP or hostname of your
Podman machine</p></blockquote><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="prerequisites">Prerequisites<a href="#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites">​</a></h2><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="windows-ssh">Windows ssh<a href="#windows-ssh" class="hash-link" aria-label="Direct link to Windows ssh" title="Direct link to Windows ssh">​</a></h3><p>If you are on a windows client machine, install the OpenSSH Client built by Microsoft in a cmd.exe in
admin mode:</p><div class="language-cmd codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-cmd codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">&gt; dism /online /Add-Capability /CapabilityName:OpenSSH.Client~~~~0.0.1.0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Close cmd.exe window.</p><blockquote><p>Note: Works also with other ssh clients, e.g. ssh from <a href="https://gitforwindows.org/" target="_blank" rel="noopener noreferrer">Git Bash</a>.</p></blockquote><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="generate-ssh-keys">Generate ssh keys<a href="#generate-ssh-keys" class="hash-link" aria-label="Direct link to Generate ssh keys" title="Direct link to Generate ssh keys">​</a></h3><p>If you don't want to type your password all the time, or not use an ssh agent, set an empty password.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ ssh-keygen -f ~/.ssh/podmanuser</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="set-up-podman-on-the-fedorarhel-machine">Set up Podman on the Fedora/RHEL machine<a href="#set-up-podman-on-the-fedorarhel-machine" class="hash-link" aria-label="Direct link to Set up Podman on the Fedora/RHEL machine" title="Direct link to Set up Podman on the Fedora/RHEL machine">​</a></h2><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> yum </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> libvarlink-util</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">groupadd</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">podman</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Copy <code>/lib/tmpfiles.d/podman.conf</code> to <code>/etc/tmpfiles.d/podman.conf</code>.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">cp</span><span class="token plain"> /lib/tmpfiles.d/podman.conf /etc/tmpfiles.d/podman.conf</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Edit <code>/etc/tmpfiles.d/podman.conf</code>:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">d /run/podman 0750 root podman</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Copy <code>/lib/systemd/system/io.podman.socket</code> to <code>/etc/systemd/system/io.podman.socket</code>.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">cp</span><span class="token plain"> /lib/systemd/system/io.podman.socket /etc/systemd/system/io.podman.socket</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Edit section <code>[Socket]</code> of <code>/etc/systemd/system/io.podman.socket</code>:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[Socket]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ListenStream=/run/podman/io.podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">SocketMode=0660</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">SocketGroup=podman</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Then activate the changes:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> systemctl daemon-reload</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> systemd-tmpfiles --create</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> systemctl </span><span class="token builtin class-name">enable</span><span class="token plain"> --now io.podman.socket</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The directory and socket now belongs to the podman group</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">ls</span><span class="token plain"> -al /run/podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-x---.  </span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> root </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain">   </span><span class="token number" style="color:#36acaa">60</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">14</span><span class="token plain">. Jan </span><span class="token number" style="color:#36acaa">14</span><span class="token plain">:50 </span><span class="token builtin class-name">.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x. </span><span class="token number" style="color:#36acaa">51</span><span class="token plain"> root root   </span><span class="token number" style="color:#36acaa">1420</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">14</span><span class="token plain">. Jan </span><span class="token number" style="color:#36acaa">14</span><span class="token plain">:36 </span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">srw-rw----.  </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> root </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain">    </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">14</span><span class="token plain">. Jan </span><span class="token number" style="color:#36acaa">14</span><span class="token plain">:50 io.podman</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>Note: Wouldn't it be nice, if there was a Podman group owning the socket already? ;-)</p></blockquote><p>Now we are adding a user <code>podmanuser</code> and set a password:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useradd</span><span class="token plain"> podmanuser -G </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">passwd</span><span class="token plain"> podmanuser</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>From your client machine do</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ ssh-copy-id -f ~/.ssh/podmanuser podmanuser@</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">podman-machine</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="ssh-config">ssh config<a href="#ssh-config" class="hash-link" aria-label="Direct link to ssh config" title="Direct link to ssh config">​</a></h3><p>Edit <code>.ssh/config</code></p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Host &lt;podman-machine&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    RequestTTY no</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    IdentityFile ~/.ssh/podmanuser</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    User podmanuser</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    VisualHostKey no</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    RemoteCommand /usr/bin/varlink bridge --connect unix:/run/podman/io.podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    GSSAPIAuthentication no</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ForwardX11 no</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="optional-lock-down">Optional Lock Down<a href="#optional-lock-down" class="hash-link" aria-label="Direct link to Optional Lock Down" title="Direct link to Optional Lock Down">​</a></h3><p>Log into <code>&lt;podman-machine&gt;</code></p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">ssh</span><span class="token plain"> podmanuser@</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">podman-machine</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now we lock down <code>podmanuser</code> to only be used with the varlink bridge from your client machine:</p><p>Edit <code>.ssh/authorized-keys</code> so that the line begins with:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">command="/usr/bin/varlink bridge --connect unix:/run/podman/io.podman",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa […]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Log out of <code>&lt;podman-machine&gt;</code></p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="python">Python<a href="#python" class="hash-link" aria-label="Direct link to Python" title="Direct link to Python">​</a></h2><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="install-python">Install Python<a href="#install-python" class="hash-link" aria-label="Direct link to Install Python" title="Direct link to Install Python">​</a></h3><p><a href="https://www.python.org/downloads/" target="_blank" rel="noopener noreferrer">https://www.python.org/downloads/</a></p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="install-varlink-for-python">Install varlink for Python<a href="#install-varlink-for-python" class="hash-link" aria-label="Direct link to Install varlink for Python" title="Direct link to Install varlink for Python">​</a></h3><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ pip </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --user </span><span class="token string" style="color:#e3116c">"varlink&gt;=30.0.2"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="test-if-the-varlink-cli-module-works">Test if the varlink cli module works<a href="#test-if-the-varlink-cli-module-works" class="hash-link" aria-label="Direct link to Test if the varlink cli module works" title="Direct link to Test if the varlink cli module works">​</a></h3><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ python -m varlink.cli --help</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">usage: cli.py </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">-h</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">-r RESOLVER</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">-A ACTIVATE</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">-b BRIDGE</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">info,help,bridge,call</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">…</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="interfacing-podman-with-the-python-cli-module">Interfacing Podman with the python cli module<a href="#interfacing-podman-with-the-python-cli-module" class="hash-link" aria-label="Direct link to Interfacing Podman with the python cli module" title="Direct link to Interfacing Podman with the python cli module">​</a></h3><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ python -m varlink.cli --bridge </span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token plain"> info</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">info</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">.1:1234</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vendor: Atomic</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Product: </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Version: </span><span class="token number" style="color:#36acaa">0.10</span><span class="token plain">.1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">URL: https://github.com/containers/podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Interfaces:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   org.varlink.service</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   io.podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ python -m varlink.cli --bridge </span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token plain"> call io.podman.Ping </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token string" style="color:#e3116c">"ping"</span><span class="token builtin class-name">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">"message"</span><span class="token builtin class-name">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"OK"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="python-client-example">Python Client Example<a href="#python-client-example" class="hash-link" aria-label="Direct link to Python Client Example" title="Direct link to Python Client Example">​</a></h3><p><code>podmanclient.py</code>:</p><div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> varlink</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">with</span><span class="token plain"> varlink</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">new_with_bridge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"ssh"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"&lt;podman-machine&gt;"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">as</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">with</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token builtin">open</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"io.podman"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">as</span><span class="token plain"> podman</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">podman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Ping</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">podman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">GetInfo</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">podman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">GetVersion</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        info </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> podman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">GetInfo</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Uptime:"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> info</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"info"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"host"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"uptime"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Os:"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> info</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"info"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"host"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"os"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">try</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            podman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">MountContainer</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"container-id"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">except</span><span class="token plain"> varlink</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">VarlinkError </span><span class="token keyword" style="color:#00009f">as</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">error</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">parameters</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">as_dict</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>To find out more about the Podman varlink interface read the <a href="https://github.com/containers/podman/blob/main/cmd/podman/varlink/io.podman.varlink" target="_blank" rel="noopener noreferrer">io.podman.varlink</a> file or
the rendered <a href="https://github.com/containers/podman/blob/main/API.md" target="_blank" rel="noopener noreferrer">API.md</a>.</p><p>Or you can inspect, what methods your Podman version on <code>&lt;podman-machine&gt;</code> provides:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ python -m varlink.cli --bridge </span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token plain"> </span><span class="token builtin class-name">help</span><span class="token plain"> io.podman</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="go">Go<a href="#go" class="hash-link" aria-label="Direct link to Go" title="Direct link to Go">​</a></h2><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="installation">Installation<a href="#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation">​</a></h3><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ go get -u github.com/varlink/go/varlink</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ go </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> github.com/varlink/go/cmd/varlink</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ go </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> github.com/varlink/go/cmd/varlink-go-interface-generator</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="running-the-varlink-cli-command">Running the varlink CLI command<a href="#running-the-varlink-cli-command" class="hash-link" aria-label="Direct link to Running the varlink CLI command" title="Direct link to Running the varlink CLI command">​</a></h3><p>The <code>varlink</code> CLI command in <code>$GOPATH/bin</code> should output:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ varlink --bridge </span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token plain"> info</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vendor: Atomic</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Product: </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Version: </span><span class="token number" style="color:#36acaa">0.10</span><span class="token plain">.1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">URL: https://github.com/containers/podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Interfaces:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  org.varlink.service</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  io.podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ varlink --bridge </span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token plain"> call io.podman.Ping</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token string" style="color:#e3116c">"ping"</span><span class="token builtin class-name">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">"message"</span><span class="token builtin class-name">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"OK"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ varlink --bridge </span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token plain"> call io.podman.MountContainer </span><span class="token string" style="color:#e3116c">"{</span><span class="token string entity" style="color:#36acaa">\"</span><span class="token string" style="color:#e3116c">name</span><span class="token string entity" style="color:#36acaa">\"</span><span class="token string" style="color:#e3116c">: </span><span class="token string entity" style="color:#36acaa">\"</span><span class="token string" style="color:#e3116c">container-id</span><span class="token string entity" style="color:#36acaa">\"</span><span class="token string" style="color:#e3116c">}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Error: Call failed with error: io.podman.ErrorOccurred</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token string" style="color:#e3116c">"reason"</span><span class="token builtin class-name">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"no container with name or ID container-id found: no such container"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>To find out more about the Podman varlink interface read the <a href="https://github.com/containers/podman/blob/main/cmd/podman/varlink/io.podman.varlink" target="_blank" rel="noopener noreferrer">io.podman.varlink</a> file or
the rendered <a href="https://github.com/containers/podman/blob/main/API.md" target="_blank" rel="noopener noreferrer">API.md</a>.</p><p>Or you can inspect, what methods your Podman version on <code>&lt;podman-machine&gt;</code> provides:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ varlink --bridge </span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token plain"> </span><span class="token builtin class-name">help</span><span class="token plain"> io.podman</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="go-client-example">Go Client Example<a href="#go-client-example" class="hash-link" aria-label="Direct link to Go Client Example" title="Direct link to Go Client Example">​</a></h3><p>Either clone this <a href="https://github.com/haraldh/podmangoexampleclient" target="_blank" rel="noopener noreferrer">repository</a> or:</p><p>Create a new go project.
Create a sub directory <code>iopodman</code> in the project.</p><p>Create the <code>io.podman.varlink</code> either from the podman github sources or dynamically with:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ varlink --bridge </span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token plain"> </span><span class="token builtin class-name">help</span><span class="token plain"> io.podman </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> iopodman/io.podman.varlink</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Create iopodman/generate.go:</p><div class="language-go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-go codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">package</span><span class="token plain"> iopodman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">//go:generate $GOPATH/bin/varlink-go-interface-generator io.podman.varlink</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Run <code>go generate</code>:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ go generate ./</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Create your main.go:</p><div class="language-go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-go codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">package</span><span class="token plain"> main</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">"flag"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">"fmt"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">"github.com/haraldh/podmangoexampleclient/iopodman"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">"github.com/varlink/go/varlink"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">"io"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">"os"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">func</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">printError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">methodname </span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err </span><span class="token builtin">error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Error calling %s: "</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> methodname</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">switch</span><span class="token plain"> e </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> err</span><span class="token punctuation" style="color:#393A34">.</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">type</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">iopodman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ImageNotFound</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">//error ImageNotFound (name: string)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'%v' name='%s'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Name</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">iopodman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ContainerNotFound</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">//error ContainerNotFound (name: string)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'%v' name='%s'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Name</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">iopodman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">NoContainerRunning</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">//error NoContainerRunning ()</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'%v'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">iopodman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">PodNotFound</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">//error PodNotFound (name: string)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'%v' name='%s'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Name</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">iopodman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">PodContainerError</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">//error PodContainerError (podname: string, errors: []PodContainerErrorData)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'%v' podname='%s' errors='%v'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Podname</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Errors</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">iopodman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">NoContainersInPod</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">//error NoContainersInPod (name: string)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'%v' name='%s'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Name</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">iopodman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ErrorOccurred</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">//error ErrorOccurred (reason: string)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'%v' reason='%s'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Reason</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">iopodman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">RuntimeError</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">//error RuntimeError (reason: string)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'%v' reason='%s'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Reason</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">varlink</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">InvalidParameter</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'%v' parameter='%s'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Parameter</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">varlink</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">MethodNotFound</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'%v' method='%s'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Method</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">varlink</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">MethodNotImplemented</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'%v' method='%s'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Method</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">varlink</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">InterfaceNotFound</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'%v' interface='%s'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Interface</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">case</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">varlink</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Error</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"'%v' parameters='%v'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> e</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Parameters</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">default</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> err </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> io</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">EOF </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Connection closed\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> err </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> io</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">ErrUnexpectedEOF </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Connection aborted\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"%T - '%v'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">func</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">var</span><span class="token plain"> c </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">varlink</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Connection</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">var</span><span class="token plain"> err </span><span class="token builtin">error</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    c</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> varlink</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">NewBridge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> err </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">nil</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fprintf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Stderr</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Error connecting: %T - '%v'\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Exit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// Be nice and cleanup</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">defer</span><span class="token plain"> c</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Close</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    info</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> iopodman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">GetInfo</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Call</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">c</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> err </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">nil</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">printError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"GetInfo()"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Exit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Printf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Info: %+v\n\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> info</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    fmt</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Printf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Podman Version: %+v\n\n"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> info</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Podman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Podman_version</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    containers</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> iopodman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">ListContainers</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Call</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">c</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> err </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">nil</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">printError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"ListContainers()"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        os</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Exit</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> container </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">range</span><span class="token plain"> containers </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">container</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    mount</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> iopodman</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">MountContainer</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Call</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">c</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"foo"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> err </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">nil</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">printError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"MountContainer()"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">mount</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="rust">Rust<a href="#rust" class="hash-link" aria-label="Direct link to Rust" title="Direct link to Rust">​</a></h2><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="install-the-rust-toolchain">Install the rust toolchain<a href="#install-the-rust-toolchain" class="hash-link" aria-label="Direct link to Install the rust toolchain" title="Direct link to Install the rust toolchain">​</a></h3><h4 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="windows">Windows<a href="#windows" class="hash-link" aria-label="Direct link to Windows" title="Direct link to Windows">​</a></h4><p>First install the C++ part of <a href="https://visualstudio.microsoft.com/downloads/" target="_blank" rel="noopener noreferrer">https://visualstudio.microsoft.com/downloads/</a></p><h4 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="all">All<a href="#all" class="hash-link" aria-label="Direct link to All" title="Direct link to All">​</a></h4><p><a href="https://rustup.rs/" target="_blank" rel="noopener noreferrer">https://rustup.rs/</a></p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="install-varlink-cli">Install varlink-cli<a href="#install-varlink-cli" class="hash-link" aria-label="Direct link to Install varlink-cli" title="Direct link to Install varlink-cli">​</a></h3><h4 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="for-non-linux-systems">For non-Linux systems:<a href="#for-non-linux-systems" class="hash-link" aria-label="Direct link to For non-Linux systems:" title="Direct link to For non-Linux systems:">​</a></h4><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ cargo </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> varlink-cli</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>Note: Ensure that $HOME/.cargo/bin is in your PATH or copy $HOME/.cargo/bin/varlink
in one of your path directories</p></blockquote><h4 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="for-linux-systems">For Linux systems:<a href="#for-linux-systems" class="hash-link" aria-label="Direct link to For Linux systems:" title="Direct link to For Linux systems:">​</a></h4><p>You can also use <code>varlink</code> util from <a href="https://github.com/varlink/libvarlink" target="_blank" rel="noopener noreferrer">libvarlink</a>
or install <code>libvarlink-util</code> on Fedora/RHEL machines.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="running-the-varlink-cli-command-1">Running the varlink CLI command<a href="#running-the-varlink-cli-command-1" class="hash-link" aria-label="Direct link to Running the varlink CLI command" title="Direct link to Running the varlink CLI command">​</a></h3><p>The <code>varlink</code> CLI command in <code>~/.cargo/bin</code> should output:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ varlink --bridge </span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token plain"> info</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Vendor: Atomic</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Product: </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Version: </span><span class="token number" style="color:#36acaa">0.10</span><span class="token plain">.1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">URL: https://github.com/containers/podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Interfaces:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  org.varlink.service</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  io.podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ varlink --bridge </span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token plain"> call io.podman.Ping</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token string" style="color:#e3116c">"ping"</span><span class="token builtin class-name">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">"message"</span><span class="token builtin class-name">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"OK"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ varlink --bridge </span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token plain"> call io.podman.MountContainer </span><span class="token string" style="color:#e3116c">"{</span><span class="token string entity" style="color:#36acaa">\"</span><span class="token string" style="color:#e3116c">name</span><span class="token string entity" style="color:#36acaa">\"</span><span class="token string" style="color:#e3116c">: </span><span class="token string entity" style="color:#36acaa">\"</span><span class="token string" style="color:#e3116c">container-id</span><span class="token string entity" style="color:#36acaa">\"</span><span class="token string" style="color:#e3116c">}"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Error: Call failed with error: io.podman.ErrorOccurred</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token string" style="color:#e3116c">"reason"</span><span class="token builtin class-name">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"no container with name or ID container-id found: no such container"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>To find out more about the Podman varlink interface read the <a href="https://github.com/containers/podman/blob/main/cmd/podman/varlink/io.podman.varlink" target="_blank" rel="noopener noreferrer">io.podman.varlink</a> file or
the rendered <a href="https://github.com/containers/podman/blob/main/API.md" target="_blank" rel="noopener noreferrer">API.md</a>.</p><p>Or you can inspect, what methods your Podman version on <code>&lt;podman-machine&gt;</code> provides:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ varlink --bridge </span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token plain"> </span><span class="token builtin class-name">help</span><span class="token plain"> io.podman</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="rust-client-example">Rust Client Example<a href="#rust-client-example" class="hash-link" aria-label="Direct link to Rust Client Example" title="Direct link to Rust Client Example">​</a></h3><p>Either clone this <a href="https://github.com/haraldh/podmanrs" target="_blank" rel="noopener noreferrer">repository</a> or:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ cargo new --bin podmanrs</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token builtin class-name">cd</span><span class="token plain"> podmanrs</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Download the varlink interface from the running Podman varlink service:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ varlink --bridge </span><span class="token string" style="color:#e3116c">"ssh &lt;podman-machine&gt;"</span><span class="token plain"> </span><span class="token builtin class-name">help</span><span class="token plain"> io.podman </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> src/io.podman.varlink</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>create <code>build.rs</code>:</p><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">extern crate varlink_generator;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">fn main() {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   varlink_generator::cargo_build_tosource("src/io.podman.varlink", true);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>create <code>Cargo.toml</code>:</p><div class="language-toml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-toml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[package]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">name = "podmanrs"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">version = "0.1.0"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">authors = ["Harald Hoyer &lt;harald@redhat.com&gt;"]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">build = "build.rs"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">edition = "2018"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[dependencies]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">varlink = "7"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">serde = "1"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">serde_derive = "1"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">serde_json = "1"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">chainerror = "0.4"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[build-dependencies]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">varlink_generator = "7"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>create <code>src/main.rs</code>:</p><div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">mod io_podman;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">use crate::io_podman::*;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">use varlink::Connection;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">use std::result::Result;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">use std::error::Error;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">fn main() -&gt; Result&lt;(), Box&lt;Error&gt;&gt; {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    let connection = Connection::with_bridge(</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        "ssh &lt;podman-machine&gt;",</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    )?;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    let mut podman = VarlinkClient::new(connection.clone());</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    let reply = podman.ping().call()?;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    println!("Ping() replied with '{}'", reply.ping.message);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    let reply = podman.get_info().call()?;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    println!("Hostname: {}", reply.info.host.hostname);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    println!("Info: {:#?}", reply.info);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Ok(())</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now run it:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ cargo run</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>]]></content>
        <author>
            <name>haraldh</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="varlink" term="varlink"/>
        <category label="rust" term="rust"/>
        <category label="python" term="python"/>
        <category label="go" term="go"/>
        <category label="golang" term="golang"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Managing pods and containers in a local container runtime]]></title>
        <id>https://podman.io/blogs/2019/01/15/podman-pods</id>
        <link href="https://podman.io/blogs/2019/01/15/podman-pods"/>
        <updated>2019-01-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Brent Baude has written a new article called "Managing pods and containers in a local container runtime" on the]]></summary>
        <content type="html"><![CDATA[<p>Brent Baude has written a new article called "<a href="https://developers.redhat.com/blog/2019/01/15/podman-managing-containers-pods/" target="_blank" rel="noopener noreferrer">Managing pods and containers in a local container runtime</a>" on the
Red Hat Developer site. Learn how using pods in Podman can help organize and orchestrate your containers.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman Machine and Boot2podman]]></title>
        <id>https://podman.io/blogs/2019/01/14/podman-machine-and-boot2podman</id>
        <link href="https://podman.io/blogs/2019/01/14/podman-machine-and-boot2podman"/>
        <updated>2019-01-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[boot2podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" src="https://raw.githubusercontent.com/boot2podman/boot2podman/master/logo.png" alt="boot2podman logo" class="img_ev3q"></p><h1>Podman Machine and Boot2podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-anders-f-björklund-github">By Anders F Björklund <a href="https://github.com/afbjorklund" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-anders-f-björklund-github" class="hash-link" aria-label="Direct link to by-anders-f-björklund-github" title="Direct link to by-anders-f-björklund-github">​</a></h2><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="update-september-9-2021---tom-sweeney">Update: September 9, 2021 - Tom Sweeney<a href="#update-september-9-2021---tom-sweeney" class="hash-link" aria-label="Direct link to Update: September 9, 2021 - Tom Sweeney" title="Direct link to Update: September 9, 2021 - Tom Sweeney">​</a></h3><p>This post initially discussed the boot2podman/machine project, which Anders has since deprecated. Starting with Podman v3.3, the <code>podman machine</code> command now does that same function and is part of the Podman project. Please see Brent Baude's <a href="https://podman.io/blogs/2021/09/06/podman-on-macs.html" target="_blank" rel="noopener noreferrer">update</a> or the <a href="https://docs.podman.io/en/latest/machine.html" target="_blank" rel="noopener noreferrer">podman machine</a> man page on <a href="https://docs.podman.io/" target="_blank" rel="noopener noreferrer">docs.podman.io</a> for more information on how to run Podman machine. The <code>podman-machine</code> command has been deprecated.</p><p>In addition, the Podman team is investigating the possibility of creating <code>Podman Desktop</code>. Please see the issue on <a href="https://github.com/containers/podman/issues/11494" target="_blank" rel="noopener noreferrer">GitHub</a>, and please add your comments or thoughts to that issue.</p><p>More updates are coming, and please keep your eye on the <a href="https://podman.io/community/#mailing-list" target="_blank" rel="noopener noreferrer">Podman Mailing List</a> and <a href="https://podman.io" target="_blank" rel="noopener noreferrer">podman.io</a> for further information and developments.</p><p>Finally, a very big thank you to Anders for his many contributions to Podman, particularly for his work in getting Podman to work smoothly on macOS.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="original-post">Original Post<a href="#original-post" class="hash-link" aria-label="Direct link to Original Post" title="Direct link to Original Post">​</a></h2><p>By using <code>podman-machine</code> and indirectly <code>boot2podman</code>, it is easy to get started with podman even if your local host does not support it...</p><p>It will start a virtual machine, with everything to run containers. This includes <code>podman</code> and <code>buildah</code>, and remote access over <code>varlink</code>.</p><p>The command-line tool <code>podman-machine</code> is a simple way to create virtual machines running <code>boot2podman.iso</code>.
It will create a "machine" with Linux prepared for running Linux containers, with <a href="https://podman.io" target="_blank" rel="noopener noreferrer">Podman</a> and <a href="https://buildah.io" target="_blank" rel="noopener noreferrer">Buildah</a> (and their dependencies) pre-installed.</p><p>This way any client will be able to run containers, even though not possible on their operating system.
Whether their Linux distribution is too old or too unprivileged, or if they are running Windows or OS X operating systems without native Linux support.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-machine">Podman Machine<a href="#podman-machine" class="hash-link" aria-label="Direct link to Podman Machine" title="Direct link to Podman Machine">​</a></h2><p>Machine lets you create servers with Podman, then configures the Podman clients.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ podman-machine create box</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ podman-machine ssh box</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">tc@box:~$ sudo podman</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Will automatically download the latest version of the ISO, if not available in the cache.</p><p><em>See:</em> <a href="https://github.com/boot2podman/machine" target="_blank" rel="noopener noreferrer">https://github.com/boot2podman/machine</a></p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="boot2podman-iso">Boot2Podman ISO<a href="#boot2podman-iso" class="hash-link" aria-label="Direct link to Boot2Podman ISO" title="Direct link to Boot2Podman ISO">​</a></h2><p>Boot2podman is a lightweight Linux distribution made specifically to run Linux containers.</p><ul><li>Tiny Core Linux 9.x (x86_64)</li><li>Buildah / Varlink / Podman</li></ul><p>The distribution runs entirely from RAM, while persisting the containers and ssh keys.</p><p><em>See:</em> <a href="https://github.com/boot2podman/boot2podman" target="_blank" rel="noopener noreferrer">https://github.com/boot2podman/boot2podman</a></p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="remote-access">Remote Access<a href="#remote-access" class="hash-link" aria-label="Direct link to Remote Access" title="Direct link to Remote Access">​</a></h2><p>It is possible to use the <code>pypodman</code> command-line tool, to control podman remotely:</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ eval $(podman-machine env box)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ pypodman version</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><a href="https://github.com/containers/python-podman" target="_blank" rel="noopener noreferrer">https://github.com/containers/python-podman</a></p><p>Or alternatively to use the <code>varlink-go</code> command-line tool, to access the podman API:</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ eval $(podman-machine env box --varlink)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ varlink-go call io.podman.GetVersion</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><a href="https://github.com/boot2podman/varlink-go" target="_blank" rel="noopener noreferrer">https://github.com/boot2podman/varlink-go</a></p><p>Both methods use SSH, in order to access the podman varlink socket of the VM.</p><p>The SSH keys and other configuration is automatically created with the machine.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="tiny-core">Tiny Core<a href="#tiny-core" class="hash-link" aria-label="Direct link to Tiny Core" title="Direct link to Tiny Core">​</a></h2><p>The regular <code>boot2podman.iso</code> is based on <a href="http://tinycorelinux.net" target="_blank" rel="noopener noreferrer">Tiny Core Linux</a>:</p><p><a href="https://github.com/boot2podman/boot2podman/releases" target="_blank" rel="noopener noreferrer">https://github.com/boot2podman/boot2podman/releases</a></p><p>This is a minimal system, that runs entirely from RAM and uses <code>init(1)</code>.</p><p>The package manager uses TCZ packages, handled by the <code>tce-load</code> program.</p><p><em>See:</em> <a href="https://en.wikipedia.org/wiki/Tiny_Core_Linux" target="_blank" rel="noopener noreferrer">https://en.wikipedia.org/wiki/Tiny_Core_Linux</a></p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="fedora">Fedora<a href="#fedora" class="hash-link" aria-label="Direct link to Fedora" title="Direct link to Fedora">​</a></h2><p>There is also an alternative version, based on <a href="https://getfedora.org/" target="_blank" rel="noopener noreferrer">Fedora Linux</a>:</p><p><a href="https://github.com/boot2podman/boot2podman-fedora-iso/releases" target="_blank" rel="noopener noreferrer">https://github.com/boot2podman/boot2podman-fedora-iso/releases</a></p><p>This is a full system, that boots a regular image and uses <code>systemd(1)</code>.</p><p>The package manager uses RPM packages, handled by the <code>dnf</code> program.</p><p><em>See:</em> <a href="https://en.wikipedia.org/wiki/Fedora_(operating_system)" target="_blank" rel="noopener noreferrer">https://en.wikipedia.org/wiki/Fedora<!-- -->_<!-- -->(operating_system)</a></p><p>Both versions will do the same thing, in that they will both offer the Podman varlink socket.</p><p>The Podman Machine can set up virtual machines for either, by using the "url" parameters.</p><hr><p>For more posts about boot2podman, see: <a href="https://boot2podman.github.io/" target="_blank" rel="noopener noreferrer">https://boot2podman.github.io/</a></p>]]></content>
        <author>
            <name>afbjorklund</name>
        </author>
        <category label="boot2podman" term="boot2podman"/>
        <category label="podman+machine" term="podman+machine"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[RHEl 8 beta and Podman]]></title>
        <id>https://podman.io/blogs/2019/01/08/rhel-8-and-podman</id>
        <link href="https://podman.io/blogs/2019/01/08/rhel-8-and-podman"/>
        <updated>2019-01-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Daniel Koszegi has posted a new blog: "First look at RHEL 8 and Podman". Daniel talks about the RHEL 8 beta and how Podman figures into it!.]]></summary>
        <content type="html"><![CDATA[<p>Daniel Koszegi has posted a new blog: "<a href="https://medium.com/@danielkoszegi/first-look-at-rhel-8-beta-and-podman-f344165c1620" target="_blank" rel="noopener noreferrer">First look at RHEL 8 and Podman</a>". Daniel talks about the RHEL 8 beta and how Podman figures into it!.</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Software Factory Container With Buildah And Podman]]></title>
        <id>https://podman.io/blogs/2019/01/07/software-factory-podman</id>
        <link href="https://podman.io/blogs/2019/01/07/software-factory-podman"/>
        <updated>2019-01-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Tristan de Cacqueray has posted a new blog: "Software Factory Container With Buildah And Podman".]]></summary>
        <content type="html"><![CDATA[<p>Tristan de Cacqueray has posted a new blog: "<a href="https://www.softwarefactory-project.io/software-factory-container-with-buildah-and-podman.html" target="_blank" rel="noopener noreferrer">Software Factory Container With Buildah And Podman</a>".
Tristan explains how to use Buildah and Podman to containerize a systemd based service suite.</p>]]></content>
        <author>
            <name>tristanC</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[New Blog from Emilien Macchi, Part 4!]]></title>
        <id>https://podman.io/blogs/2018/12/14/openstack-podman-healthchecks</id>
        <link href="https://podman.io/blogs/2018/12/14/openstack-podman-healthchecks"/>
        <updated>2018-12-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Emilien Macchi has posted a fourth blog on how his group is running Healthchecks for Podman containers: "OpenStack Containerization with Podman – Part 4 (Healthchecks)". Check it out!]]></summary>
        <content type="html"><![CDATA[<p><a href="https://twitter.com/EmilienMacchi" target="_blank" rel="noopener noreferrer">Emilien Macchi</a> has posted a fourth blog on how his group is running Healthchecks for Podman containers: "<a href="https://my1.fr/blog/openstack-containerization-with-podman-part-4-healthchecks/" target="_blank" rel="noopener noreferrer">OpenStack Containerization with Podman – Part 4 (Healthchecks)</a>". Check it out!</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Simplifying Podman commands with labels]]></title>
        <id>https://podman.io/blogs/2018/12/03/podman-runlabel</id>
        <link href="https://podman.io/blogs/2018/12/03/podman-runlabel"/>
        <updated>2018-12-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Simplifying Podman commands with labels</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>Commands used by container runtimes to create containers have become complex. It is on purpose of course. When creating
containers, we want the ability to specify various security or network attributes. But if you are in the unenviable position to have to keystroke in some of these lengthy commands, it can grow tiresome. Defining labels on the container image is a great way to define how the container should be run; however, now with Podman we can read and execute that label saving you potential command line bloat.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="container-image-labels">Container image Labels<a href="#container-image-labels" class="hash-link" aria-label="Direct link to Container image Labels" title="Direct link to Container image Labels">​</a></h3><p>Container images have had the concept of a label for quite some time. They are often used as identifiers for the image; i.e. version, release, author, etc. But you can create a container label for just about anything. With the Atomic CLI project, we used to leverage labels such as RUN, INSTALL, and UNINSTALL. These labels we defined for the purpose of their verbiage.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="podman-container-runlabel">Podman container runlabel<a href="#podman-container-runlabel" class="hash-link" aria-label="Direct link to Podman container runlabel" title="Direct link to Podman container runlabel">​</a></h3><p>To mimic the Atomic CLI project, we added a sub-command called <code>podman container runlabel</code>. This command will execute the contents of a given label as defined by the container image.</p><p>Lets consider an example. I have a simple container image based on mariab that I use for my Podman development. The image is made like so:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">FROM docker.io/library/mariadb:latest</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">LABEL RUN="podman run --name some-mariadb -P -e MYSQL_ROOT_PASSWORD=x -dt IMAGE"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">RUN echo "bind-address = 0.0.0.0" &gt;&gt; /etc/mysql/my.cnf</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Note the definition of the RUN label in the image. It contains the complete command line description of how to run it. The use of IMAGE here is a placeholder is automatically substituted by Podman to the real image name. On my system, this image exists as <code>quay.io/baude/demodb:latest</code>.</p><p>We can get a preview of what Podman would run using the <code>--display</code> switch. In the case of my mariab image, a dry-run would show something like this:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman container runlabel --display run quay.io/baude/demodb:latest</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Command: /proc/self/exe run --name some-mariadb -P -e MYSQL_ROOT_PASSWORD=x -dt quay.io/baude/demodb:latest</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Note how the IMAGE was translated into the image name. If we rerun the previous command and subtract the <code>--display</code> option, podman will create the container exactly as described by the run label.</p><p>So, next time you create your own image, do yourself a favor and construct labels that Podman can read and simplify your life.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Podman container|image exists]]></title>
        <id>https://podman.io/blogs/2018/11/27/podman-exists</id>
        <link href="https://podman.io/blogs/2018/11/27/podman-exists"/>
        <updated>2018-11-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Podman container|image exists</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>We are seeing a proliferation of Podman usage in users' daily workflows. As such, these workflows are often scripted -- in something like bash -- and clear exit codes from the applications being run are paramount. One of the tasks we often see is a user wanting to verify if an image or a container exists in local storage. We saw several different approaches approaches to solving this including running <code>podman ps</code> or <code>podman images</code> with filters or complex uses of grep.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="solution">Solution<a href="#solution" class="hash-link" aria-label="Direct link to Solution" title="Direct link to Solution">​</a></h3><p>After a bit of discussion with our users, recorded in <!-- -->[issue #1845]<!-- --> (<a href="https://github.com/containers/podman/issues/1845" target="_blank" rel="noopener noreferrer">https://github.com/containers/podman/issues/1845</a>), a plan was hatched to have a specific command that satisfies this use case. It was implemented for both containers and images; and I suppose if users wish, we could implement it for pods as well. If the image or container exists, Podman will return an exit code of <code>0</code>. If it does not exist, Podman will return an exit code of <code>1</code>. Any other exit code can be attributed to non-verification failures like permissions or failure in reading local storage.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="check-on-an-images">Check on an images<a href="#check-on-an-images" class="hash-link" aria-label="Direct link to Check on an images" title="Direct link to Check on an images">​</a></h3><p>To verify the existence of an image in your local storage, you can use the command <code>podman image exists &lt;IMAGE_NAME&gt;</code>. Let's clarify through the use of an example.</p><p>The images we have in our local storage are as follows:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman images</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">REPOSITORY                   TAG      IMAGE ID       CREATED        SIZE</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">docker.io/library/alpine     latest   196d12cf6ab1   2 months ago   4.67 MB</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If we wanted to verify the existence of the image <code>docker.io/library/alpine:latest</code>, we would:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman image exists docker.io/library/alpine:latest</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ echo $?</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can also verify by short-name if preferable:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman image exists alpine</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ echo $?</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can also verify an image by an image's full or shortened ID.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman image exists 196d12cf6ab1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ echo $?</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>And finally, a failure to verify example would look like:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman image exists busybox</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ echo $?</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">1</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="check-on-a-container">Check on a container<a href="#check-on-a-container" class="hash-link" aria-label="Direct link to Check on a container" title="Direct link to Check on a container">​</a></h3><p>We can verify the existence of a container in much the same way as an image. The grammar differs slightly.</p><p>My system has the following container:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman ps --format {% raw %}"{{.ID}} {{.Names}}"{% endraw %}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">472fde2f48c7 foobar</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>And I can verify the existence of the container with <code>podman container exists &lt;CONTAINER_NAME&gt;</code>.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman container exists foobar</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ echo $?</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">0</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Like images, you can also verify a container using its full or partial container ID.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Build Podman RPMs with a container image]]></title>
        <id>https://podman.io/blogs/2018/11/19/build_libpod-container-images</id>
        <link href="https://podman.io/blogs/2018/11/19/build_libpod-container-images"/>
        <updated>2018-11-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Build Podman RPMs with a container image</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-brent-baude-github">By Brent Baude <a href="https://github.com/baude" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-brent-baude-github" class="hash-link" aria-label="Direct link to by-brent-baude-github" title="Direct link to by-brent-baude-github">​</a></h2><p>Libpod development is still very much active and on-going. We often have folks who are looking
to test out the latest libpod and Podman for either new features or bug fixes. We typically
build RPMs for distributions like Fedora on a release cadence, which used to be weekly but now
has slowed down as libpod has stabilized. Building libpod from source is not difficult, but
sometimes the user's environment will not allow them to install all the packages needed; or
perhaps the user is intimidated by building from source; or perhaps the user would prefer
the RPM package because it will make the upgrade process easier down the road.</p><p>To solve this problem, I have created a series of container images for CentOS7, Fedora 28, and Fedora 29 that are capable of building a development Podman RPM and associated packages.</p><h4 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="a-bit-about-the-images-themselves">A bit about the images themselves<a href="#a-bit-about-the-images-themselves" class="hash-link" aria-label="Direct link to A bit about the images themselves" title="Direct link to A bit about the images themselves">​</a></h4><p>The image that can used to build the RPMs is called <em>quay.io/libpod/build_libpod</em>. You simply
alter the tag to build for the various distributions. The <em>latest</em> tag will build CentOS7
RPMs. Two other tags exist: <em>fedora28</em> and <em>fedora29</em>.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="create-the-temporary-directory">Create the temporary directory<a href="#create-the-temporary-directory" class="hash-link" aria-label="Direct link to Create the temporary directory" title="Direct link to Create the temporary directory">​</a></h3><p>Create a directory for where the RPMs will be volume mounted. It <strong>must</strong> be <em>/tmp/rpms</em>.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ mkdir /tmp/rpms</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="build-the-rpms">Build the RPMs<a href="#build-the-rpms" class="hash-link" aria-label="Direct link to Build the RPMs" title="Direct link to Build the RPMs">​</a></h3><p>Building the RPMs is a simple Podman command that leverages the <code>container runlabel</code> function in Podman. Once the image is pulled by Podman, it will install the required packages for building the RPMs. After the build is complete, the container will also test to make sure the RPMs install correctly.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman container runlabel -p run quay.io/libpod/build_libpod:fedora29</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Trying to pull quay.io/libpod/build_libpod:fedora29...Getting image source signatures</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Skipping fetch of repeat blob sha256:7692efc5f81cadc73ca1afde08b1a5ea126749fd7520537ceea1a9871329efde</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob sha256:af79f3045c1f7e253b5952752ae4ecabb15f5ee1e2c7e4148132ed37ea7e0091</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> 24.70 MB / 24.70 MB [======================================================] 2s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob sha256:ff2caf91b3889620d64f6fa5529531c3fed78222ce33a89ac85318e410d302fb</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> 206 B / 206 B [============================================================] 0s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob sha256:dd6fe2d1ef4e4ca5252881a6ab2db0eecc1166486af08384eab121512fd8e1dd</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> 253 B / 253 B [============================================================] 0s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> 32 B / 32 B [==============================================================] 0s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Skipping fetch of repeat blob sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Writing manifest to image destination</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Storing signatures</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Command: /proc/self/exe run -it --rm --net=host -v /tmp/rpms:/root/rpmbuild/RPMS/x86_64/:Z quay.io/libpod/build_libpod:fedora29</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Cloning into '/go/src/github.com/containers/libpod'...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">warning: redirecting to https://github.com/containers/podman/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">remote: Enumerating objects: 34, done.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">remote: Counting objects: 100% (34/34), done.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">remote: Compressing objects: 100% (31/31), done.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">remote: Total 23112 (delta 12), reused 12 (delta 3), pack-reused 23078</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Receiving objects: 100% (23112/23112), 15.96 MiB | 10.16 MiB/s, done.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Resolving deltas: 100% (13753/13753), done.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/go/src/github.com/containers/libpod</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">++ command -v dnf</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">+ pkg_manager=/usr/bin/dnf</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">... ** SHORTENED FOR BREVITY ***</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Installed:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  python3-podman-0.11.2-1542207420.git2b911b0c.fc29.noarch            python3-pypodman-0.11.2-1542207420.git2b911b0c.fc29.noarch</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  python3-dateutil-1:2.7.0-3.fc29.noarch                              python3-humanize-0.5.1-14.fc29.noarch</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  python3-psutil-5.4.3-6.fc29.x86_64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Complete!</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The resulting RPMs will end up in your temporary directory of <em>/tmp/rpms</em>.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ find /tmp/rpms/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/tmp/rpms/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/tmp/rpms/noarch</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/tmp/rpms/noarch/python3-pypodman-0.11.2-1542210510.git2b911b0c.fc29.noarch.rpm</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/tmp/rpms/noarch/python3-podman-0.11.2-1542210510.git2b911b0c.fc29.noarch.rpm</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/tmp/rpms/x86_64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/tmp/rpms/x86_64/podman-debuginfo-0.11.2-1542210510.git2b911b0c.fc29.x86_64.rpm</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/tmp/rpms/x86_64/podman-debugsource-0.11.2-1542210510.git2b911b0c.fc29.x86_64.rpm</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/tmp/rpms/x86_64/podman-0.11.2-1542210510.git2b911b0c.fc29.x86_64.rpm</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="future">Future<a href="#future" class="hash-link" aria-label="Direct link to Future" title="Direct link to Future">​</a></h3><p>If folks like this, I'll consider adding the ability to pass in a specific git commit to build.</p>]]></content>
        <author>
            <name>baude</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[The State of Container Technologies in the Operating System]]></title>
        <id>https://podman.io/blogs/2018/11/01/talk-state_of_container_technologies</id>
        <link href="https://podman.io/blogs/2018/11/01/talk-state_of_container_technologies"/>
        <updated>2018-11-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>The State of Container Technologies in the Operating System Talk</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-dan-walsh-github">By Dan Walsh <a href="https://github.com/rhatdan" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-dan-walsh-github" class="hash-link" aria-label="Direct link to by-dan-walsh-github" title="Direct link to by-dan-walsh-github">​</a></h2><p>At the "LISA18" conference on October 29-31, 2018 in Nashville, TN, USA, Dan Walsh gave a talk on the State of Container Technologies in the Operating System.</p><p>The slides in PDF format are <a href="https://podman.io/slides/2018-11-01-state_of_container_technologies_in_the_operating_system.pdf" target="_blank" rel="noopener noreferrer">here</a>.</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Buildah and Podman Relationship]]></title>
        <id>https://podman.io/blogs/2018/10/31/podman-buildah-relationship</id>
        <link href="https://podman.io/blogs/2018/10/31/podman-buildah-relationship"/>
        <updated>2018-10-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q">
<img loading="lazy" src="https://buildah.io/images/buildah.png" alt="buildah logo" class="img_ev3q"></p><h1>Buildah and Podman Relationship</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-tom-sweeney-github">By Tom Sweeney <a href="https://github.com/TomSweeneyRedhat" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-tom-sweeney-github" class="hash-link" aria-label="Direct link to by-tom-sweeney-github" title="Direct link to by-tom-sweeney-github">​</a></h2><p>Kubernetes installations can be complex with multiple runtime dependencies and runtime engines. <a href="https://cri-o.io/" target="_blank" rel="noopener noreferrer">CRI-O</a> was created to provide a lightweight runtime for Kubernetes which adds an abstraction layer between the cluster and the runtime that allows for various OCI runtime technologies. However you still have the problem of daemon dependencies in your cluster for builds - I.e. if you are using the cluster for builds you still need a Docker daemon.</p><p>Enter Buildah. Buildah allows you to have a Kubernetes cluster without any Docker daemon for both runtime and builds. Excellent. But what if things go wrong? What if you want to do troubleshooting or debugging of containers in your cluster? Buildah isn’t really built for that, what you need is a client tool for working with containers and the one that comes to mind is Docker CLI - but then you’re back to using the daemon.</p><p>This is where Podman steps in. Podman allows you to do all of the Docker commands without the daemon dependency. With Podman you can run, build (it calls Buildah under the covers for this), modify and troubleshoot containers in your Kubernetes cluster. With the two projects together, you have a well rounded solution for your OCI container image and container needs.</p><p>Buildah and Podman are two complementary Open-source projects that are available on
most Linux platforms and both projects reside at <a href="https://github.com" target="_blank" rel="noopener noreferrer">GitHub.com</a>
with Buildah <a href="https://github.com/containers/buildah" target="_blank" rel="noopener noreferrer">here</a> and Podman <a href="https://github.com/containers/podman" target="_blank" rel="noopener noreferrer">here</a>. Both Buildah and Podman are command line tools that work on OCI images and containers. The two projects are related, but differ in their specialization.</p><p>Buildah specializes in building OCI images. Buildah's commands replicate all
of the commands that are found in a Dockerfile. Buildah’s goal is also to provide a lower level coreutils interface to build container images, allowing people to build containers without requiring a Dockerfile. Buildah’s other goal is to allow you to use other scripting languages to build container images without requiring a daemon.</p><p>Podman specializes in all of the commands and functions that help you to maintain and modify those OCI container images, such as pulling and tagging. It also allows you to create, run, and maintain those containers. If you can do a command in the Docker CLI, you can do the same command in the Podman CLI. In fact you can just alias ‘podman’ for ‘docker’ on your machine and you can then build, create and maintain container images and containers without a daemon being present, just as you always have.</p><p>Although Podman uses Buildah’s build functionality under the covers to create a container image, the two projects have differences. The major difference between Podman and Buildah is their concept of a container. Podman allows users to create <code>traditional containers</code> and the intent of these containers is to be controlled through the entirety of a container life cycle (pause, checkpoint/restore, etc). While Buildah containers are really created just to allow content to be added to the container <em>image</em>. Each project has a separate internal representation of a container that is not shared. Because of this you cannot see Podman containers from within Buildah or vice versa. However the internal representation of a container image is the same between Buildah and Podman. Given this, any container image that has been created, pulled or modified by one can be seen and used by the other.</p><p>Some of the commands between the two projects overlap significantly but in some cases have slightly different behaviors. The following table illustrates the commands with some overlap between the projects.</p><table><thead><tr><th align="left">Command</th><th align="left">Podman Behavior</th><th align="left">Buildah Behavior</th></tr></thead><tbody><tr><td align="left">build</td><td align="left">Calls <code>buildah bud</code></td><td align="left">Provides the build-using-dockerfile (bud) command that emulates Docker’s build command.</td></tr><tr><td align="left">commit</td><td align="left">Commits a Podman container into a container image. Does not work on a Buildah container. Once committed the resulting image can be used by either Podman or Buildah.</td><td align="left">Commits a Buildah container into a container image. Does not work on a Podman container. Once committed, the resulting image can be used by either Buildah or Podman.</td></tr><tr><td align="left">mount</td><td align="left">Mounts a Podman container. Does not work on a Buildah container.</td><td align="left">Mounts a Buildah container. Does not work on a Podman container.</td></tr><tr><td align="left">pull and push</td><td align="left">Pull or push an image from a container image registry. Functionally the same as Buildah.</td><td align="left">Pull or push an image from a container image registry. Functionally the same as Podman.</td></tr><tr><td align="left">run</td><td align="left">Run a process in a new container in the same manner as <code>docker run</code>.</td><td align="left">Runs the container in the same way as the RUN command in a Dockerfile.</td></tr><tr><td align="left">rm</td><td align="left">Removes a Podman container. Does not work on a Buildah container.</td><td align="left">Removes a Buildah container. Does not work on a Podman container.</td></tr><tr><td align="left">rmi, images, tag</td><td align="left">Equivalent on both projects.</td><td align="left">Equivalent on both projects.</td></tr><tr><td align="left">containers and ps</td><td align="left"><code>ps</code> is used to list Podman containers. The <code>containers</code> command does not exist.</td><td align="left">containers is used to list Buildah containers. The <code>ps</code> command does not exist.</td></tr></tbody></table><p>A quick and easy way to summarize the difference between the two projects is the <code>buildah run</code> command emulates the RUN command in a Dockerfile while the <code>podman run</code> command emulates the <code>docker run</code> command in functionality.</p><p>Buildah is an efficient way to create OCI images while Podman allows you to manage and maintain those images and containers in a production environment using familiar container cli commands. Together they form a strong foundation to support your OCI container image and container needs. Best yet, they are both Open-source projects and you are more than welcome to contribute to either or both projects. Hope to see you there!</p>]]></content>
        <author>
            <name>tsweeney</name>
        </author>
        <category label="containers" term="containers"/>
        <category label="images" term="images"/>
        <category label="docker" term="docker"/>
        <category label="buildah" term="buildah"/>
        <category label="podman" term="podman"/>
        <category label="oci" term="oci"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Adding checkpoint/restore support to Podman]]></title>
        <id>https://podman.io/blogs/2018/10/10/checkpoint-restore</id>
        <link href="https://podman.io/blogs/2018/10/10/checkpoint-restore"/>
        <updated>2018-10-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Adding checkpoint/restore support to Podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-adrian-reber">By Adrian Reber<a href="#by-adrian-reber" class="hash-link" aria-label="Direct link to By Adrian Reber" title="Direct link to By Adrian Reber">​</a></h2><p>With the help of <a href="https://criu.org" target="_blank" rel="noopener noreferrer">Checkpoint/Restore In Userspace (CRIU)</a> I
was able to add initial checkpoint/restore support to Podman. Using
checkpoint/restore it is now possible to resume a container after a reboot at
exactly the same point in time it was checkpointed.</p><p>In January 2018 I started to think about bringing checkpoint/restore support to
Podman. After a few initial discussions I started to actually look at the
necessary code changes. As Podman uses
<a href="https://github.com/opencontainers/runc" target="_blank" rel="noopener noreferrer">runc</a> to run containers the initial
support for checkpointing containers was implemented pretty fast. Restoring was
a bit more complicated as it required additional changes to
<a href="https://github.com/kubernetes-sigs/cri-o/pull/1427" target="_blank" rel="noopener noreferrer">conmon</a>.</p><p>At that point I was able to checkpoint and restore a simple container.</p><p>To make checkpointing and restoring containers actually useful the restored
container needs to have the same IP address as the checkpointed container. That
was the point where the implementation got a bit complicated.</p><p>Although having worked on and with different container runtime's
checkpoint/restore support I never had a closer look at the networking setup.
It always worked. With Podman it did not at the beginning. The biggest
difference is, as far as I understand it right now, is that Podman uses
<a href="https://github.com/containernetworking/cni" target="_blank" rel="noopener noreferrer">Container Network Interface (CNI)</a>
to configure the container's network. CNI creates a network namespace and after
configuring it tells <code>runc</code> to use that network namespace for the container.</p><p>The difference with this setup is that other container runtimes did not really
care about the actual name of the network namespace and CRIU just created on
restore a <strong>new</strong> network namespace with the same properties as during checkpoint.
So a new network namespace was created. For Podman this needs to be different.
CRIU needs to ignore/skip the network namespace and to handle this correctly I
had to adapt runc
(<a href="https://github.com/opencontainers/runc/pull/1849" target="_blank" rel="noopener noreferrer">Add support to checkpoint and restore into external network namespaces</a>)
as well as CRIU
(<a href="https://github.com/checkpoint-restore/criu/commit/a8a3eb902305f0af603afa4c95b1b632fe7bd149" target="_blank" rel="noopener noreferrer">criu: add support for external net namespaces </a>).</p><p>So after spending time on <code>runc</code> and CRIU I was able to return to Podman and
implement the <a href="https://github.com/containers/podman/pull/469" target="_blank" rel="noopener noreferrer">necessary changes</a>
which have been merged into Podman at the beginning of October 2018.</p><p>With all the background information out of the way, now finally some examples
how checkpoint/restore can be used in Podman. In my example I am using a
container running <a href="https://tomcat.apache.org/" target="_blank" rel="noopener noreferrer">Apache Tomcat</a> with a slightly
modified HelloWorldExample. The HelloWorldExample has been modified to return
a single integer which is is incremented after each request.</p><p>The following starts my test container:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># podman run --security-opt="seccomp=unconfined" --tmpfs /tmp --name podman-criu-test -d docker://docker.io/yovfiatbeb/podman-criu-test</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>As I am running my tests on a RHEL7 system I have to add
<code>--security-opt="seccomp=unconfined"</code> because CRIU cannot correctly handle
<code>seccomp</code> on RHEL7. The option <code>--tmpfs /tmp</code> is necessary as <code>tomcat</code> creates
temporary files in <code>/tmp</code> which are only correctly restored by CRIU if <code>/tmp</code>
is a <code>tmpfs</code>.</p><p>Once the container is up and running I can use <code>curl</code> to make requests to <code>tomcat</code>:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10.22</span><span class="token plain">.0.53:8080/examples/servlets/servlet/HelloWorldExample</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token number" style="color:#36acaa">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10.22</span><span class="token plain">.0.53:8080/examples/servlets/servlet/HelloWorldExample</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token number" style="color:#36acaa">2</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>I can now checkpoint the container:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># podman container checkpoint podman-criu-test</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now the container is no longer running and could be restored. If I would
restore the container now the result would basically be the same as pausing and
unpausing the container. To make checkpointing useful I am now rebooting the
system before restoring the container. Once the system is up again I can
restore the container:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># podman container restore --keep podman-criu-test</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Using <code>curl</code> to make requests to the container the result will now <strong>not</strong> start at
'1' again, but continue at the previous value:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10.22</span><span class="token plain">.0.53:8080/examples/servlets/servlet/HelloWorldExample</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token number" style="color:#36acaa">3</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10.22</span><span class="token plain">.0.53:8080/examples/servlets/servlet/HelloWorldExample</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token number" style="color:#36acaa">4</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10.22</span><span class="token plain">.0.53:8080/examples/servlets/servlet/HelloWorldExample</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token number" style="color:#36acaa">5</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>As I have been using the <code>--keep</code> flag during restore, Podman has not deleted
the checkpoint after the restore, which would be the normal operation. If I
reboot the system again I can restore the container again:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> container restore --keep podman-criu-test</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>And now the result from <code>curl</code> is the same as before:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10.22</span><span class="token plain">.0.53:8080/examples/servlets/servlet/HelloWorldExample</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token number" style="color:#36acaa">3</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10.22</span><span class="token plain">.0.53:8080/examples/servlets/servlet/HelloWorldExample</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token number" style="color:#36acaa">4</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">10.22</span><span class="token plain">.0.53:8080/examples/servlets/servlet/HelloWorldExample</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token number" style="color:#36acaa">5</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>So right now checkpointing and restoring can be used as either a stateful
pause/unpause between reboots or as way to go back in time of the container's
life.</p><p>I recorded all those steps in the demo below:</p><a href="https://asciinema.org/a/FsTbx9mZkzeuhCM2pFOr1tujM" target="_blank" rel="noopener noreferrer"><img loading="lazy" src="https://asciinema.org/a/FsTbx9mZkzeuhCM2pFOr1tujM.png" width="650" class="img_ev3q"></a><p>The checkpoint/restore support in Podman is still very new and requires a git
checkout of CRIU using the <code>criu-dev</code> branch to work right now. The necessary
CRIU changes will be in the upcoming CRIU 3.11 release. <code>runc</code> and <code>conmon</code>
also need to be new enough for checkpoint/restore to work.</p><p>Currently only checkpoint/restore on the same system is supported, but to
make this feature really interesting it would be nice to be able to
migrate containers. To make container migration easy I want to offer
the possibility to easily export the checkpoint and appropriate container
state from one Podman instance to another Podman instance to be able to
restore the checkpointed container.</p>]]></content>
        <author>
            <name>Adrian Reber</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenStack Containerization with Podman – Part 3 (Upgrades)]]></title>
        <id>https://podman.io/blogs/2018/10/07/tripleo-upgrade</id>
        <link href="https://podman.io/blogs/2018/10/07/tripleo-upgrade"/>
        <updated>2018-10-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Upgrade OpenStack TripleO Undercloud from Docker to Podman containers</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-emilien-macchi-github">By Emilien Macchi <a href="https://github.com/EmilienM" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-emilien-macchi-github" class="hash-link" aria-label="Direct link to by-emilien-macchi-github" title="Direct link to by-emilien-macchi-github">​</a></h2><p>I wrote a blog post about how we could upgrade OpenStack TripleO Undercloud
from Docker to Podman containers.</p><p><a href="https://my1.fr/blog/openstack-containerization-with-podman-part-3-upgrades/" target="_blank" rel="noopener noreferrer">Read More</a></p>]]></content>
        <author>
            <name>emacchi</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="openstack" term="openstack"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenStack Containerization with Podman – Part 2 (systemd)]]></title>
        <id>https://podman.io/blogs/2018/10/05/tripleo-systemd</id>
        <link href="https://podman.io/blogs/2018/10/05/tripleo-systemd"/>
        <updated>2018-10-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Manage Podman containers with systemd</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-emilien-macchi-github">By Emilien Macchi <a href="https://github.com/EmilienM" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-emilien-macchi-github" class="hash-link" aria-label="Direct link to by-emilien-macchi-github" title="Direct link to by-emilien-macchi-github">​</a></h2><p>I wrote a blog post about how we manage Podman containers with systemd in
OpenStack TripleO.</p><p><a href="https://my1.fr/blog/openstack-containerization-with-podman-part-2-operations/" target="_blank" rel="noopener noreferrer">Read More</a></p>]]></content>
        <author>
            <name>emacchi</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="openstack" term="openstack"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenStack Containerization with Podman – Part 1 (Undercloud)]]></title>
        <id>https://podman.io/blogs/2018/10/05/tripleo-undercloud</id>
        <link href="https://podman.io/blogs/2018/10/05/tripleo-undercloud"/>
        <updated>2018-10-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Deploy OpenStack TripleO Undercloud Podman containers</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-emilien-macchi-github">By Emilien Macchi <a href="https://github.com/EmilienM" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-emilien-macchi-github" class="hash-link" aria-label="Direct link to by-emilien-macchi-github" title="Direct link to by-emilien-macchi-github">​</a></h2><p>I wrote a blog post about how we deploy OpenStack TripleO Undercloud with
Podman containers.</p><p><a href="https://my1.fr/blog/openstack-containerization-with-podman-part-1-undercloud/" target="_blank" rel="noopener noreferrer">Read More</a></p>]]></content>
        <author>
            <name>emacchi</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="openstack" term="openstack"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[SELinux blocks Podman container from talking to libvirt]]></title>
        <id>https://podman.io/blogs/2018/10/04/selinux-libvirt</id>
        <link href="https://podman.io/blogs/2018/10/04/selinux-libvirt"/>
        <updated>2018-10-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>SELinux blocks Podman container from talking to libvirt</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-dan-walsh-github">By Dan Walsh <a href="https://github.com/rhatdan" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-dan-walsh-github" class="hash-link" aria-label="Direct link to by-dan-walsh-github" title="Direct link to by-dan-walsh-github">​</a></h2><p>I wrote a SELinux blog on running a container with Podman. The talks explains why SELinux blocks the connection to the
libvirt socket. It then goes on to explain how to setup the container to allow
the communication.</p><p><a href="https://danwalsh.livejournal.com/81143.html" target="_blank" rel="noopener noreferrer">Read More</a></p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Why can’t I delete storage files created by non-root podman?]]></title>
        <id>https://podman.io/blogs/2018/10/03/podman-remove-content-homedir</id>
        <link href="https://podman.io/blogs/2018/10/03/podman-remove-content-homedir"/>
        <updated>2018-10-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Why can’t I delete storage files created by non-root Podman?</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-dan-walsh-github">By Dan Walsh <a href="https://github.com/rhatdan" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-dan-walsh-github" class="hash-link" aria-label="Direct link to by-dan-walsh-github" title="Direct link to by-dan-walsh-github">​</a></h2><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="cool-things-you-can-do-with-podman">Cool things you can do with Podman<a href="#cool-things-you-can-do-with-podman" class="hash-link" aria-label="Direct link to Cool things you can do with Podman" title="Direct link to Cool things you can do with Podman">​</a></h2><p>When running <a href="https://podman.io" target="_blank" rel="noopener noreferrer">Podman</a> as root, the default location for storage is /var/lib/containers/storage. Of course, users cannot use this directory when running as non root, so Podman creates the storage by default in $HOME/.local/share/containers.</p><p>When Podman creates this storage it is running inside of a user namespace and is allowed to create UIDs and GIDs based off the UID ranges stored in /etc/subuid and the GIDs listed in /etc/subgid.</p><p>For example my account has UID and GID ranges 100000 through 165535 reserved for it, as well as my UID and primary GID, 3267.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">#grep dwalsh /etc/subuid</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">dwalsh:100000:65536</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ grep dwalsh /etc/subgid</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">dwalsh:100000:65536</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>When Podman starts a container as non root, by default, it maps my UID, 3267, to UID 0 inside of the container, then it maps 100,000-&gt;1, 100,001-&gt;2, 100,002-&gt;3 … 165,535-&gt;65536.</p><p>You can see this mapping inside of the container</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ podman run -ti fedora cat  /proc/self/uid_map</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     0       3267          1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     1     100000     65536</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ podman run -ti fedora cat  /proc/self/gid_map</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     0       3267          1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     1     100000     65536</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Since I’m root in the container, I can create and set ownership of files inside of the container for using any UIDs and GIDs that are mapped into the container.</p><p>To see what happens, I will create a file and directory owned by a non root user inside of a container.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">podman run -ti --name testfile fedora bash -c "mkdir /testdir; touch /testdir/testfile; chown -R 1:1 /testdir"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Since that was successful, let’s mount the container and see what it looks like from outside of the user namespace that’s used for running the container.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ mnt=$(podman mount testfile)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ echo $mnt</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/home/dwalsh/.local/share/containers/storage/vfs/dir/691e874b6e1ba6807ecbe73910396b10f118617233aacc3df3297ffc4e1332f9</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ ls -l $mnt</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">total 4</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">lrwxrwxrwx.  1 dwalsh dwalsh    7 Feb  7  2018 bin -&gt; usr/bin</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">dr-xr-xr-x.  2 dwalsh dwalsh    6 Feb  7  2018 boot</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x.  2 dwalsh dwalsh    6 Apr 26 09:03 dev</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x. 44 dwalsh dwalsh 4096 Apr 26 09:03 etc</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x.  2 dwalsh dwalsh    6 Feb  7  2018 home</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">lrwxrwxrwx.  1 dwalsh dwalsh    7 Feb  7  2018 lib -&gt; usr/lib</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">lrwxrwxrwx.  1 dwalsh dwalsh    9 Feb  7  2018 lib64 -&gt; usr/lib64</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwx------.  2 dwalsh dwalsh    6 Apr 26 09:03 lost+found</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x.  2 dwalsh dwalsh    6 Feb  7  2018 media</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x.  2 dwalsh dwalsh    6 Feb  7  2018 mnt</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x.  2 dwalsh dwalsh    6 Feb  7  2018 opt</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x.  2 dwalsh dwalsh    6 Apr 26 09:03 proc</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">dr-xr-x---.  2 dwalsh dwalsh  162 Apr 26 09:03 root</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x. 11 dwalsh dwalsh  169 Sep 25 09:11 run</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">lrwxrwxrwx.  1 dwalsh dwalsh    8 Feb  7  2018 sbin -&gt; usr/sbin</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x.  2 dwalsh dwalsh    6 Feb  7  2018 srv</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x.  2 dwalsh dwalsh    6 Apr 26 09:03 sys</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x.  2 100000 100000   22 Sep 25 13:38 testdir</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxrwxrwt.  2 dwalsh dwalsh   32 Apr 26 09:03 tmp</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x. 12 dwalsh dwalsh  144 Apr 26 09:03 usr</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x. 19 dwalsh dwalsh  249 Apr 26 09:03 var</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Notice the ownership of testdir and testfile. The namespace that was used for running the container mapped UID 100000 from outside of the namespace to UID 1 inside of the namespace, and did the same for GID 100000, mapping it to GID 1 inside of the namespace. When I set the ownership to UID and GID 1 from inside of the namespace, the corresponding values from outside of the namespace were what were recorded to disk.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ ls -la $mnt/testdir</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">total 0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x.  2 100000 100000  22 Sep 25 13:38 .</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">drwxr-xr-x. 19 dwalsh dwalsh 257 Sep 25 13:38 ..</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">-rw-r--r--.  1 100000 100000   0 Sep 25 13:38 testfile</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If i just try to clean up my directory I will get lots of errors.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">rm -rf .local/share/containers/ 2&gt;&amp;1 | head -2</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">rm: cannot remove '.local/share/containers/storage/vfs/dir/891e1e4ef82ad02a4ea1f030831f942d722c7694c4db64ca3239c8163b811c58/bin': Permission denied</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">rm: cannot remove '.local/share/containers/storage/vfs/dir/891e1e4ef82ad02a4ea1f030831f942d722c7694c4db64ca3239c8163b811c58/boot': Permission denied</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>This is because this content was created from inside of a user namespace where I was UID 0, and because I was UID 0 in that namespace, I could set and change ownership of anything owned by any ID that was mapped into the namespace. In this case, I assigned it an owner that wasn’t mapped to my own user. Once I left the namespace, and I was back in the host namespace where I was just myself again, the contents belonged to the UID that I had mapped to 1 for the user namespace, which wasn’t my own UID.</p><p>Because of this, if I wanted to clean it all up, I could become root to remove the directory. But if I don’t have root on the machine, what could I do?</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="buildah-unshare-or-rootlesskit--bash"><code>Buildah unshare</code> or <code>rootlesskit  bash</code><a href="#buildah-unshare-or-rootlesskit--bash" class="hash-link" aria-label="Direct link to buildah-unshare-or-rootlesskit--bash" title="Direct link to buildah-unshare-or-rootlesskit--bash">​</a></h3><p>Well currently <a href="https://buildah.io" target="_blank" rel="noopener noreferrer">Buildah</a> or <a href="https://github.com/rootless-containers/rootlesskit" target="_blank" rel="noopener noreferrer">rootlesskit</a> can put you into the user namespace without launching a container and then you can remove the images.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ buildah unshare</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@localhost ~]# id</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>I am now root inside of a namespace with the same mappings I’d use for a container, but everything else is the same. In particular, I’m not using the container’s root filesystem.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[root@localhost ~]# pwd</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">/home/dwalsh</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@localhost ~]# rm -rf .local/share/containers/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[root@localhost ~]#</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="i-am-able-to-delete-all-the-files-in-my-homedir">I am able to delete all the files in my homedir.<a href="#i-am-able-to-delete-all-the-files-in-my-homedir" class="hash-link" aria-label="Direct link to I am able to delete all the files in my homedir." title="Direct link to I am able to delete all the files in my homedir.">​</a></h3>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Replacing Docker with Podman]]></title>
        <id>https://podman.io/blogs/2018/10/01/talk-replace-docker-with-podman</id>
        <link href="https://podman.io/blogs/2018/10/01/talk-replace-docker-with-podman"/>
        <updated>2018-10-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Replacing Docker with Podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-dan-walsh-github">By Dan Walsh <a href="https://github.com/rhatdan" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-dan-walsh-github" class="hash-link" aria-label="Direct link to by-dan-walsh-github" title="Direct link to by-dan-walsh-github">​</a></h2><p>At the "All Systems Go!" conference on September 28-30, 2018 in Berlin Germany, Dan Walsh gave a talk on how you can replace <code>docker</code> with <code>podman</code> and not skip a beat. The talk was taped and can be viewed <a href="https://media.ccc.de/v/ASG2018-177-replacing_docker_with_podman#t=3" target="_blank" rel="noopener noreferrer">here</a>.</p><p>The slides in PDF format are <a href="https://podman.io/slides/2018_10_01_Replacing_Docker_With_Podman.pdf" target="_blank" rel="noopener noreferrer">here</a>.</p>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Cool thing&#58; Pulling content directly from the Docker Daemon...]]></title>
        <id>https://podman.io/blogs/2018/09/25/pulling-images-from-docker</id>
        <link href="https://podman.io/blogs/2018/09/25/pulling-images-from-docker"/>
        <updated>2018-09-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Pulling content directly from the Docker Daemon...</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-dan-walsh-github">By Dan Walsh <a href="https://github.com/rhatdan" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-dan-walsh-github" class="hash-link" aria-label="Direct link to by-dan-walsh-github" title="Direct link to by-dan-walsh-github">​</a></h2><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="cool-things-you-can-do-with-podman">Cool things you can do with Podman.<a href="#cool-things-you-can-do-with-podman" class="hash-link" aria-label="Direct link to Cool things you can do with Podman." title="Direct link to Cool things you can do with Podman.">​</a></h2><p>I recently received a bug report about some huge container images not working correctly in Docker. So I suggested to the reporter that they try them with Podman. He responded that he saw the images with docker images, but did not see them with podman images.</p><p>I explained to him that the Docker image and container database are separate from the Podman image and container database. I told him he would have to pull the images into Podman. Then I decided to try a cool feature of Podman, where I could pull images directly out of the Docker daemon.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="first-i-look-for-the-centos-image-inside-of-docker">First I look for the Centos Image inside of Docker.<a href="#first-i-look-for-the-centos-image-inside-of-docker" class="hash-link" aria-label="Direct link to First I look for the Centos Image inside of Docker." title="Direct link to First I look for the Centos Image inside of Docker.">​</a></h3><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># docker images | grep centos</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">docker.io/centos                    7                   49f7960eb7e4        2 months ago        200 MB</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Podman has the ability through its use of containers/image to pull images using many different transports other than just pulling from Container Registries. It supports pulling directly from the Docker daemon, using the docker-daemon transport.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># podman pull docker-daemon:docker.io/centos:7</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Getting image source signatures</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying blob sha256:bcc97fbfc9e1a709f0eb78c1da59caeb65f43dc32cd5deeb12b8c1784e5b8237</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> 198.59 MB / 198.59 MB [====================================================] 1s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Copying config sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> 2.15 KB / 2.15 KB [========================================================] 0s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Writing manifest to image destination</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Storing signatures</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now you have the Centos 7 image in Podman containers/storage datastore.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">#podman images | grep centos</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">docker.io/library/centos            7       49f7960eb7e4   2 months ago   .com208MB</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now you can start using the image with Podman, Buildah and CRI-O.
You can even create new images and push them back into the Docker daemon.</p><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="try-it-out">Try it out…<a href="#try-it-out" class="hash-link" aria-label="Direct link to Try it out…" title="Direct link to Try it out…">​</a></h3>]]></content>
        <author>
            <name>dwalsh</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using systemd to control the startup of Podman containers]]></title>
        <id>https://podman.io/blogs/2018/09/13/systemd</id>
        <link href="https://podman.io/blogs/2018/09/13/systemd"/>
        <updated>2018-09-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Using systemd to control the startup of Podman containers</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-emilien-macchi-github">By Emilien Macchi <a href="https://github.com/EmilienM" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-emilien-macchi-github" class="hash-link" aria-label="Direct link to by-emilien-macchi-github" title="Direct link to by-emilien-macchi-github">​</a></h2><p>Podman wasn't designed to manage containers startup order, dependency
checking or failed container recovery.
In fact, this job can be done by external tools and this blog post describes
how we can use the systemd initialization service to work with Podman
containers.</p><p>Thanks to systemd, containers can be managed in the same way as other
services on a Linux system.</p><p>By setting up a systemd unit file on the host, we can have the host
automatically start, stop, check the status, and otherwise manage a container
as a regular systemd service.</p><p>Let's prepare the container (example with Redis):</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> pull docker.io/redis</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">podman</span><span class="token plain"> run -d --name redis -p </span><span class="token number" style="color:#36acaa">6379</span><span class="token plain">:6379 redis</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Check that the container is actually running with <code>podman ps</code>:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">CONTAINER ID   IMAGE                            COMMAND                  CREATED          STATUS             PORTS                    NAMES</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">411a6c6be7d8   docker.io/library/redis:latest   docker-entrypoint.s...   10 minutes ago   Up 5 minutes ago   0.0.0.0:6379-&gt;6379/tcp   redis</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now, let's create the systemd unit file in <code>/etc/systemd/system/redis.service</code>:</p><div class="language-ini codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-ini codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[Unit]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Description=Redis Podman container</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Wants=syslog.service</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[Service]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Restart=always</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ExecStart=/usr/bin/podman start -a redis</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ExecStop=/usr/bin/podman stop -t 10 redis</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[Install]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">WantedBy=multi-user.target</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Enable and start the systemd service:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> systemctl </span><span class="token builtin class-name">enable</span><span class="token plain"> redis.service</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> systemctl start redis.service</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The container is running redis-server:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ sudo podman top redis</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">USER    PID   PPID   %CPU    ELAPSED            TTY   TIME   COMMAND</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">redis   1     0      0.000   15m14.490268713s   ?     0s     redis-server *:6379</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Check that the service is seen as active in systemd with
<code>sudo systemctl status redis</code>:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">redis.service - Redis Podman container</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   Loaded: loaded (/etc/systemd/system/redis.service; enabled; vendor preset: disabled)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   Active: active (running) since Thu 2018-09-13 12:24:00 PDT; 1s ago</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> Main PID: 1520 (podman)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Tasks: 8 (limit: 4708)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   Memory: 7.8M</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   CGroup: /system.slice/redis.service</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">           └─1520 /usr/local/bin/podman start -a redis</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Sep 13 12:24:00 fedora28.localdomain systemd[1]: Started Redis Podman container.</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Note that if you try to run <code>podman stop redis</code>, the container will be
restarted by systemd because of to the "Restart=always" policy.
The proper way to stop the container is to run <code>sudo service redis stop</code>.</p><p>An alternative to systemd for controlling containers lifecycle is to use
<a href="https://github.com/kubernetes-sigs/cri-o" target="_blank" rel="noopener noreferrer">CRI-O</a> but this would be for
another blog post :-).</p>]]></content>
        <author>
            <name>emacchi</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
        <category label="systemd" term="systemd"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[What's NEW!]]></title>
        <id>https://podman.io/blogs/2018/09/10/welcome</id>
        <link href="https://podman.io/blogs/2018/09/10/welcome"/>
        <updated>2018-09-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[If you've missed the news so far, CoreOS was acquired by Red Hat at the beginning of 2018. This also means some changes for Buildah and Podman.]]></summary>
        <content type="html"><![CDATA[<p>If you've missed the news so far, CoreOS was acquired by Red Hat at the beginning of 2018. This also means some changes for Buildah and Podman.</p><p>Buildah and Podman were previously projects within Project Atomic which is going to be sunset in favor of an immutable host combination of Container Linux and Fedora Atomic Host: this combination is called <a href="https://coreos.fedoraproject.org" target="_blank" rel="noopener noreferrer">Fedora CoreOS</a>. We therefore welcome you to the new websites, <a href="https://buildah.io" target="_blank" rel="noopener noreferrer">buildah.io</a> and <a href="https://podman.io" target="_blank" rel="noopener noreferrer">podman.io</a> where you will find news, announcements, and more around the respective projects.</p><p>To start it up, check out the new <a href="https://podman.io/blogs" target="_blank" rel="noopener noreferrer">Blogs</a> and <a href="https://podman.io/releases" target="_blank" rel="noopener noreferrer">Releases</a> sections on the site.</p>]]></content>
    </entry>
    <entry>
        <title type="html"><![CDATA[Python3 support for Podman]]></title>
        <id>https://podman.io/blogs/2018/08/15/python-support-for-podman</id>
        <link href="https://podman.io/blogs/2018/08/15/python-support-for-podman"/>
        <updated>2018-08-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[podman logo]]></summary>
        <content type="html"><![CDATA[<p><img loading="lazy" alt="podman logo" src="/assets/images/podman-ce586c2894883ad9c353492b5e1893a8.svg" width="228" height="61" class="img_ev3q"></p><h1>Python3 support for Podman</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="by-jhon-honce-github">By Jhon Honce <a href="https://github.com/jwhonce" target="_blank" rel="noopener noreferrer">GitHub</a><a href="#by-jhon-honce-github" class="hash-link" aria-label="Direct link to by-jhon-honce-github" title="Direct link to by-jhon-honce-github">​</a></h2><p>You’ve learned of Podman and all it’s coolness for running OCI-based containers, but you need a solution that is repeatable and scripted. Rather than just executing Podman commands, you want a stable API to call into and not need to screen scrape the output.</p><p>We heard you and now provide a Python package, python3-podman. This package allows you to access the facilities of a Podman service with #nobigfatdaemons.</p><p>The python3-podman package containers a module that allows you to connect to a Podman socket activated systemd service on the same host or a remote host using a ssh tunnel. Using the python interface means you can run these commands from a MAC or Windows Box, as long as you have a Linux box with podman installed. We connect using <em>varlink</em> for the messaging protocol between client and service.</p><p>For the environment, you will need:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">* Linux host</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* podman package</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* enable the io.podman.socket systemd unit file by executing</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>systemctl enable --now io.podman.socket</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">* Python3</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* The python3-podman rpm, or podman package from PyPi.</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><em>Note: Currently, there is a matching rpm for each version of podman. In time, after the API stabilizes that may no longer be true.</em></p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="now-lets-start-coding">Now lets start coding:<a href="#now-lets-start-coding" class="hash-link" aria-label="Direct link to Now lets start coding:" title="Direct link to Now lets start coding:">​</a></h2><p>Using your favorite code editor you can copy and paste the following Python program into a file named latest_containers.py. Don’t forget Python uses whitespace to signify end-of-line and code blocks when you paste. The below python code will show all of the containers created since midnight UTC when it is run. The code comments provide a running commentary on how the module works in context.</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">#!/usr/bin/env python3</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># Python standard date/time support</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">from datetime import datetime, time, timezone</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># the module with all the goodness</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">import podman</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">midnight = datetime.combine(datetime.today(), time.min, tzinfo=timezone.utc)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># Our client is a context manager to make resource clean up easy. No arguments implies</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">#   connect to a local Podman service using the default interfaces.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">with podman.Client() as client:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    # Retrieve all containers in containers storage.  Each container is presented</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    #   as a Namespace and dict. You determine which is easiest for you to use</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    #   for your solution.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    for c in client.containers.list():</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     # A bit of sugar, convert any podman-formatted timestamp to</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        #   a python datetime</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        created_at = podman.datetime_parse(c.createdat)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if created_at &gt; midnight:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            # Now the results. We provide datetime_format() for consistent</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">         #   iso format in results if you wish to use it.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            print('ID: {}\n image: {}\n createdAt: {}'.format(</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">c.id[:12], c.image[:33], podman.datetime_format(created_at)))</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Once you have this code copied into the file:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">* chmod 755 latest_containers.py</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* podman run fedora sleep 300 &amp;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* ./latest_containers.py</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ID: d7337530c6d1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> image: registry.fedoraproject.org/fedora</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> createdAt: 2018–08–10T09:18:09.728858–07:00</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can watch the whole process <a href="https://asciinema.org/a/mu8Knm5dj8mII19evrF9heNCF" target="_blank" rel="noopener noreferrer">here</a>.</p><p>The container object above supports the Namespace and dict protocols. This is our most used data structure providing you the ability to use the returned object in your code as you wish.</p><p>Connecting to a remote host, requires only changing how you create the Client() in any script:</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">With podman.Client(uri='unix:/run/user/17945/podman/io.podman',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">remote_uri='ssh://ruser@podman.example.com:22/run/podman/io.podman') as client:</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">* uri provides the local side of the ssh tunnel</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* user is your username</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* remote_uri provides the details needed to connect to the remote host, plus the socket file for podman. A complete ssh uri is supported to allow configuration of ports etc.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* ruser is the remote host username to be used for authentication</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* podman.example.com is the FQDN of the host you are running the podman service on</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* The port number of 22 is given above for completeness, that is the default and may be omitted.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* An identity file may be provided via identity_file, otherwise the podman library will defer to ssh for authenticating.</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>All other function and method calls are the same whether they are remote or local. Note: all filesystem paths are resolved on the host running the podman service not the podman client.</p><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="but-wait-there-is-more">But wait there is more!<a href="#but-wait-there-is-more" class="hash-link" aria-label="Direct link to But wait there is more!" title="Direct link to But wait there is more!">​</a></h2><p>To iterate over all the images stored on the system, you only need to change containers to images like:</p><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">for i in client.images.list():</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>To find podman system information, you need to use: <code>client.system.info()</code>. Or, <code>client.system.versions()</code> if you need to know the release of the podman service components.</p><p>To determine if the podman service is available and working, <code>client.system.ping()</code> will return <code>True</code> if everything is working correctly.</p><p>One of the most complex operations is creating a new container from an image, the workflow:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">* Pull image from registry</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* Instantiate image object</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* Set container options</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* Create OCI container and object</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="language-console codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-console codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">with podman.Client() as client:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> ident = client.images.pull(name)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> img = client.images.get(ident)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">opts = {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> 'memory': '1G',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> 'memory-reservation': '750M',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> 'Memory-swap': '1.5G',</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ctnr = img.container(**opts)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Our calling pattern is “client.<!-- -->&lt;<!-- -->model<!-- -->&gt;<!-- -->.<!-- -->&lt;<!-- -->method<!-- -->&gt;<!-- -->(<!-- -->&lt;<!-- -->options<!-- -->&gt;<!-- -->)”, where the current models are:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">* Images</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* Containers</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">* System</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The Podman man pages provide details on the methods and options to be used for each.</p><p>What’s been shown in this blog is how easy it is to use the Python module to do Podman commands from your Linux host. These bindings can be used on the same host that Podman is running on, or they could be used on a remote host. Although there is not a complete one to one correspondence between the Podman commands and the ones available via the Python bindings — yet, the end goal for this project is to get to that point. For instance the commands for interacting with pods are currently under development and when available, the Python module will be updated to allow access. In addition to that, there’s work underway to make this Python module available on MacOS and Windows via PyPi. When these ports go live, you will be able to interact with Podman service from any Linux, MacOS or Windows host.</p><p>I hope you have found the information in this blog to be useful and gives you further insight into Podman and this Python module. If you have any questions a great place to ask them is the IRC channel <em>#podman</em> on <em>FREENODE</em>.</p><p>Better yet if you’d like to help contribute to Podman or this Python module, please feel free to join us on GitHub!</p><p><a href="https://github.com/containers/podman" target="_blank" rel="noopener noreferrer">https://github.com/containers/podman</a>
<a href="https://github.com/containers/podman/tree/main/contrib/python" target="_blank" rel="noopener noreferrer">https://github.com/containers/podman/tree/main/contrib/python</a></p>]]></content>
        <author>
            <name>jwhonce</name>
        </author>
        <category label="podman" term="podman"/>
        <category label="containers" term="containers"/>
    </entry>
</feed>