Docker Containers Are Not a Deployment Strategy

Written by

in

Docker makes it easy to start another service. That convenience is useful right up until the host has dozens of containers and nobody can answer basic questions about ownership, storage, networking, or recovery.

Containers solve process packaging. They do not decide where a service belongs, how it should be exposed, what data it owns, or what happens when the host disappears.

Give every service an owner

For each container, I want to know which stack or role owns it, where its persistent data lives, which networks it joins, and how it is updated. If the answer is “I started it manually a while ago,” the container is already an operational liability.

Separate disposable state from important state

The image and container are usually replaceable. The mounted data may not be. Keeping that distinction explicit makes upgrades safer and prevents a container rebuild from being confused with a data restore.

Networking is part of the application

A service can be healthy inside Docker and still be unavailable to its users. Names, proxy routes, certificates, firewall rules, and upstream dependencies all sit outside the container. A deployment is not complete until those relationships are documented and tested.

Why I use Ansible around Docker

Ansible gives the stacks a place to live and a repeatable way to configure the host around them. It can establish directories, permissions, environment files, networks, scheduled maintenance, and the services that must exist before Docker starts doing useful work.

This does not mean every container needs a complicated deployment pipeline. It means the important decisions should be reviewable and recoverable.

A small review checklist

  • Can the service be recreated from documented configuration?
  • Is its persistent data backed up independently?
  • Does it need public, private, or no network exposure?
  • What other service or DNS name does it depend on?
  • How will an update be rolled back?

Docker is still the right tool for many of these workloads. The mistake is treating the container runtime as the entire operating model.


Current as of September 2026. Examples intentionally omit private hostnames and service addresses.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *