Continuing my discussion of stupid developers who are dumb, just a few more words about the problems with software “engineers” these days. There is a general trend among devs lately to just skim documentation, copy some Stack Overflow code, and call it a day. Hell, maybe this “trend” was always a problem and I just didn’t notice it. But it’s definitely a problem and the devs who do it are probably a good part of the reason outsourcing can be a very good idea.
If you are going to do a job, at least pretend to half-ass it. I see developers around me constantly learning the bare minimum of a given tool or process to get the job done so they can move on. Sometimes they do nothing more than refer to a “cheat sheet” so that they never have to understand anything at all. Oftentimes they have no understanding of the inner workings of whatever it is they’re using, which leads to a great deal of the Git hate I see out there.
Git is not today’s topic. Docker is.
Docker
Some peers just finished a mini-sprint to dockerize my favorite project, codename Cyclops. We didn’t tell them, “you must do this or else!” We came together, and we all agreed that nobody had a good sense of the technology stack in production. We all agreed that if we put it in Docker, it would force us to learn the stack as well as give us a nice way to do dev and eventually push it up to the cloud. And a couple people eagerly volunteered to take on the task.
These peers of mine, bless their tiny little brains, churned out a Dockerfile which created a single image for the whole stack. The stack for this thing is complex, but I can summarize it: 1 relational database server, 4 non-relational database servers, 1 search index service, 1 web server, and the Rails code. (There’s also a separate derivative generation server, but it could live on the Rails server if necessary) Now, if you know anything about Docker, you know that if at all possible, this should mean around 7 images. Some of the bigger servers, in fact, already have official Docker images, such as MySQL and Mongo.
My wonderful peers chose to just jam it all in one image. Okay, well, that’s pretty fucking stupid, right?
It gets worse. They used Rake tasks to download and install some of the big dependencies. Like, database and search index servers. Without any explicit version requirements. So not only do we not have any isolation, we still have no fucking idea what version of these servers we’re using. And NO FUCKING WAY to ensure it mirrors production!
It gets worse.
They didn’t bother to make any way to mount data volumes. If you stop your container and remove it, a process which is pretty typical in container-land, your data is gone. Containers should never hold critical data. They should be able to be created and destroyed without side-effects.
And all this work took two devs something like a week.
When I decided to learn Docker for other projects, I didn’t do an amazing job, but for fuck’s sake, I at least learned the basics. Docker is NOT a VM and it’s not meant to be treated like one! Come on, Michael!