Getting Started with Podman on Fedora Linux

Podman logo from the Podman project https://github.com/containers/podman/tree/main/logo

Podman is a daemonless container engine for developing, managing, and running OCI Containers on your Linux System. In this article, we will introduce podman and how to use it with a small application build using nodejs. The app will be very simple and clean.

Install Podman

Podman command is the same as docker just type in your terminal alias docker=podman if you have docker already installed

Podman is installed by default in Fedora Linux. But if you don’t have it for any reason, you can install it using the following command:

sudo dnf install podman

For fedora silverblue users, podman is already installed in your OS.

After installation, run the hello world image to ensure everything is working:

podman pull hello-world 
podman run hello-world

If everything is working well you will see the following output in your terminal:

Hello from Docker! 
This message shows that your installation appears to be working correctly.
 To generate this message, Docker took the following steps:
  1.The Docker client contacted the Docker daemon.
  2.The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64)
  3.The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
  4.The Docker daemon streamed that output to the Docker client, which sent it to your terminal. 
 To try something more ambitious, you can run an Ubuntu container with:
  $ docker run -it ubuntu bash
 Share images, automate workflows, and more with a free Docker ID:
  https://hub.docker.com/
 For more examples and ideas, visit:
  https://docs.docker.com/get-started/

Simple Nodejs App

First, we will create a folder webapp , type the following command in your terminal

mkdir webapp && cd webapp

Now create the file package.json This file includes all the dependencies that the project needs to work well. Copy the following code inside the file package.json .

{
       "dependencies": {
               "express": "*"
       },
       "scripts": {
               "start": "node index.js"
       }
}

Create the file index.js and add the following code there:

const express = require('express')

const app = express();

app.get('/', (req, res)=> {
       res.send("Hello World!")
});
app.listen(8080, () => {
       console.log("Listing on port 8080");
});

You can download source code from here.

Create Dockerfile

First of all, create a file called Dockerfile and make sure the first character is a capital, NOT lower case, then add the following code there:

FROM node:alpine
WORKDIR usr/app
COPY ./ ./
RUN npm install
CMD ["npm", "start"]

Be sure you are inside the folder webapp then show the image and then type the following command:

podman build .

Make sure to add the dot. The image is created on your machine and you can show it using the following command:

podman images

The last step is to run the image inside a container by typing the following command:

podman run -p 8080:8080 <image-name>

Now open your browser in localhost:8080 and you will see that your app works.

Stopping and Remove Container

To exit from the container use CTRL-C. You can remove the container by using the container id. Get the id and stop the container using these commands:

podman ps -a
podman stop <container_id>

You can delete the images from your machine by using the following command:

podman rmi <image_id>

Read more about podman and how it works on the official website

Fedora Project community

18 Comments

  1. Stephen Snow

    In the article you state that to run Podman as Docker do the following …
    “just type in your terminal ‘alias docker=podman’ if you have docker already installed” Then you use Docker instead of Podman as can be seen by the output of the command.

    • Piyush Agarwal

      Exactly, from this article I didn’t get the difference between docker and podman. It seems like an alias.

      • ‘alias docker=podman’ Definitely is an alias. I was incorrect though, it does run Podman and not Docker, the original image pulled is from Docker and the content of the message from the container is docker oriented, so my misinterpretation.

  2. Edier

    Thank you.
    I was looking forward to install Moby (Docker) but thanks to your article I found out that Podman is lighter and more efficient. I will start my project with Podman instead. Thanks

  3. hammerhead corvette

    Excellent article Yazan ! Can we create an image of Anaconda with the minimal Fedora install? The Docker Anaconda package is Python2.7 and has not been updated in a while, but it would be nice to have the latest Fedora supported Python and current Anaconda package instead.

  4. yongbin

    following line looks wrong.

    app.listen(8081, () => {
    console.log(“Listing on port 8080”);
    });

    • Thanks for the note, I’ll fix it.

      • Hi Yazan. You won’t be able to edit your article directly after publication, but you can reach an editor to request a correction by posting a comment on the article’s Kanban card.

        Since you’ve already said that this should be corrected, I’ll go ahead and take care of this one. Thanks!

        • Great, Thanks Gregory!

        • Ralf

          Honestly, that’s a bit strange and an absolutely no-go for me.
          You should think about whether it would make sense in your case to put the author of a text above the editors.

          • Well, what I said isn’t entirely accurate. If Yazan wanted to, he could become an editor for Fedora Magazine and then he would be able to edit post-publication articles. We still strive not to edit articles post-publication though. I’m not sure what the reasoning is behind that rule though. I think it might have been something to do with search engine optimization. There may have been other reasons.

            • Ralf

              Well then, congratulations on the promotion Yazan, and thanks for the explanation Gregory.

  5. Ralf Seidenschwang

    I’m a bit fascinated about the whole ecosystem that has evolved over the years and that is no longer manageable from a singe person.
    Virtualization is still in the enterprises, but the question is: How long? Will it vanish completely?

    • Well, good question. Virtualization does not conflict with containers, you can look to the containers as “the New way to Delivery the Software” which means the containers don’t compete with the virtualization. this is my perspective.

      • Ralf

        Well, I understand that they have not the same use case, but with OpenShift Virtualization for example, there is certainly some battle for customers between the Operator for the OpenShift product and Red Hat virtualization based on oVirt. Maintaining both environments would be expensive.

  6. Ralf

    Thanks a lot. I haven’t much experience with Node.js or JavaScript, but I think you can’t remove images from the local store without first delete the container with the rm command.
    I recommend the new book listed here -> https://www.keycloak.org/
    Node.js examples are included. It introduces the user to some common simple programming design patterns.
    Happy reading!

  7. Ben

    Is podman compatible with Singularity (used dominantly in HPC/scientific computing over docker) ?

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

The opinions expressed on this website are those of each author, not of the author's employer or of Red Hat. Fedora Magazine aspires to publish all content under a Creative Commons license but may not be able to do so in all cases. You are responsible for ensuring that you have the necessary permission to reuse any work on this site. The Fedora logo is a trademark of Red Hat, Inc. Terms and Conditions

%d bloggers like this: