Docker sounds like a cool video game that one might have played in 1985 or a hair band from that same era. It’s not. It has something to do with containerization though.
Containerization can be thought of as putting merchandise from China into a shipping container bound for Los Angeles. But instead of widgets, it’s program material.
You pack the container with everything that is needed to run a program and create an image. That image is the container and that container is built (unpacked) by the client’s machine.
You can write in whatever language, in whatever environment and run it so long as the host machine has virtualization enabled.
Containers have been around for decades but they have been a very difficult technology to use.
Containers, however, use shared operating systems. This means they are much more efficient than hypervisors in system resource terms. Instead of virtualizing hardware, containers rest on top of a single Linux instance. This means you can leave behind the useless 99.9% VM junk, leaving you with a small, neat capsule containing your application.
Containers lend themselves to Continuous Integration/Continuous Deployment (CI/CD). This is a DevOps methodology designed to encourage developers to integrate their code into a shared repository early and often and then to deploy the code quickly and efficiently.
What Problem Does It Solve?
Docker seeks to make containers easy to use. It was first released in 2014 and since then, this open source technology has been embraced by software companies such as Oracle and Microsoft. Today, almost all IT and cloud companies have adopted Docker.
As open source, anyone can contribute to Docker and extend it to meet their own needs if they need additional features that aren’t available out of the box.
Docker is a tool designed to make it easier to create, deploy, and run applications by using containers that enable a developer to package an application with all of the parts it needs, such as libraries and other dependencies, and deploy it as one package.
Thanks to the container, the developer can rest assured that the application will run on any other Linux machine regardless of any customized settings that the machine might have that could differ from the machine used for writing and testing the code.
Docker enables developers to easily pack, ship, and run any application as a lightweight, portable, self-sufficient container, which can run virtually anywhere—instant application portability.
In a way, Docker is a bit like a virtual machine. But unlike a virtual machine, rather than creating a whole virtual operating system, Docker allows applications to use the same Linux kernel as the system that they’re running on and only requires applications be shipped with things not already running on the host computer. This gives a significant performance boost and reduces the size of the application.
A web developer can isolate code into a single container. This makes it easier to modify and update the program. It also allows for enterprises to break up big development projects among multiple smaller, agile teams using Jenkins, an open source CI/CD program, to automate the delivery of new software in containers.
In addition, Docker containers are easy to deploy in a cloud. As Ben Lloyd Pearson wrote in Opensource.com: “Docker has been designed in a way that it can be incorporated into most DevOps applications, including Puppet, Chef, Vagrant, and Ansible, or it can be used on its own to manage development environments.”
Who is Docker for?
Docker is a tool that is designed to benefit both developers and system administrators, making it a part of many DevOps (developers + operations) toolchains.
For web developers, it means that they can focus on writing website code without worrying about the system that it will ultimately be running on. It also allows them to get a head start by using one of thousands of programs already designed to run in a Docker container as a part of their application.
For operations staff, Docker gives flexibility and potentially reduces the number of systems needed because of its small footprint and lower overhead.
The fact that any Docker image can run on any machine running Docker is amazing. But the Docker pull and push are the first time developers and ops guys have ever been able to easily collaborate quickly on building infrastructure together.
The developers can focus on building great applications and the ops guys can focus on building perfect service containers. The app guys can share app containers with ops guys and the ops guys can share MySQL and PostgreSQL and Redis servers with app guys.
This is the game-changer with Docker. That is why Docker is changing the face of development for our generation. The Docker community is already curating and cultivating generic service containers that anyone can use as starting points. The fact that you can use these Docker containers on any system that runs the Docker server is an incredible feat of engineering.