m@ksim.pro
Back to all posts
IT 4 min read

Docker changes the conversation about delivery: the repeatable environment matters more than the container

Containerization is first and foremost a delivery discipline, not a new way to package an application.

Early in 2013 Docker was released publicly and quickly started gathering attention from developers. On the surface the story looks technical: a new way to isolate processes on Linux, built on cgroups and namespaces. More convenient than virtual machines, lighter on resources. The market had already been signalling its need for portable application delivery before a specific tool arrived to answer it.

But if you look at what Docker actually changes about how teams work, the story is different. This is not a new way to package software. It is a new conversation about what "shipping a program" means.

What used to be called the environment problem

"It works on my machine" - a phrase every development team has heard. Code runs on the developer's laptop and crashes on the test server. Or runs on test and fails in production. The reason is almost always the same: the environments do not match.

Different versions of interpreters, libraries, system dependencies. Different environment variables. Different paths. Configurations that "set themselves up" on one machine and were never recorded anywhere.

The standard answer to this problem is long setup instructions, "how to get running locally" documents, wiki pages that are never current. A new person on the team spends several days just getting the project to start.

What the container changes

A container holds not just the application code but its environment: dependencies, configuration, library versions. Everything needed to run it is described explicitly in a single file - the Dockerfile.

If the container ran on the developer's machine, it will run on the server. Not "should run", not "probably runs". The same environment.

This moves the question "will this work over there" from a category of permanent worry to a category of technically verifiable fact.

Why this is a discipline, not a tool

A container by itself solves nothing. You can build a container with dependencies that are not pinned by version, with configuration baked into the image instead of environment variables, with secrets sitting directly in the Dockerfile. The tool will be used; the problems will remain.

The value appears when a discipline sits behind the container: explicitly described dependencies, reproducible builds, separation of configuration from code, versioned images.

These are not technical requirements of Docker. They are requirements for a delivery process, which Docker makes enforceable - because they can no longer be bypassed without an explicit violation. The argument that release speed is an infrastructure topic was that delivery discipline matters before any specific tool arrives to enforce it.

What this means for a team and for a manager

For a developer, a reproducible environment saves time and frustration. For a tester, it is confidence that what is being tested is what will go to production. For operations, it is predictable deployments.

For a manager it means something else. An explicit environment description in code is a free audit. You can answer: exactly what is running in production, with which dependencies, at which version. Rollback becomes possible - because the previous image is saved.

This is not trivial if you are in a regulated industry or in a situation where you need to understand exactly what changed between "it worked" and "it broke".

Practical questions

If you are assessing how relevant this is for your team, a few questions help establish the starting point:

  1. How long does it take a new developer to get the project running from scratch on their machine?
  2. Do you have a deployment procedure that is documented and current today?
  3. If something breaks in production - can you quickly roll back to the previous version?
  4. Are development, test, and production environments identical - or "roughly the same"?
  5. Who is responsible for keeping the project's dependency description up to date?

If the answers are uncomfortable, the problem is not the absence of containers. The problem is the absence of delivery discipline. Containers are a tool that helps build that discipline. But the starting point is understanding exactly where the environment stops being predictable.

Docker is still building its audience. But the problem it solves is not going anywhere.

Back to all posts
Contact

If this resonated, write to me. I reply personally.

WhatsApp