Wikimedia Commons Today we will learn about Docker. This article is intended for beginners who are looking for a conceptual understanding of containers, why and how containers are being used, and Docker’s underlying high-level architecture components. In this Docker tutorial, I will cover a brief history of virtualization and container technology, and look at the Docker component architecture.

Key Terms and Definitions

Cloud Computing: On-demand availability of computing resources (CPU, memory, storage)/platforms/software. Cloud Native Approach: Technology strategy to consider cloud computing-based solutions as the first choice for application development. Hypervisor, Virtual Machine, Containers: Virtualization-related terminologies (explained in more detail in the next section). Docker Engine: A container engine technology (explored in detail throughout the tutorial). Kubernetes: A container orchestration technology (explored in this tutorial). RESTful APIs: Application Programming Interface (API) that uses RESTful protocol. Microservices: An architectural style that structures an application into a set of loosely coupled services. DevOps: Set of practices to break silos between development and IT operations, thereby optimizing overall development life cycle.

Hardware Virtualization and Containers

In simple terms hardware virtualization uses software (a Hypervisor) to create a layer on top of the hardware. This layer of hypervisor divides computing resources into multiple virtual computers. These are commonly called Virtual Machines (VMs). Each VM runs on its own operating system (OS), and to end-users, it appears as if they are using their own dedicated machine. Hardware virtualization (Figure 1) greatly improves the effective utilization of underlying hardware, thus providing organizations with a higher ROI on their hardware investment. Each VM requires its own full-blown operating system making them heavyweight. Containerization takes this concept a step further. As opposed to a hypervisor, a Container Engine (Figure 2) enables applications running inside a container to share resources of the host OS. Thus, making them very lightweight and provide an even better hardware utilization when compared to Virtualization.

What Is Docker?

There are several container engine technologies that exist in the market, but Docker Engine by far is most popular, so much so that words Docker and “containers” are at times used interchangeably. Docker website defines the Docker container platform as follows: So, without further ado, let’s deep dive into the components of the Docker platform to get a better appreciation for it.

Docker Component Architecture

Docker platform uses client-server architecture (Figure 3). Docker client talks to Docker server using Docker APIs. The client sends commands to the server, and the server executes these commands. Below are some examples of Docker commands. Let’s look at each of the above architecture components in detail.

1. Docker Server

Docker server is the host which is running Docker Daemon. The Daemon listens for request commands coming from Docker client and executes them. The Docker client and daemon communicate using Docker APIs, which are nothing but RESTful APIs. In addition, to this, the Docker daemon also manages Docker Objects—images, containers, etc.

2. Docker Client

Docker client is what you will use to interact with Docker daemon. The client’s command-line interface (CLI) can be installed on your local machine and it interacts with one or more Docker daemons. The docker commands that you type on the CLI are sent to the Docker host where the Docker daemon listens and executes them.

3. Images

An image contains a set of instructions along with all dependencies that an application requires to run in a container. In this sense, images are templates to create containers and hence one or more containers can be created using the same image. An image is created by building a Dockerfile. A Dockerfile is a text file that contains a set of steps/commands required to assemble an image. The build command builds an image from Dockerfile. You can either create your own image by writing and building a Dockerfile, or you can pull an image built and published by others, from the Docker Registry.

4. Docker Registry

A Docker Registry is a store for Docker images. When you run the push or pull commands on CLI, Docker daemon pulls an image from, or pushes an image to, a configured registry. Docker Hub is a public repository of images and Docker by default looks for images on Docker Hub. You can also create and configure your own private registry. Following commands are executed on the CLI to pull or push docker images.

5. Containers

A container is nothing but a running instance of an image. Containers are managed by the Docker daemon. You can interact with the containers by running commands on the CLI.

Benefits of Docker Containers

Containers can enable businesses and IT teams to reduce the overall time to market i.e., the time taken from ideation to realization of a software application. Including Docker container technology into your architecture may result in the following benefits:

Final Thoughts on Docker

Introducing Docker containers into your architecture is just like adding any new technology component. Thus, in addition to the benefits, one must also be aware of the complexities that it will add to your architecture and the development process. Teams planning to use Docker containers must be prepared to address the below-mentioned concerns.

Exponential Growth of Containers

Given the nature of container technology, the number of running Docker containers can grow exponentially very fast. Hence additional tooling will be required for Docker container orchestration, management, monitoring, etc. Several tools exist in the market to address these concerns, namely Kubernetes, Apache Mesos, Nomad, etc. Adequate planning & research must go into selecting the right tool and adding it to your deployment and operations architecture.

Upskilling

Developing distributed microservice applications deployed on containers will require upskilling of development, testing and operation teams. A training curriculum and investment plan must be put in place to upskill your resources.

Security Risks

Strategies have to planned and developed to overcome security risks such as:

DevOps

Containerization will be more valuable only if you implement a DevOps mindset. DevOps is a much larger topic and beyond the scope of this tutorial. DevOps practices will require both cultural and technology changes to be introduced within your teams. This brings us to the end of this post. In this tutorial I have provided a similar coverage to Kubernetes. Happy reading and learning.

Additional Resources

Empowering App Development for Developers | DockerLearn how Docker helps developers bring their ideas to life by conquering the complexity of app development.What is virtualization? | Opensource.comLearn the basic principles of virtualization and how it is used in computing in this handy resource.What is Virtualization? | IBMAn introduction to virtualization, which allows for more efficient utilization of physical computer hardware and a greater return on hardware investment.What is Docker? | IBMLearn more about Docker, an open source platform for building, deploying, and managing containerized applications.Kubernetes Vs Docker | Sumo LogicKubernetes vs. Docker. Learn about the differences between Docker and Kubernetes, as well as how, and which to implement for your ecosystem.Getting started with Docker and Kubernetes: a beginners guideDocker and Kubernetes have revolutionized the way we develop and deploy applications at scale. It’s best to get started with them now.Kubernetes vs. Docker: A Primer - Container JournalThe question, “Kubernetes or Docker?” in itself is rather absurd, like comparing apples to oranges. But they have a symbiotic relationship.

This article is accurate and true to the best of the author’s knowledge. Content is for informational or entertainment purposes only and does not substitute for personal counsel or professional advice in business, financial, legal, or technical matters. © 2021 Manhar Puri

A Beginners Guide to Containers and Docker - 28A Beginners Guide to Containers and Docker - 9A Beginners Guide to Containers and Docker - 76A Beginners Guide to Containers and Docker - 93A Beginners Guide to Containers and Docker - 11A Beginners Guide to Containers and Docker - 67A Beginners Guide to Containers and Docker - 88A Beginners Guide to Containers and Docker - 46