As a NetApp Systems Engineer, I'm always on the lookout for new technologies my customers can take advantage of to accelerate their businesses. In his 2015 technology predictions, NetApp CTO Jay Kidd mentions a new and rapidly growing technology called Docker. "Docker replaces hypervisors as the container of choice for scale-out applications." I couldn't agree more.
My background is in virtualization, and I am active in the virtualization community. I've been a vExpert for two years, and Docker has been on my radar for a while. Last November, I took part in a 30-day blogging challenge (30 blogs in 30 days!) as part of an online virtualization community I help run called Virtual Design Master. I did a number of blogs on Docker during the challenge and since then have continued to focus on the topic, so I was pleased when Tech OnTap asked me to share my thoughts on the subject.
What is Docker?
Many of the current trends in technology focus on the abstraction of infrastructure from hardware. Docker is an open-source platform that takes this a step further by abstracting applications from the server operating systems on which they run. Rather than needing to stand up a virtual machine for each application, Docker runs applications in containers on top of a single operating system instance.
Lightweight containers can be run on any platform that supports the Docker Engine, which is the brain of Docker. The Docker Engine can run almost anywhere, from a Linux-based server in the data center, to a Windows-based laptop, to a cloud environment. Docker containers run in the same manner, regardless of the infrastructure. Docker's ability to run nearly anywhere provides a new level of abstraction for applications, making Docker a simpler way to build, ship, and execute distributed applications—enabling an organization to be more agile, to scale an application quickly and easily as needed, and to get to market faster.
Another key component of the Docker ecosystem is the Docker Hub, which is a centralized repository that stores Docker images for reuse and sharing within the Docker community. There are a number of official Docker repositories such as Ubuntu, mongoDB, and Java in the Docker Hub. These repositories make it easier for developers to get started with Docker, since they can pull an official image from the Docker Hub, modify it to meet their requirements, and upload the modified image back to the Docker Hub to make it easily accessible to teammates or to the Docker community.
Many developers have created prepackaged web servers with database and NoSQL environments in a single container or set of containers that can be leveraged by other development teams within an organization, or externally. As the popularity of Docker increases, software vendors may begin to provide their products in the form of containers.
There's also an enterprise version of Docker Hub for those who need to keep all Docker activities behind the firewall.
A Virtual Machine is Like a Container, Right?
Well, sort of. The Docker Engine is not a hypervisor like VMware ESXi; it can be run on top of physical hardware, in a virtual machine on top of a hypervisor, or on a cloud platform. A virtual machine has a specific configuration that includes an operating system and any other components that a specific application running in that virtual machine needs.
The key difference is that each virtual machine must have its own operating system installed. This means potential additional costs for things such as licenses, operating-system-specific configurations, and architectural dependencies.
The Docker container contains an application (or multiple applications) and shared resources such as binaries and libraries that the application needs to run. Imagine the efficiency you can achieve when every component of an application runs in a container on top of the same operating system.
When you put all of the components of an application into a container the container acts as a logical construct, ensuring the segregation of applications and workloads. This allows you to run a multi-tenant environment with multiple apps, without worrying about them stepping on each other.
Figure 1) A comparison of virtual machines and containers.
Source: NetApp, 2015
Docker and the Cloud
Whether you're running a hybrid cloud, a public cloud, or a private cloud, Docker fits into your cloud strategy by design. Many hyperscale cloud providers such as Amazon Web Services (AWS) support Docker. This is great for development, since you can easily spin up new environments in a matter of minutes for testing. Docker containers will run just as they do on a workstation or in the data center. A service like AWS can be extremely powerful for Docker developers.
Support for DevOps
Docker benefits operation teams as well. The application environment is supported the same way, whether it is running on premises or in the cloud, simplifying the management of dynamic applications.
Many organizations have begun to implement a DevOps methodology to further streamline their journey to market. Docker works with powerful classic DevOps tools such as Ansible, an automation engine. This allows you to integrate pre-existing and new development processes, delivering a powerfully automated infrastructure that can run anywhere.
Community projects are driving the development of orchestration and deployment tools for the Docker ecosystem. In addition Docker, Inc. has created Machine, Swarm, and Compose build and orchestration products for clustering and composition. Such innovation is just the beginning of an active Docker community creating tools to make Docker viable.
Provisioning Storage for Docker
Docker containers can leverage varying storage types in an easy-to-administer environment. There are two main ways to provide storage services for your Docker environment:
- Provision volumes inside a Docker container. New volumes can be created and mounted from within a Docker container. Or, volumes can be mounted to the Docker container from the host operating system on which the Docker Engine is running.
- Create a data volume container. Separate data volume containers are typically used in conjunction with nonpersistent Docker containers. For example, a scale-out application may utilize a data volume container to store persistent data so multiple Docker containers can be scaled out and scaled back as needed, without loss of data.
Docker and NetApp Clustered Data ONTAP
By now, it may have occurred to you that Docker and NetApp® clustered Data ONTAP® work in a similar fashion. Clustered Data ONTAP acts as an abstraction layer for storage hardware, including CPU, memory, and drives—whether the drives are SATA, SAS, or SSD. Storage virtual machines (SVMs) run on top of Data ONTAP, similar to the way Docker containers run on top of the Docker Engine. Each SVM can have its own namespace, making it easy to support a scale-out environment like Docker.
Data Fabric Extends Benefits to the Cloud
NetApp is extending the advantages of clustered Data ONTAP abstraction to the cloud with its Data Fabric approach. The simple cross-platform and cross-cloud management of Docker fits nicely into a Data Fabric powered by NetApp technology.
You can run Docker using FAS storage in your data center, and then move the entire environment to the cloud using NetApp Private Storage for Cloud solutions (available for AWS, SoftLayer, and Azure) or Cloud ONTAP (available for AWS) with no changes and perform all data management using the same tools in any location.
To learn more about deploying Docker in conjunction with clustered Data ONTAP, read the white paper, NetApp and Docker Technology to Enhance and Accelerate Dev/Ops in Hybrid-Cloud Environments.
Getting On the Docker "Container Ship"
The question you may be asking is, "When should I get on the Docker boat?" The answer depends on your business requirements. Docker allows you to enhance both development and deployment processes to deliver software faster and with higher quality. Many organizations get started with the Docker platform when they want to implement or upgrade an application.
Docker is surprisingly easy to deploy—from running Docker on your laptop, to running it on AWS. The open-source community behind Docker provides a wealth of information. You can even test Docker on its website using a simulator to get a feel for the basics. Integration into infrastructure components like Ansible, Azure, AWS, and OpenStack are testaments to Docker's rapid growth and popularity.
Docker and the move toward containerization of applications and services is a big shift for some companies. The great thing about this is that you aren't alone in your journey. Whether your development team is looking for more agility to deploy and test code, or your operations team is looking to ensure consistency across development, testing, and production environments, you have a potentially powerful use case for Docker. Now is the time to look at this new, innovative technology, which fits well with NetApp's Data Fabric vision.
Melissa Palmer blogs regularly on Docker, virtualization, cloud, and other hot technology topics. Her blog, vMiss.net: Secret Diary of a VM Girl, was recently named the best new vBlog for 2015 by vSphere-land.com. Go to vMiss.net for more information.