Let me start by saying this is absolutely not a Docker bashing article. I actually love Docker, and I think it is an outstanding piece of software that will have great success. But I have to confess, I’m not sure that it deserves the virtualization moniker that so many in the industry are hanging on it.
Now before you start rounding up a virtual posse to excoriate me in the comments section for blasphemy, or heresy, hear me out.
First of all, I think, it is important to realize that often times in technology, especially leading edge technologies, it can be difficult for everyone to agree on a common definition of most any word. This is especially true in the cloud and virtualization vernacular. Generally speaking, for me, and for the context of this discussion, virtualization refers to the abstraction of a service(s) provided by an entity so that it can be consumed in a manner consistent with what the consuming entity expects, regardless of the characteristics of the entity providing the service. Or to say it in another manner: virtualization is the act of isolating the consumers of a service from the providers of a service in such a way so that each can maintain their native manner of interaction. This abstraction can be through simulation, emulation, translation, or another means, but the key function is making something, appear as something else, so it can be used.
For example, a hypervisor allows multiple discrete operating systems to consume a single physical server by abstracting the services provided by the server (CPU, Memory, Disk, etc) in such a way, that each operating system is oblivious to the true underlying characteristics of the server. It is that key functionality, of abstracting services, that Docker is lacking that stops me from bestowing the title of virtualization to it.
Many of you may very well be thinking right now, "Docker does provide virtualization to applications. It virtualizes the operating system for them." My response is to submit, respectfully, that Docker doesn’t actually abstract or virtualize anything. It is a software package that manages several, normally discrete, Linux features, in a manner so that they all work cooperatively to provide a given functionality. Docker, unlike say a Hypervisor, doesn’t isolate away or abstract services to a consumer. Docker, not so simply, serves as a conductor to orchestrate all the various services together and have them work cooperatively. It is even valid to go so far as to say that Docker isn’t a required component of providing the service that the application consumes.
Now having said that, I should add that even though I feel like I’m a fairly advanced administrator, I could not even imagine taking on the tasks that Docker performs in manual process. It is simply too daunting of a task, due to the plethora of dependencies, lack of understanding all of the features being used, and lack of robustness in the management tools. To those that would offer "Just write a script," I would respond with "Why, when Docker does it for us?"
Docker really is, in my opinion, a great piece of software. I will confess that I haven’t reviewed the code, I’m not a developer. My job, if you will indulge an oversimplification, is to make things work. Docker does that, and it seems to do so in a very efficient, logical, and productive manner. I am very excited about the future of Docker and how the functionality (or services) that it orchestrates will impact not only development, but also operations and engineering teams within an organization.