At this point, I think it’s fair to assume that you’ve read or heard about the generic description of Docker at least once: an open, lightweight container virtualization platform with workflows and tooling that help manage and deploy applications. It is also likely you used some terminology that you don’t fully understand in watercooler conversations with your colleagues, where you discussed the awesomeness of containerization and how your company is being “uncool” for not adopting Docker the next day. In this blog post, I’ll be covering some broad topics you need to be aware of when talking about Docker adoption without going too much into the technical details.
1. Docker is a DevOps Enabler, Not DevOps Itself
The goal of DevOps is to demonstrate value to your clients by creating the shortest sustainable lead time between planning and delivery of new features, improvements, and fixes from a ‘months and years’ timescale to ‘weeks and days’ timescale with frequent production deployments. To achieve this goal your organization needs to perform highly advanced techniques that have been pioneered by tech giants. This is easier said than done. There’s a lot of inherent friction in any given IT organization that stems from technological limitations and cultural differences. A step-by-step approach is required to reduce IT friction by first automating, then containerizing, and finally cloud enabling your IT infrastructure. If you can move wholesale to AWS or Azure — great! — Docker will close the gap between far-off servers and developers and if you can’t move to the cloud, Docker provides Enterprise solutions to build your own private cloud.
Using Docker, developers can support new development, enhancement, and production support tasks easily. Docker containers define the exact versions of software in use, this means we can decouple a developer’s environment from the application that needs to be serviced or enhanced. Over time as software versions change and vary, all a developer needs to do is dock a container to their environment, so they can easily work on the task at hand without having to install/uninstall software or deal with multi-gigabyte VM files. Meanwhile, new development can utilize the most effective modern tools for the job, and a high level of confidence in delivery is established, because developers, testers, and production environment will use the same exact configuration, which will help maintain ‘weeks and days’ timescale production deployments. This is why Docker is a DevOps enabler.
2. Without Pervasive Automation, Docker Won’t Do Much for You
You can’t achieve DevOps with bad code. You must first ensure that the code being delivered is of the highest quality by automating all developer code delivery tasks, such as Unit testing, Integration testing, Automated acceptance testing (AAT), Static code analysis, code review sign offs & pull request workflow, and security analysis.
You can’t achieve DevOps with snowflake servers. You must avoid manually configuring and deploying servers and enable push-button provisioning of your servers and code deployments to those servers. The intention of automation is to create an environment of transparency, reliability, and repeatability while shifting the focus of personnel to new value added tasks and away from mundane and error-prone activities. By automating Ops concerns we greatly reduce the likelihood of unpredictable failures that may occur in production. The long-term cost savings and time efficiencies gained with this approach can’t be overstated.
Only after automating development (Dev) concerns and operations (Ops) concerns can you hope to achieve DevOps.
3. Leapfrogging to Docker without Virtualization Know-How Won’t Work
Leapfrogging as an IT strategy rarely works. More often than not new technologies bring about abstractions over existing technologies. It is true that such abstractions increase productivity, but they are not an excuse to skip the part where we must understand how a piece of technology works. In the case with Docker, if your developers and operations personnel doesn’t have a solid understanding and practice in working with Virtual Machines, networking concepts, ports, firewalls and web server configuration then Docker will remain a mystery to most people. Instead of increasing productivity, you’ll end up creating a great weakness for your team.
4. Docker is a First-Class Citizen on All Computing Platforms
This is the right time to jump on to the Docker bandwagon. For the first time ever Docker is supported on all major computing platforms in the world. There are two kinds of servers: Linux servers and Windows servers. Native Docker support for Linux existed from Day 1, since then Linux support has been optimized to the point of having access to the pint-sized Alpine Linux OS. Native Docker support on Windows could not happen without Microsoft’s full cooperation. Amazingly enough in a short time period, Microsoft built native Docker support into Windows Server 2016, in tandem with the comparatively tiny footprint no-GUI Windows Core servers needed for optimal Docker operation.
Now developers who are on Linux, Mac, and Windows can develop, test, and deploy Docker images directly in their own environments without being slowed down by slow and space-occupying virtual machines. AWS and Azure cloud platforms both offer native Docker support to be able to conveniently upload, host and scale Docker images created by developers.
5. Agile is a Must to Achieve DevOps
DevOps is a must to achieve Agile. The point of Agile is adding and demonstrating value iteratively to all stakeholders without DevOps you likely won’t be able to demonstrate the value you’re adding to stakeholders in a timely manner. So why is Agile also a must to achieve DevOps? It takes a lot of discipline to create a stream of continuous improvement and an Agile framework like Scrum defines fundamental qualities that a team must possess to begin delivering iteratively. Focus, courage, openness, commitment, and respect are core values that are essential to kick start the DevOps engine, but most importantly they are crucial in sustaining the DevOps engine.
Docker is an amazing piece of technology with a level of broad industry adoption that hasn’t been seen for a new piece of technology in more than a decade. Docker makes it easier to adopt DevOps in your organization. DevOps and Agile together ensure that the investment you’ve made so far is protected because the new features/functionality you’ve developed have been delivered to the users and their impact is not lessened by any mean. Your organization may never get to implement the next step of their grand plan, or priorities may change quickly leaving development teams and software projects high and dry.
Docker, DevOps, and Agile are the best kind of insurance policy you can invest in for your project.