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
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.
Stephen Snow
‘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.
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
Stephen Snow
Good to see you are no longer considered spam!
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.
yongbin
following line looks wrong.
app.listen(8081, () => {
console.log(“Listing on port 8080”);
});
Yazan Monshed
Thanks for the note, I’ll fix it.
Gregory Bartholomew
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!
Yazan Monshed
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.
Gregory Bartholomew
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.
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?
Yazan Monshed
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.
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!
Ben
Is podman compatible with Singularity (used dominantly in HPC/scientific computing over docker) ?