Containerization is more than just the way forward. It is now the norm rather than the exception; all new apps are designed to leverage cloud-native features, with microservices running in containers. Containerization has enabled applications to run with immense efficiency and scalability, but the use of containers is not without its challenges.
Until very recently, the most prominent container engine was Docker. Even those running Kubernetes still rely on Docker containers as a way to orchestrate their applications. Today, however, Docker has a serious contender: Podman. Unlike Docker, which relies on daemons, Podman runs directly using runC runtime containers.
Is Podman better than Docker as a containerization engine? What are the features and advantages offered by this new solution? Let’s take a closer look and answer these questions, shall we?
What Is Podman?
As mentioned earlier, Podman is a containerization engine – a direct competitor to Docker – that approaches the whole idea of containerization rather differently. It no longer relies on daemons to function, unlike Docker which incorporates both the Docker CLI and Docker Daemon to interact with images and registries.
The main issue with the way Docker uses daemon is the fact that it relies on a single process to work, which also means it has a single point of failure. When the daemon fails, all child processes that rely on the presence of that daemon stop or are orphaned. This also creates a serious vulnerability security-wise, and it limits the flexibility of Docker as a containerization engine.
Podman is designed according to the OCI standards, and it works with OCI containers as well as other tools and resources that support this standard. However, Podman interacts directly with the kernel, image registry, containers, and images. It does not require a daemon to work. It also does not require root access, making it more secure than Docker.
Here’s another great thing about Podman: it is completely compatible with Docker commands. While you don’t need to start a daemon to manage your containers, you can still use the same commands. All of the runtimes you have designed for Docker can be managed using Podman. You just need to run alias docker=podman after installing Podman.
The cross-compatibility is intentional. RedHat, the entity behind Podman, deliberately designed the new containerization engine to work seamlessly so that migrations are easy to manage and there are no additional adjustments needed. In fact, the hashtag #nobigfatdaemons was trending because developers and engineers forgot that they had switched to Podman.
Tools and Resources
Let’s get to the fun part, shall we? Switching to Podman is the easy part. The next step is understanding how you can maximize this daemon-free containerization engine to your benefit, starting with understanding the fact that Podman can also run pods and not just containers. Pods can have multiple containers and are compatible with sidecar containers.
Next, you need a good image management tool to manage images and their components. Here’s where Podman really shines. You no longer have to manually download images to scan their components. In fact, you can work with images in multiple repositories seamlessly, including when you need to move components from an image in one repo to one in another.
Security is a big focus with Podman, and the fact that this containerization engine runs without requiring root access is a huge plus. Containers can run using different users with limited access to server resources and low-level functions, so you can really be meticulous with how you do IAM. Non-root users can only see images that they have created or downloaded.
To add an extra layer of security, Podman supports UID separation using namespaces. This too is a huge plus since the implementation of UID separation allows containers to be isolated from one another. You can sandbox an entire cluster or have each container running independently while maintaining network flexibility if needed.
Podman is mature enough to use for deploying microservices and apps in containers, but the engine itself is being developed continuously. The Podman team at RedHat is working hard to bring more features to the table, all so that cloud containerization can be easy and reliable without the usual complication and security risks.
For example, Podman will soon support libpod, which is integrated into the CRI-O. while the current container management backed is easy enough to use, support for libpod will take the user experience – or should I say developer experience – to a whole new level. You can also use Buildah to manage images and builds for your Podman instance.
Seccomp unifies security policies for Podman, Buildah, and CRI-O. These three solutions can be integrated seamlessly, so having that ability to manage security in a holistic way means you don’t have to jump through hoops to make sure that the entire ecosystem is secure. You also have the podman container runlabel command at your fingertips.
CNI handles networking, and that’s a great thing for developers. You automatically have access to resources such as Project Calico, TungstenFabric, and Bonding CNI for crafting a highly available network for your application. You also have the entire CNI developers’ community behind the implementation of CNI in Podman.
Getting Started with Podman
You only need to install Podman – by running the usual yum -y install podman command – to get started. You can install Podman on top of virtually any operating system you use, including Raspbian and Amazon Linux 2. After the installation process is completed, run the alias command mentioned earlier to make sure that Podman takes over Docker as a containerization engine.
Other commands are easy. Use –help to explore the available commands on Podman. Podman run handles spooling up containers. You can list all running containers using podman ps, so you never lose track of your containers. Podman also has podman inspect for when you need to check the metadata of your running containers.
It’s all very straightforward, isn’t it? Without a daemon to worry about, you can create and manage complex containers and capable applications while maintaining maximum security and keeping the whole ecosystem efficient with the help of Podman as your containerization engine.
Caylent provides a critical DevOps-as-a-Service function to high growth companies looking for expert support with Kubernetes, cloud security, cloud infrastructure, and CI/CD pipelines. Our managed and consulting services are a more cost-effective option than hiring in-house, and we scale as your team and company grow. Check out some of the use cases, learn how we work with clients, and read more about our DevOps-as-a-Service offering.