(Update) We’ve released new training material on Docker, including the Cloud Academy’s Docker in Depth Learning Path. This learning path is designed to teach you all about Docker starting from the individual container and progressing to the continuous deployment of an application in AWS. The Learning Path comprises of video Courses, Hands-on Labs, and Quizzes to test your skills. Visit the Cloud Academy’s Training Library for all our latest content on Docker.
Containers, and in particular Docker-based ones are the Big Thing everybody talks about and works with these days, and in fact, we frequently get questions about getting started with Docker. Many people and companies really take it to the max and try to do everything in them including tasks which in the past you had only considered full VMs for, like untrusted third-party tenants. Pretty much everyone uses docker or LXC now to deploy workloads, run CI tests, or even to have an insulated environment to develop applications with a specific set of libraries and a dedicated configuration. This is especially convenient when you want to share that all across multiple computers or with your colleagues.
So, what is this Docker everybody is talking about and how can you take advantage of it?
What is Docker?
We have a great course – What is Docker? and its first lecture is all about the question “What is Docker?”. The course goes in deep details about this wonderful open source software and the logic behind it. Nevertheless, Docker is basically a wrapper around Linux Container, another old software to create containers on Linux, as you might easily imagine. Actually, the latest versions of Docker are using a brand new library instead of LXC, but it’s a change under the hood with no impact on high-level functionality.
Since it exploits LXC (or this new container library), Docker containers are built on top of facilities like cgroups and namespaces provided by the Linux kernel, so they are not traditional virtual machines and do not require a separate operating system. Instead, they use those kernel’s functionality to completely isolate the application’s view of the operating system. So resources are confined, services are restricted, multiple containers can share the same kernel, but each container can be constrained to only use a defined amount of resources such as CPU, memory and I/O. If you add the fact that a Docker container can start in a handful of milliseconds, you probably now understand how cool the whole thing is.
Using Docker to create and manage containers makes it easier to create highly distributed systems by allowing multiple applications, worker tasks, and other processes to run autonomously on a single physical machine or across a spectrum of virtual machines. And that’s why Docker is finding its heaven in the Cloud, where a lot of providers, and especially tier-1 players like Amazon, Google and Microsoft are devoting some of their resources to add compatibility and support for Docker.
Getting started with Docker
Despite the huge complexity hidden under the hood, getting started with Docker is quite easy, also thanks to it Git-style syntax. If you are familiar with that VCS, and you probably are if you are interested in Docker, you will see many concepts shared among the two. The base to get a Docker container running is by starting an image containing all the files and settings and everything is needed to run the container. I won’t spend any more seconds discussing all the details about the Docker syntax and usage, as it is well-explained both in the Getting Started with Docker course I already talked you about and in its followup Dockerfile course
The key factor here is that it’s quite easy to grasp the basic concepts of Docker and that helped a lot in making the difference about its huge spread. In fact, as we have just seen, Docker has not reinvented the wheel, rather it wrapped around an existing, solid and well-working technology adding a set of features that helped it make the big jump. Nowadays, Docker Inc. is a well-established startup, who raised more than 40 millions of dollars so far, and is seeing a larger and larger ecosystem growing around it. In fact, many hosting services were born to help developers deploy applications and Docker containers on the Internet
Docker hosting services
Indeed, Docker hosting services are among the first companies born in this ecosystem. These are *aaS services providing virtual machines to deploy Docker images and/or container to, sometimes with a good degree of customization of the underlying infrastructure. Sometimes, these services also add APIs or other software layers in addition to the standard Docker features, making them full-fledged PaaS services.
We already published a comparison among the 4 most important Docker services in another post, and I really recommend you to read it if you are interested in learning more about them. Sometimes, subtle variations among the various services available can make a huge difference according to your needs, so ensure to read that post thoroughly. Nevertheless, after we published that post, the top players in the Cloud world made their moves to enhance support for Docker on their respective platforms.
Docker support by Amazon, Google, and Microsoft
Amazon announced a brand new service built on top of EC2 during the latest re:Invent. Actually, everyone was expecting a move there by the giant of the Cloud world, given that its closest competitors had announced something similar already. This new service has been called ECS, that is EC2 Container Service, and is currently available as a preview. The initial focus of ECS is to address multi-container multi-host clustering, which aligns with customer requirements for high-performance and scale as they move their Dockerized distributed applications into production. Amazon already had some support for Docker in its Elastic Beanstalk PaaS service, but this one looks way closer to the Infrastructure level, and we expect it will provide huge flexibility to the needs of the developers. We are looking forward to running an extensive test about this service, and you can expect a deep review very soon.
On the other side, Google developed dedicated support for Docker long before AWS. There is a specific service to help getting started with Docker on GCP, under the name of Google Container Engine. It allows to deploy and run docker container on GCP virtual machines, paying just for the Google Compute Engine instances that you will provide for your containers and no extra costs. The interesting thing here is that at the core of this Google Container Engine service there is another open source software that Google is actively developing, that is Kubernetes. This is a cluster manager for containers that can schedule replicas across a group of node instances. A master instance exposes the Kubernetes API, through which tasks are defined. Kubernetes spawns containers on nodes to handle the defined tasks. Also, the number and type of containers can be dynamically modified according to need. It’s a very advanced technology, and I’m looking forward to seeing Google Container Engine out of the alpha, as they may introduce backward incompatible changes until the stable version will be released. Google is devoting a lot of efforts and resources to this project and is probably the most advanced platform with regard to Docker support.
Microsoft recently added support for Docker containers too. The initial support for Docker on Linux-based Azure VMs has been added in June, but that was just the bare minimum they needed to make Docker available to users. Last month though, they took this thing more seriously, and they announced a stronger commitment in the field. In particular, they announced the open sourcing of Docker Engine for Windows Server, support for the Docker Open Orchestration APIs, and the Federation of Docker Hub images in the Azure Gallery. Although none of them seems as interesting as the dedicated services provided by Google or Amazon, the fact that even a company like Microsoft is showing such a great interest for Docker confirms how important this software it is and how crucial the container technology has become.