Skip Navigation

Anyone using "docker run" instead of "docker compose"?

For the vast majority of docker images, the documentation only mention a super long and hard to understand "docker run" one liner.

Why nobody is placing an example docker-compose.yml in their documentation? It's so tidy and easy to understand, also much easier to run in the future, just set and forget.

If every image had an yml to just copy, I could get it running in a few seconds, instead I have to decode the line to become an yml

I want to know if it's just me that I'm out of touch and should use "docker run" or it's just that an "one liner" looks much tidier in the docs. Like to say "hey just copy and paste this line to run the container. You don't understand what it does? Who cares"

The worst are the ones that are piping directly from curl to "sudo bash"...

72 comments
  • Plain docker is useful when running some simple containers, or even one-off things. A lot of people thing about containers as long running services, but there's also many containers that are for running essentially a single command to completion and then shuts down.

    There's also alternate ways to handle containers, for example Podman is typically used with systemd services as unlike Docker it doesn't work through a persistent daemon, so the configuration goes to a service.

    I typically skip the docker-compose for simple containers, and turn to compose for either containers with loads of arguments or multi-container things.

    Also switching between Docker and Podman depending on the machine and needs.

  • I've started replacing my docker compose files with pure ansible that is the equivilent of doing docker run. My ansible playbooks look almost exactly like my compose file but they can also create folders, set config files or cycle services when configs are updated.

    It's been a bit of a learning process but it's replaced a lot what was previously documentation with code instead.

  • Previously my server was just a Debian box where I had a 'docker' directory with a bunch of .sh files containing 'docker run' commands (and a couple of docker-compose files for services that that have closely related containers). That works really well, it's easy to understand and manage. I had nginx running natively to expose stuff as necessary.

    Recently I decided to try TrueNAS Scale (I wanted more reliable storage for my media library, which is large enough to be annoying to replace when a simple drive fails), and I'm still trying to figure it out. It's kind of a pain in the ass for running containers since the documentation is garbage. The web interface is kind of nice (other than constantly logging me out), but the learning curve for charts and exposing services has been tough, and it seems that ZFS is just a bad choice for Docker.

    I was attracted to the idea of being able to run my services on my NAS server as one appliance, but it's feeling like TrueNAS Scale is way too complicated for home-scale (and way too primitive for commercial, not entirely sure what market they are aiming for) and I'm considering dumping it and setting up two servers, one for NAS and for running my containers and VMs.

  • it turns out GPT converts plain docker commands into docker compose files well enough to me, it's been my go-to when I need to create a compose YAML. Checking a YAML and making one or two small corrections is even faster than entering all info in a form like Docker Compose Generator.

  • Even for the one-liner argument - a better one liner than any docker run is docker compose up [-d].

72 comments