What is Docker?
Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in. What is Docker?
A "dockerized" application is a collection of pre-configured Docker containers that completely encapsulates all the servers, configuration, and code required to run an application. The containers are portable: they run exactly the same way on everyone's computer, regardless of how their computer is set up (not exactly -- more on this later).
With Docker, you can develop, deploy, test and run the application much faster, therefore shortening the time needed between writing the code and running it.
Benefits of using Docker
Docker multiplies the effort of one person by the number of people who need to run an application. Only one guy (usually a senior developer) sets up the Docker containers at the start of the project; this could take several hours for some projects. Before Docker, we could spend hours setting up a development environment for every person who needed to run an application locally. On a project that involves two designers, two developers, and a project manager, that is a 5-fold reduction in on-boarding time, collectively.
Another great thing about working with a dockerized project is that its servers and configuration are under version control. In a perfect world, everyone agrees on servers and configuration at the start of a project, and that agreement is fixed until the project's conclusion. In reality, servers and configuration change all the time, for any number of reasons that can't possibly be known in advance. Fortunately, we can react to such changes by simply checking the adjustments into version control. This way, whenever a project is fetched from a Git repository, the most up-to-date servers and configuration take effect on the local development environment.
The Docker platform contains highly useful tools that enable rapid distribution of servers to everyone who needs them. Servers are created from "images", which are essentially templates from which containers are created (think of an image as a cookie-cutter, and a container as a cookie). Before Docker, we used VM images that took painfully long to download over a network connection; VM images larger than 10GB were not uncommon. Now we upload relatively small images to our private Docker registry, and they are small enough that our team can download them over the internet. A simple dockerized application's image footprint is less than 500 MB, and if we adopt bare-bones images like iron.io there are opportunities to make this even smaller.
Finally, Docker is open-source and completely free.
How it changed the way we work
Work faster (duh!): It takes no time to have a new person on board on a project. Instead of configuring the host machine for the application, deploying the Docker container is done in no time so people can work in a much more efficient way.
We can treat infrastructure like code. This means we can freely and more frequently update the server. Before Docker, we used to set up the server once and that was it. Modifying it could cause issues and mess with the whole project. With Docker, tweaking servers has become much more painless because we can test everything locally, then ship to production when testing is complete.
A few challenges remain
Change in the organization and process: Introducing Docker was not done overnight. A lot of efforts had to be put to get the company on board and change the development workflow. Familiarising with Docker also took quite some time for our developers.
Docker works flawlessly on Linux but unfortunately not on Mac or PC.
At IT Consultis, we like to explore new technologies. Although all the new things out there are not worth sticking with; we found in Docker a tool that has tremendously improved the way we work. It surely comes with its own challenges but compared to all the benefits it gives, we're still convinced Docker is a keeper.