Docker
A container solution has various requirements—such as the isolation technology itself
to enable containerized applications to run in their own isolated namespace, which is
known as the container runtime and is provided by Windows Server. Another
requirement is the ability to communicate over the network, which is enabled through
virtual switches. You also need an entire toolset to develop and manage containers.
Initially, during the technical preview stages of Windows Server 2016, Microsoft had
two management approaches: its own native PowerShell-based management fabric
and Docker. This scenario, however, was complicated for users, as it led to two
container implementations with no real cross-management set interaction or
visibility. Thus Microsoft removed the native PowerShell management version of
containers and instead embraced Docker management fabric.
Docker is the de facto industry standard for container development and management
in the Linux world. Microsoft worked closely with Docker and the open-source
community to bring Docker to Windows in order to enable a consistent toolset and
management fabric across Windows and Linux. As you will see when the installation
of a container host is covered later in this chapter, Docker is a required component for
containers to exist on Windows. In fact, I believe that it’s the first time an in-box
feature has required external software to function.
At the foundation of Docker is the Docker Engine, a lightweight runtime and set of
tools for building and executing Docker containers. It has been updated to enable
execution on both Windows and Linux. Several components run on top of the Docker
Engine, including these:
Docker client to perform actions against the Docker Engine
Docker PowerShell, which executes against the REST API provided by the Docker
Engine
Docker Compose, a tool to enable the definition and running of multicontainer
applications
Docker Registry, which enables the storage and distribution of Docker images
Docker Swarm, which provides clustering capabilities to groups of Docker hosts,
enabling a single virtual Docker host that provides greater scale and resiliency
Docker Universal Control Plane (UCP), which enables a single management pane
of glass to manage thousands of nodes (container hosts managed by Docker) as if
they were one
Figure 10.3 provides a high-level overview of the way the various components fit
together to provide a complete container solution.