Enterprise software is often ill fated for being conservative and impractical in terms of responding to changes. Whether you want to develop it as an engineer, deploy it as an IT specialist, or master it as a user, you are looking for a product that is fast, easy to modify when needed, and stable to the core—or, at least, this is true for some tools that can help with it.
Luckily for us, the invention of Docker back in 2013 made life a lot easier—and I don’t mean only for developers or IT specialists. While this article is mostly aimed at developers and IT specialists that, for some reason, are unfamiliar with Docker containerization but eager to introduce this technology to their enterprise’s IT environment, business decision makers will certainly also benefit from Docker implementation.
What is it?
Docker is an open-sourced tool designed to make it easier to create, deploy, and run applications by using containers.
Docker containers are small, portable, and easily controllable, start almost instantly, have their own built-in mechanisms for versioning and component reuse, and can be shared. They can be used with any technology stack, application, or service. That’s why Docker has become so popular and is used in the development and implementation of microservices.
Possible use cases
So, you are at the stage of deciding whether to implement Docker technology in your enterprise. Let’s see how and where Docker containerization technology is applicable. Docker is a container management system. It allows you to wrap up an application, microservice, or database engine with all its environment and dependencies in a container so you can easily manage (i.e., port to another server, scale, update, modify) it.
Initially, Docker worked only for Linux-based systems, but it can currently be used with Windows and MacOS. Still, Windows images run only on Windows OS hosts, and Linux images run on both Linux OS and Windows OS hosts (using Hyper-V Linux VM). By host, we mean a server or virtual machine (VM). During installation, Docker registers/hosts the needed VM (Docker host) to run containers using previously created images.
Docker containers vs VMs
Containerization is sometimes mixed up with virtualization, but these two concepts should not be confused. The figures below illustrate VMs and Docker containers, showing the difference between the structures of the two.
Containers run (load the memory) applications with all their dependencies. OS kernel resources are partitioned between containers running as isolated processes on the OS host.
VMs run applications with necessary libraries and full host OS. Full virtualization requires more hardware resources than containerization (up to 90%).
As containers require much less resources (for example, they do not require full OS), they are easy to deploy and launch. This allows you to run more servers on the same hardware unit, cutting costs for purchasing new servers and thus reducing operational and maintenance expenses.
On the other hand, VMs offer more app isolation than containers (which could be more important for regulated industries).
The main goal of container images is to provide the same environment and dependencies when deploying applications. This allows you to debug an application on the developer’s workstation and then ensure deployment of the same environment on another workstation.
Provisioning a VM still takes not only resources but also a fair amount of time. And, at the end of the day, most businesses today demand the portability of VMs.
Docker implementation benefits in a nutshell
Docker platform implementation in industrial corporations brings undeniable benefits. Here are some of them:
Fast deployment on test and commercial servers. There is no need to spend a lot of time setting the environment separately for development, testing, and on a commercial server. Containers ensure the same infrastructure in all used environments.
No more problems with infrastructure conflicts in different environments. This reduces related errors (the problem of “everything works on my machine but not on a commercial server”). All the necessary infrastructure is wrapped up in a container and deployed in any environment, including commercial. The end user host or workstation does not need additional components or dependencies.
Use any language or technology stack on the same server. It solves the problem of incompatibility of different technologies and version conflicts of the used libraries.
Headache-free updates. Containers can be upgraded in real-time without the reboot or outage of commercial servers. Keep your users, customers, and personnel happy and connected.
Simplified administration and version control support. You can easily port a container from one server to another. Every container allows you to launch multiple images, for example, at the peak load. You can easily update one or multiple containers. In case of issues, you can quickly rollback to a previous version.
Security increased with isolation. The problem of application security is solved, as containers are partially isolated from each other on the OS and processes level. Still, the container works on the same kernel that enables it to deploy rapidly. Deploying a hundred containers on a workstation won’t be an issue.
Cost saving. Docker containers allow you to run more code on every server, increasing efficiency and reducing expenses.
Automate to save time. Developers can write procedures for creating new images. That is, environment configuration code can be written and saved in the version control system.
I am a business decision maker. What could I get out of Docker implementation?
A good question, indeed. If you are not a developer or DevOps, and your business is not directly related to software services, why do you even need to know about Docker? You’ll be surprised to know how many enterprises with various market backgrounds are adopting Docker at a remarkable rate. A Datadog report on almost 10,000 customers showed that more than 35% of them adopted Docker as of Jan 2018, backed up by a Sysdig examination of 90,000 containers across North America, Latin America, EMEA, and Asia Pacific (~6,000 hosts) that indicated that 83% of them were using a Docker engine.
As an enterprise owner, you might face many challenges as your company grows, including ensuring all your teams and employees have fast, reliable access to unified or, on the contrary, unique team settings for corporate software resources. And you likely struggle to make workloads more portable and distributed in an effective, standardized, and repeatable way. Docker, and containerization, might be the answer to your prayers.
In business terms, the benefits mentioned above mean that (1) all your employees despite their whereabouts will get access to the exact same working environment (decreasing time and resources for tracking and deploying apps in each location or even workstation), (2) your IT department will deploy and handle issues faster with less effort and will significantly decrease time spent on unplanned work, (3) you will not be constrained to technology or hardware settings (which will also save you some money and resources), and (4) if you need your software systems or apps to be modified to suit business needs, it can be done faster and with less fuss (again, we are talking costs, time, and resources here).
But here comes the tricky part. Docker is not a silver bullet. It doesn’t meet the needs of every business. And it requires initial costs as well. It might increase some indirect costs, like those for training your IT team or recruiting new DevOps (some are pretty pricey on the labor market); require additional resources for configuration; and necessitate changes to your current hardware fleet or technology stack or hiring developers with the skills to modify in-house systems (or even change their architecture to microservices).
Does it mean the game is over if you don’t have proper developers onsite or time for hiring and training? Not at all. The trick is you will most likely need to find a reliable and knowledgeable service provider that can assess your business needs, check the infrastructure and environment in place, customize software, and train your personnel.