Imagine a world where most servers run Linux.
A little bit of chaos
In this same world (the real world), developers build software on personal computers that run many different operating systems – Mac, Windows, wacky new forks of Linux.
For developers to deploy their software, someone must SSH into a server, install dependencies, run their software, expose ports for others to connect and up things updated.
This introduces major problems – two in particular
- Isolation issues: When multiple developers install dependencies on a shared server, any command or installation runs the risk of conflict. Library dependencies overwrite others, environments change and programs silently fight for computer resources.
- Reproducibility issues: Each developer computer is unique – with a different OS and custom bash_profile, zsh_profile setup so code running on the computer may break when deployed to the server.
Docker, and containerization more broadly, addresses the chaos
Imagine a new world. Developers write and run their code in the exact same linux environment that the sever will use – no matter whether they are running PC, Windows or Hannah Montana Linux. Yes, this means if you have a Mac, you are running a tiny linux distribution while developing.
You know the phrase: “If you want something done right, do it yourself”. Well Docker is “doing it itself”. A file called a “Dockerfile” defines the entire setup and Docker uses this file to build an “image” which includes all your code, runtime, dependencies and environment setup – no more SSH-ing into servers to “run a quick command on a Friday afternoon to take down the whole server”.
From VMs to Docker:
Cloud services like AWS began to host powerful servers and rent out access to the machines. They achieved this with virtual machines (VM) which allowed a developer to have a space on the machine to run their own operating systems. This is useful to kickstart cloud computing but it was highly inefficient because most servers run linux, and everyone was reinstalling and hosting Linux in their VM.
So docker was born. Docker uses Linux containers to allow for a machine to host multiple lightweight isolated applications (or “containers”) share the same Linux kernel.
Next: https://theptrk.com/2025/07/04/docker-beginner-tutorial/