Aparx Logo
DevOps & Infrastructure 7 min read • Sep 29, 2026

Zero-Downtime Deployments with Docker, Blue-Green Pipelines & Health Probes

Step-by-step engineering architecture for zero-downtime deployment pipelines. Learn how reverse proxies, container health checks, and database migration locks eliminate user disruptions.

AO
Aparx Cloud Systems Lab
Aparx Software Engineering
Advertisement

In enterprise B2B software, maintenance windows that bring systems offline are unacceptable. If an employee in London is generating an invoice while your deployment script restarts PHP-FPM or Nginx, that transaction will abort with an HTTP 502 Bad Gateway.

Zero-downtime deployment is the practice of transitioning live user traffic from an existing release (Blue) to a newly verified release (Green) with zero dropped HTTP requests and zero perceived latency.

The Architectural Blueprint

+--------------------------------------------------------------+
|                Zero-Downtime Traffic Switch                  |
|                                                              |
|   Incoming Traffic ---> [Nginx / Traefik Reverse Proxy]      |
|                                 |                            |
|                 +---------------+---------------+            |
|                 |                               |            |
|                 v                               v            |
|        [Container Blue: Active]       [Container Green: New] |
|        (Serving Live Traffic)         (Running Migrations)   |
|                                       (Passing Health Check) |
|                                                 |            |
|                 [Switch Reverse Proxy Traffic] <+            |
|                 [Drain & Terminate Container Blue]           |
+--------------------------------------------------------------+

Implementing Backward-Compatible Database Migrations

The hardest challenge in zero-downtime deployments is not the web server—it is the database schema. While Green is starting up, Blue is still servicing user traffic against the exact same database.

Follow the Expand and Contract rule for migrations:

→ Never drop a column in the same release that removes application references to it.
→ Never rename a column directly. Instead:

- *Phase 1 (Expand)*: Add the new column; write to both old and new columns via model observers.

- *Phase 2 (Migrate)*: Backfill historical data in background queue chunks.

- *Phase 3 (Contract)*: Deploy code that reads exclusively from the new column; safely drop the old column in a subsequent release.

Docker Healthcheck Integration

Your reverse proxy must never route traffic to a container until application caches, view templates, and database connections are confirmed ready:

HEALTHCHECK --interval=5s --timeout=3s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1

By ensuring that the health endpoint checks database ping, Redis queue readiness, and writable storage paths, faulty releases are caught automatically before a single live user is routed to them.

Advertisement

Need an Enterprise System Built?

From offline-first mobile apps to full-scale SaaS platforms, our team can engineer your solution.