Even if you didn't know precisely what Docker is used for or what DevOps is, you've likely seen all this mentioned in web development or even Drupal-related news.
First of all, if you don’t know or understand what DevOps is, it is basically shorthand for the term “development operations”. It is an area of thought, not necessarily an actual activity, centered around organizing best practices for the various processes that are typically considered the system administrator components of development work. This might encompass things like configuration of web server environments, or deploying code across various stages of a website.
Foremost of the issues that the DevOps discussion seeks to resolve it that problem of deploying new code and server environments in an efficient and consistent manner. While existing software tools like Vagrant, Puppet, Chef, and Jenkins help with this problem, Docker has arrived on the scene to take an existing technology (linux containers) and provide another way to tackle the issue.
Linux containers are an operating system-level of virtualization, essentially providing a method for running multiple self-contained instances of a Linux operating system within a single host. Another way of saying that is that Linux containers provide a way to run mini operating systems within your host Linux operating system. Unfortunately, understanding and working with Linux containers can be difficult, which is where Docker comes in. It’s a system for working with and managing these Linux containers.
So, why use Linux containers and Docker as opposed to the more standard virtual machines?
For one, the virtual machine software typically used by configuration management tools such as Vagrant, Puppet, and Chef often requires downloading and installing operating system images, which can be fairly large making them difficult to transfer and save. And owing to their significant CPU and memory footprint, virtual machines can take a long time to boot up when operating them. These kinds of issues are not as big of a problem with Linux containers.
If you’re looking to get started using Docker, than you shouldn’t have much trouble finding a tutorial on how to do so with a simple Google search. You can get started with the documentation on the Docker website as well, it’s quite thorough, or use their handy emulator tutorial to get a first hand look at the setup process.
Before you become too invested with incorporating Docker into your team’s workflow, you might want to fully consider if there will be significant efficiencies to be gained for your specific circumstances.
Using the latest tools and best practices are usually a good idea, but they don’t always translate into more billable hours for your business.
For our team, the bottlenecks we experience in our workflow have less to do with provisioning and deploying development, testing, or production web server environments, but more often specifically the restaging the state of the development databases for our larger projects. When the databases are many gigabytes in size, using Linux containers isn’t going to speed up the SQL importing process.
So, long story short? Docker and the Linux containers that it manages are a great step forward to enhancing the DevOps space and deployment issues it seeks to solve. Just be sure, before you begin embarking on a week long process of retooling your development workflow, that the problems Docker can help you solve are actually the problems your team needs to fix.