Docker is one of the tools that revolutionized how we deploy applications and how we also distribute them.

It’s also a technology in high demand and high consideration, loved by the vast majority of its users, and it’s a great skill to have in your curriculum.

Using Docker we can create a container that will wrap an entire application.

More than that: it can wrap entire applications, and it can be saved to an image to be easily replicated.

Replication is the key term here. Using Docker we can create an isolated environment that runs in your computer, in your clients computers, on your server, anywhere, and it will use specific versions of the software we want it to run.

This helps solve an entire class of problems that derive from misconfiguration and versions mismatching between different environments.

Docker is complex, but I think it deals with many complex topics, in a relatively user friendly way.

This is why “getting it” can remove a lot of complexity out of your life as a developer, both as a creator of software and as a consumer of software.

No more “but it works on my machine”. You don’t need to say that any more, and you don’t need to be told so any more.

We all know debugging is hard, and it’s super hard when something works on an all the environments you tested and it does not work in some weird configuration. There are simply too many moving parts.

Docker is also great for distributing a software you create but you don’t want to deal with the countless support requests that come from people trying to install it on all the possible Web servers and setups.

I know Discourse, the popular forum application, relies heavily on Docker. I can’t find the reference now but I’m pretty sure I read they only supported problems happening with installation running the official Docker image. I could be wrong here, but the idea does not sounds crazy: if you as a programmer can create an image that works anywhere you can deploy a docker container, then it’s something you as a user should definitely take advantage.

Another big benefit of Docker is being able to run multiple applications running different versions of the same stack, something that would be hard or at least confusing without a similar solution.

In the next tutorials we will introduce several Docker concepts and we’ll explore how to work with:

  • Docker Images
  • Docker Containers
  • Dockerfiles
  • Running containerized applications
  • How to use volumes to store data outside of a container
  • How to publish your images
  • How to run containers in the Cloud

and much more!