{"id":482,"date":"2025-09-08T10:01:24","date_gmt":"2025-09-08T10:01:24","guid":{"rendered":"https:\/\/www.aran.cat\/wp\/?p=482"},"modified":"2025-09-08T10:01:25","modified_gmt":"2025-09-08T10:01:25","slug":"containers-in-2025-docker-vs-podman-for-modern-developers","status":"publish","type":"post","link":"https:\/\/www.aran.cat\/wp\/?p=482","title":{"rendered":"Containers in 2025: Docker vs. Podman for Modern Developers"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">FONT: <a href=\"https:\/\/www.linuxjournal.com\/content\/containers-2025-docker-vs-podman-modern-developers\">https:\/\/www.linuxjournal.com\/content\/containers-2025-docker-vs-podman-modern-developers<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Containers in 2025: Docker vs. Podman for Modern Developers<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">by <a href=\"https:\/\/www.linuxjournal.com\/users\/george-whittaker\">George Whittaker<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">on August 26, 2025<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.linuxjournal.com\/sites\/default\/files\/styles\/360_250\/public\/nodeimage\/story\/containers-in-2025-docker-vs-podman-for-modern-developers.jpg?itok=SDv6inAs\" alt=\"Containers in 2025: Docker vs. Podman for Modern Developers\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/twitter.com\/intent\/tweet?text=Containers%20in%202025%3A%20Docker%20vs.%20Podman%20for%20Modern%20Developers%20%7C%20Linux%20Journal&amp;url=https%3A%2F%2Fwww.linuxjournal.com%2Fcontent%2Fcontainers-2025-docker-vs-podman-modern-developers&amp;via=linuxjournal\">tweet<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.facebook.com\/sharer\/sharer.php?u=https%3A%2F%2Fwww.linuxjournal.com%2Fcontent%2Fcontainers-2025-docker-vs-podman-modern-developers\">share<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&amp;summary=&amp;title=Containers%20in%202025%3A%20Docker%20vs.%20Podman%20for%20Modern%20Developers%20%7C%20Linux%20Journal&amp;url=https%3A%2F%2Fwww.linuxjournal.com%2Fcontent%2Fcontainers-2025-docker-vs-podman-modern-developers\">share<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/reddit.com\/submit?url=https%3A%2F%2Fwww.linuxjournal.com%2Fcontent%2Fcontainers-2025-docker-vs-podman-modern-developers&amp;title=Containers%20in%202025%3A%20Docker%20vs.%20Podman%20for%20Modern%20Developers%20%7C%20Linux%20Journal\">share<\/a><\/li>\n\n\n\n<li><a href=\"mailto:?subject=Containers%20in%202025%3A%20Docker%20vs.%20Podman%20for%20Modern%20Developers%20%7C%20Linux%20Journal&amp;body=https%3A%2F%2Fwww.linuxjournal.com%2Fcontent%2Fcontainers-2025-docker-vs-podman-modern-developers\">mail<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Container technology has matured rapidly, but in 2025, two tools still dominate conversations in developer communities: <strong>Docker<\/strong> and <strong>Podman<\/strong>. Both tools are built on OCI (Open Container Initiative) standards, meaning they can build, run, and manage the same types of images. However, the way they handle processes, security, and orchestration differs dramatically. This article breaks down everything developers need to know, from architectural design to CLI compatibility, performance, and security, with a focus on the latest changes in both ecosystems.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Architecture: Daemon vs. Daemonless<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker&#8217;s Daemon-Based Model<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker uses a persistent background service, <code>dockerd<\/code>, to manage container lifecycles. The CLI communicates with this daemon, which supervises container creation, networking, and resource allocation. While this centralized approach is convenient, it introduces a single point of failure: if the daemon crashes, every running container goes down with it.<strong>Podman\u2019s Daemonless Approach<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podman flips the script. Instead of a single daemon, every container runs as a child process of the CLI command that started it. This design eliminates the need for a root-level service, which is appealing for environments concerned about attack surfaces. Containers continue to run independently even if the CLI session ends, and they can be supervised with <code>systemd<\/code> for long-term stability.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Developer Workflow and CLI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Familiar Command Structure<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podman was designed as a near drop-in replacement for Docker. Commands like <code>podman run<\/code>, <code>podman ps<\/code>, and <code>podman build<\/code> mirror their Docker equivalents, reducing the learning curve. Developers can often alias <code>docker<\/code> to <code>podman<\/code> and keep using their existing scripts.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Run an NGINX container<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker run -d --name web -p 8080:80 nginx:latest<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Podman<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">podman run -d --name web -p 8080:80 nginx:latest<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>GUI Options<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For desktop users, Docker Desktop remains polished and feature-rich. However, <strong>Podman Desktop<\/strong> has matured significantly. It now supports Windows and macOS with better integration, faster file sharing, and no licensing restrictions, making it appealing for enterprise environments.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Image Building and Management<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker\u2019s BuildKit<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker\u2019s modern builds leverage BuildKit, enabling parallelized builds, advanced caching, and multi-architecture support. This makes building complex applications efficient and portable across ARM and x86 environments.<strong>Podman with Buildah<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podman integrates with <strong>Buildah<\/strong>, enabling rootless image building, a huge win for CI\/CD pipelines. Recent versions also added distributed builds (<code>podman farm build<\/code>), making it easier to scale builds across multiple systems, a feature Docker introduced earlier with BuildKit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Build an image with Podman<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">podman build -t myapp:latest .<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Rootless Containers<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Rootless operation is where Podman truly shines. From the ground up, Podman runs containers as a regular user, mapping the root user inside the container to a non-privileged user on the host. Docker added rootless support later, but it\u2019s still not the default configuration. For developers working in multi-user systems or shared CI runners, Podman\u2019s approach is safer and easier to configure.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Security Considerations<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Podman<\/strong> minimizes risks by avoiding a long-running privileged daemon and using tighter default permissions.<\/li>\n\n\n\n<li><strong>Docker<\/strong>, while improved with rootless mode and better defaults in Docker Engine 28, still defaults to rootful mode in many deployments.<\/li>\n\n\n\n<li>Both support SELinux, AppArmor, and Seccomp for additional isolation, but Podman\u2019s integration is deeper in SELinux-enabled environments.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Kubernetes and Orchestration<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Docker and Compose<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Docker remains a leader for local development with <strong>Docker Compose<\/strong>, offering a quick way to spin up multi-container stacks. For clustering, Docker Swarm still exists but has mostly stagnated.<strong>Podman and Kubernetes Alignment<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podman embraces a Kubernetes-first design. It allows creating pods locally, exporting manifests with <code>podman generate kube<\/code>, and even running those manifests directly with <code>podman play kube<\/code>. This makes Podman an excellent choice for teams moving workloads to Kubernetes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Generate Kubernetes YAML from a running Podman pod<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">podman generate kube mypod &gt; mypod.yaml<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Performance and Resource Usage<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Startup Speed:<\/strong> Docker is marginally faster when starting individual containers because the daemon is always running.<\/li>\n\n\n\n<li><strong>Idle Overhead:<\/strong> Podman wins here,\u00a0no daemon means zero baseline memory usage when idle.<\/li>\n\n\n\n<li><strong>Scalability:<\/strong> Podman handles many concurrent containers more gracefully since there\u2019s no central bottleneck.<\/li>\n\n\n\n<li><strong>Rootless I\/O:<\/strong> Thanks to kernel-level improvements, Podman\u2019s rootless file I\/O performance now matches Docker\u2019s native overlay driver performance.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Ecosystem and Compatibility<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Docker\u2019s API compatibility remains a huge advantage, with wide support in third-party tools and CI systems.<\/li>\n\n\n\n<li>Podman has bridged much of this gap with a Docker-compatible API service, enabling tools like Jenkins or Terraform to interact with it almost transparently.<\/li>\n\n\n\n<li>Docker Hub remains the dominant public image registry, but Podman works with all OCI-compliant registries seamlessly.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Practical Use Cases<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Scenario<\/th><th>Preferred Tool<\/th><\/tr><tr><td>Multi-user Linux servers<\/td><td>Podman<\/td><\/tr><tr><td>Legacy pipelines using Docker API<\/td><td>Docker<\/td><\/tr><tr><td>CI\/CD with rootless builds<\/td><td>Podman<\/td><\/tr><tr><td>Desktop dev with Kubernetes cluster<\/td><td>Docker Desktop or Podman Desktop<\/td><\/tr><tr><td>Windows container workloads<\/td><td>Docker<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Future Outlook<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The rivalry between Docker and Podman is less about one replacing the other and more about <strong>choosing the right tool for the job<\/strong>. With both runtimes embracing OCI standards and converging on feature parity, developers have the flexibility to mix and match based on project needs. Expect to see:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>More integrations supporting both runtimes.<\/li>\n\n\n\n<li>Continued emphasis on rootless security.<\/li>\n\n\n\n<li>Deeper Kubernetes alignment, especially from Podman.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Final Thoughts<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Docker and Podman in 2025 represent two mature, powerful tools. Docker excels in compatibility and ease of onboarding, while Podman provides advanced security and a Kubernetes-centric approach. For developers, the good news is clear: whether you choose Docker, Podman, or even both in different environments, your workflows remain fast, secure, and future-proof.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.linuxjournal.com\/sites\/default\/files\/pictures\/george-whittaker-linuxjournal%20%281%29%20%281%29.jpeg\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">George Whittaker is the editor of&nbsp;Linux Journal, and also a regular contributor. George has been writing about technology for two decades, and has been a Linux user for over 15 years. In his free time he enjoys programming, reading, and gaming.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>FONT: https:\/\/www.linuxjournal.com\/content\/containers-2025-docker-vs-podman-modern-developers Containers in 2025: Docker vs. Podman for Modern Developers by George Whittaker on August 26, 2025 Introduction Container technology has matured rapidly, but in 2025, two tools still dominate conversations in developer communities: Docker and Podman. Both tools are built on OCI (Open Container Initiative) standards, meaning they [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[16,4],"tags":[],"class_list":["post-482","post","type-post","status-publish","format-standard","hentry","category-informatica","category-programari-lliure"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.aran.cat\/wp\/index.php?rest_route=\/wp\/v2\/posts\/482","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aran.cat\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.aran.cat\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.aran.cat\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aran.cat\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=482"}],"version-history":[{"count":1,"href":"https:\/\/www.aran.cat\/wp\/index.php?rest_route=\/wp\/v2\/posts\/482\/revisions"}],"predecessor-version":[{"id":483,"href":"https:\/\/www.aran.cat\/wp\/index.php?rest_route=\/wp\/v2\/posts\/482\/revisions\/483"}],"wp:attachment":[{"href":"https:\/\/www.aran.cat\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.aran.cat\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.aran.cat\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}