A means of safely packaging software for use on a variety of systems since 2013.
"a platform that packages applications and their dependencies into portable containers, ensuring consistent performance across different environments."
—ChatGPT
There's an old meme in the tech support business that, when a customer reports a problem, the technician or developer tries to replicate the issue, unsuccessfully, and reports that "Well, it works fine on my machine!" Cue everyone's frustration.
Docker is a tool that makes it easier to run and manage software by packaging everything an application needs—code, libraries, and settings—into a 'container'. Containers are like lightweight, portable boxes that work the same way on different computers, whether it's a laptop PC, a server, or in the cloud. Each container is effectively immutable, cannot have change forced on it by any other system changes, so the application will always run in the same way.
Before Docker, setting up software could be tricky because different computers might have different system settings. Docker ensures that an app runs **consistently** everywhere, avoiding the classic "it works on my machine" problem.
It’s especially useful for developers, making it simple to test, share, and deploy applications without worrying about compatibility issues. Because containers are small and efficient, they also help save computing resources compared to traditional virtual machines.
Docker is one of those things that does something that looks simple, is in reality quite complex, but is pretty easy to use. Now, let's get a tad technical. It uses software virtualisation to create a software container that includes needed libraries and other software it depends on, isolating it all from the rest of the system. Avoiding the technical-speak, here's an explanation in the simplest possible terms:
Docker, then, is a means of "packaging up" an application in a box where you can put your applications and everything they need to run, like tools and settings. This box can be moved around and opened on any computer without changing how the app works. It helps you build, run, and share your apps easily, making sure they work the same way everywhere in a turnkey manner.
The way his is done also means that different applications are also held in separate containers, hence are isolated from one another, leading to better stability (i.e. they can't interfere with one another) and security (i.e. they can't even see one another!). Another advantage is scalability, that is, it's easy to spin up another "copy" of the software in its own container. This means that multiple copies can be created to cope with, for example, many users accessing an application on a server.
End-users have a choice in how they deploy applications in a container; they can either create their own setup, or, more simply, download a complete image from the Docker Hub. These are pre-packaged and tested applications and utilities that can be downloaded and easily run on a user's own machine. Managing Docker containers is also made easier by projects like Kubernetes, which can intelligently manage many containers, including carrying out load balancing for when the going gets really tough.
$ xclip -o | wc -w
514