Ismail El Abbassi
Inception interface

Infrastructure · Docker2025

Inception

A containerised LEMP stack where every image is written from scratch.

No stock images

Every Dockerfile from a base

Nginx · TLS

Single entry point

Volumes

State outlives containers

Overview

A complete web infrastructure in Docker Compose: Nginx terminating TLS, WordPress on PHP-FPM, and MariaDB behind it, each in its own container. The rule that makes it worth doing is that you may not pull a ready-made application image — every Dockerfile starts from a bare Debian or Alpine base and installs and configures the service by hand.

That constraint turns a copy-paste exercise into a real one. You end up understanding what an entrypoint script is actually for, why a container that forks into the background dies immediately, how volumes outlive the containers that write to them, and why service startup order is a promise Compose does not make for you. The bonus tier adds Redis, an FTP server, Adminer, Portainer and a static site, which is where the networking between containers stops being theoretical.

What it does

  • 01Nginx terminating TLS on 443 in front of PHP-FPM, with WordPress and MariaDB publishing no ports at all
  • 02WordPress and MariaDB each built from a base image, configured by their own entrypoint scripts
  • 03WordPress held back until MariaDB reports healthy, through a Compose healthcheck rather than a sleep
  • 04Named volumes so database and site content survive a full teardown
  • 05A dedicated Docker network, with services addressing each other by name rather than by IP
  • 06Environment-driven configuration, with no credentials baked into an image
  • 07Bonus tier: Redis cache, FTP server, Adminer, Portainer and a static site
  • 08A Makefile that brings the whole stack up, down and back from nothing