docker is largely a system for managing the ecosystem of a shitty tool or language.
if i cannot trivially install your program without installing 10 different external packages, it is a prime candidate for docker. it’s a great candidate specifically because it is complicated. the introduction of docker as a management framework makes it even more complex. perhaps not to run, but to deal with.
now i need to know how docker files & caching work. i need to know how to push a dockerfile to an external docker repository. i need to know how to execute commands to debug using a shell in a container, which feels eons from my comfortable shell environment that i’ve carefully configured. the shitty docker shell shows up in my own terminal, spitting in my face for having cared about setting up my own system. making it feel like i wasted my time.
if i was going to spend all of my debugging time inside of a docker container, why the fuck did i read about & configure my shell history and behavior?
sure, i can stick some dotfiles into my container - but at that point, you start seeing the problem. if you’re recreating a shitty version of your workstation inside of a container, why are you using a container at all? it just stops feeling worth it.
there are grey areas. but largely, i find this rule to be true: “the more complicated installing a given piece of software is, the better it feels to use in docker.”
for example: jitsi is an piece of voice conferencing software & it is written in elixir. and node. and it relies on an external XMPP server that you must specifically configure. oh, and a database, specifically configured as well. and a complex reverse proxy config, and direct http certificate access. jitsi also requires that you run several daemons, each which need to be configured to talk to one another. you must also own a custom domain, and configure jitsi to use it. and 3 different exposed ports. and specific security limit tweaking. and… you get the point. unfortunately, the list goes on.
jitsi is one of the only pieces of software that i run from a container. my preferred packaging format is a static binary, but i do not mind a well configured apt repository or similar - matrix’s synapse does a good job of making itself easy to install, despite being a chaotic fucking disaster.
i run jitsi from a container because i simply do not have the time to deal with its bullshit. it’s a complexity arms race - the more complicated it is, the more complicated things we need to run it. i do not want to run jitsi in docker, but i have to.
if more developers saw the downstream operators of their programs as human beings with valuable time, they’d make their programs easy to install from the start, and they’d carefully weigh adding any installation and configuration complexity against adding more features. they might consider building a cache within their program instead of forcing the user to install and configure redis.
it’s funny that i mention redis, because redis is a shiny example of a well written program. easy to install, configure, run, and understand. i have no reason to install it in a container - it takes me 10 seconds to setup and get running on any linux system on earth.
instead, developers want to add features as quickly as possible, and do so at the invisible cost of the people who have to maintain their shit. a complexity arms race, all the way to the point where i, a professional linux administrator and expert shell user, feel like it’s a waste of my time to install and configure their shit. it’s so complex that i just say “fuck it, i’ll just use docker-compose, i was interested in how your program worked fundamentally, but i am not anymore. it’s just not worth my time.”
i am so sick of developers pushing their complexity downstream.