Blog
Thoughts on engineering, design, and building great products.
Installing Docker and Running Your First Container
Install Docker for your OS, then run your first container and master the full lifecycle: run, ps, logs, exec, stop, rm. With a container state diagram and a cleanup section.
Images and the Layer Mechanism: Pull, Tag, Docker Hub
Where images come from and what they're made of: how to read an image name, the Docker Hub registry, layers shared across images, digests, and managing images on your machine with pull/images/tag/rmi/history.
Writing a Dockerfile and Build Cache
Build your own application image: the core Dockerfile instructions, each instruction creating a layer, and how the build cache works — why putting dependency installation before copying code makes builds much faster.
Volumes and Bind Mounts: Storing Data Persistently
Data in a container vanishes when the container is removed. This article fixes that: named volumes managed by Docker and bind mounts that attach a host directory directly, when to use which, with examples proving the data survives.
Networking in Docker: Bridge, veth and Port Mapping
How containers reach each other and the outside world: the network drivers, the default bridge and the veth mechanism, port publishing, and why a user-defined network lets containers call each other by name while the default bridge does not.
Docker Compose: Running Multi-Container Applications
Declare a whole multi-component app (web, database, cache) in one file, then run it with a single command. Understand the compose file, the auto-created network that lets services call each other by name, and the up/down lifecycle.
Optimizing Images: Multi-Stage Builds and Security
Large images slow down deploys and widen the attack surface. This article shrinks images with multi-stage builds (real example: 301MB down to 15.4MB), picks lean base images, runs non-root, and avoids baking in secrets.