Docker. It’s been around longer, it’s more polished, easier to learn, simpler to use, supported everywhere and by everything, easy to find solutions when you search for help, doesn’t depend on systemd, compatible with every container image out there, and you can do things with it even if it’s not the “correct” way to do it while podman will tell you “no, you can’t do that”.
Podman, rootless containers work well, and there is no central process running everything. I like that starting containers on boot is integrated with systemd.
How do you automatically start podman containers? I currently just manually add systemd entries but that’s a lot more cumbersome than Docker which doesn’t require you to do anything at all.
That’s how you do it, you have to write systemd config files for each container. And because it was cumbersome they’ve come up with third party tools that write them for you and launch the container. 😉
I use Quadlet, which is now merged in podman. The only issue I had with it is running system systemd services as other (rootless) users, I can’t get it to create cid files that the users can access. In those cases only, I have to modify the generated services files, which defeats the purpose.
Since I use Docker Compose with Podman, I just make a single systemd service to run Docker Compose on boot, thereby starting all my containers at once.
That’s an interesting way to do it. Do you have everything in 1 compose file?
I have one Compose file per stack, which is an application and all of its containers, databases, etc. Pretty much the same way I organized things with just Docker.
i would like to try… but as far as i know, there is no “docker compose up -d”
Podman supports docker compose just fine. You have to run it as a service, so that it can expose a socket like docker does, but it supports doing exactly that
Apparently it does! podman-compose
cool, thank you!
Check my comment history for an example of a simple bind mount
compose.yaml
I use for developing a small Python project. It’s exactly the same as Docker Compose (since Podman Compose follows the Compose spec) but if you’re just getting started, it might be a good skeleton to build on.i have all my stacks on docker compose. if it follows the same specks, i would only need to convert volumes and networks
Don’t overthink this. Just start using something.
This is the best advice. Bloody hard for me to do, however. Not sure why.
definitely docker. it just has so much more documentation and community involvement.
On what host system?
Podman, dockerd is a single point of failure
Docker if you are unsure how to begin. You can use docker compose with configs you find on the internet.
If your interested in podman I would start by using it though distrobox. Distrobox is a tool that allows other Linux environments on your host system and is really good for development
I use podman, even when I started out. But I am a tinkerer. I think for the average beginner, docker will be easier as so much out there assumes you are using Docker only, and hard codes it. Unless you wanna deal with that, use Docker.
A year or two ago (whenever docker changed the business license of docker for Mac) I changed to podman and aliased docker=podman. It behaves the same, you would just about never know rootful podman vs docker.
Rootless podman is super cool and a much better security ideal - but comparing more apples to apples would be podman running as root vs docker.
I started with Docker and then migrated to Podman for the integrated Cockpit dashboard support. All my docker-compose files work transparently on top of rootful Podman so the migration was relatively easy. Things get finicky when you try to go rootless though.
I say try both. Rootful podman is gonna be closest to the Docker experience.
If you’re running it for your own network, just use Docker. The tooling is way, way better for docker, especially for a beginner.
Whichever one is better supported by the containers you want to run.
They both support the same containers
Except in real life you’ll run into images that podman refuses to work with all the time.
Example? Ive definitely had compose projects that I had a hard time running with podman but all the individual containers seem to work just fine.
How do you make podman run an image that runs as an uid/gid that don’t exist on the host and needs to access host devices/volumes owned by uid/gid that don’t exist in the container?
You use podman unshare to
chown
the directories to the appropriate UID/GID in the container’s user namespace.This right here. Just found out about this last week after a long debug.
I do a lot of docker/k8s at work, and I use podman at home. Podman is very cool in theory but still rough around the edges. I recommend docker if you just want to get started, Podman is a little extra work.
Docker because it just works. Podman has another 5 years (hopefully) to get this part right IMO.