An Introduction to Docker and Containerization

An Introduction to Docker and Containerization

For anyone taking a lookking to learn more about Docker and Containerization, this is a great place to start

What is Docker?

Docker is both, a brand and a technology. It was developed under the Open Container Initiative by Docker (the company, formerly known as dotCloud) when it virtually went bankrupt. Docker (the product) not only helped it raise funds, but also paved a way for its strong revival into the game. On a Linux platform, it allows an end user to run multiple containers out of which each container can hold a single application. In precise technical terms, when you run an application on an operating system, it runs on its “user space,” and every OS comes with a single instance of this user space. In Docker, every container has one separate user space to offer. What this means is that containers enable us to have multiple instances of user spaces on a single operating system. Therefore, in the simplest terms, a container is just an isolated version of a user space. That’s it!


How Is It Different From VMs?

Docker is different from a VM in the following ways:

  1. It’s very lightweight in comparison to a VM in terms of size and resource consumption. This is because a container is just the bare bones of an operating system. It contains only the most basic packages required for an OS to run.
  2. It takes less time to spin up in contrast to a virtual machine (it depends on the application that you’ll be hosting on a container, but usually, it’s just a matter of seconds).
  3. Unlike a VM, a container can run only one process and when that process stops out for some reason, the container expires, as well. You can apparently modify this behavior to have it run multiple processes, but with that, you lose the essential concept of “loose coupling” your components. Better stick to VMs then.
Core Constructs of Docker

A Docker-based environment consists mainly of the following things:


Docker Engine

This is the main component responsible for running workloads in the form of a container. You have three options to choose from: the Community edition, the Enterprise edition, and Experimental, the last of which shouldn’t be used in Production.


Docker Client

It comes equipped with the Docker Engine package in form of Docker binary, and by default connects to the locally installed Docker Engine. You interact with the Docker Engine using this client only.


Docker Image

A Docker image for a container is just what an ISO image is for a VM. A Docker image consists of multiple layers stacked on top of one another and presented via union mounts. Here, first layer (zero-indexed) is the base image, second is the application layer (like Tomcat or NGINX), and the third contains any sort of updates. When you start a container using an image, an additional layer gets added to it that is writable, whereas the rest of the layers are read-only.


Docker Repository and Registry

A repository is a place where the Docker images, by default, go when you push one. A repository is contained within a Registry, so these two are different things, so be aware. One well-known public Docker registry is Dockerhub.


Docker Container

A container, as explained above, is an isolated version of user space, starting with using a Docker image. An important thing to note here is that unlike Linux systems where first PID is assigned to init or systemd, in a container, this PID is assigned to the command or service that it is supposed to run. When that process is dead, the container exits out.


How Does Docker Work?

While on a Linux-based OS, a container leverages existing Kernel features.


Name Space

Don’t confuse it with user space, as it’s different. Essentially, these namespaces are Network, PID, IPC, User, Mount, and UTS. They allow a Docker container to have its own view of Network, PID, hostname, users and groups, etc.


CGroups

CGroups, short for Control Groups, are what allow containers to have a reserved/dedicated amount of resources assigned to them in the form of CPU and memory.

Apart from these two (namespace and CGroups), Docker also makes use of storage drivers like AUFS, DeviceMapper, Overlay, BTRFS, and VFS. I won’t explain the difference between them and their features to keep this article as simple as possible. Just keep in mind that the default storage driver for Docker on an RHEL-type OS (like CentOS) is DeviceMapper, while on a Debian-based OS like Ubuntu, it’s AUFS.


What Do We Need to Run a Docker Environment?

At the very basic level you need the following two Docker components:

1.) A Docker Engine

2.) A Docker image (as appropriate)


How Do We Get or Create a Docker Image?

If you don’t have very specific requirements, you can just find and pull an image directly from Docker hub that fulfills your needs using Docker command line. For example, if you just need to run NGINX with default settings, you need not to compile your own image; just pull one from Docker hub. Remember, the higher the star count an image has, the more reliable it is. If you have specific requirements and need a custom image that’s not already available, then you can:

  • Pull a base image, run a container from it, do all the modifications as needed, and commit it as an image.
  • Create a Dockerfile and compile an image from scratch using it. Again, I don’t want to make this article too complex, so I will just give an overview of what a Dockerfile is.
What Is a Dockerfile?

A Dockerfile (case sensitive) is a plain text file where you write your instruction to create an image. These instructions are read one at a time, from left to right, top to bottom. These instructions may include terms like FROM, MAINTAINER, RUN, COMMAND, or ENVIRONMENT. You can read more about a Dockerfile from here, and while you try to gain more familiarity with it, just keep two things in mind:

  • The more RUN instructions you add (these are mainly meant to provision an image), the more layers get added to an image. Recall that an image is comprised of layers.
  • There can be only one COMMAND instruction per Dockerfile. If you add multiple, the last one will overwrite others.

Alright, let’s take a look how Docker commands look like.


Docker Command Examples

  • To pull an image from the default registry (Docker Hub) use: docker pull [NAME OF THE IMAGE] 
  • To run a container using the downloaded image run: docker run –d [NAME_OF_THE_IMAGE] [COMMAND]. By the way, this command will automatically pull an image if the specified one doesn’t already exist on the local Docker host.
  • —d parameter detaches you from the container and returns you to the host’s shell. Without a command, the container will exit out if one is not already specified in the image (hope you still remember that too).
  • To search an image from Docker Hub use: docker search [ANY_STRING] 
  • To view all the locally available images run: docker images 
  • To view just the running containers use: docker ps 
  • To view all the container run: docker ps –a 
  • To remove a container run: docker rm [CONTAINER_ID/NAME] 
  • To remove an image: docker rmi [IMAGE_NAME] 

I could go on and on and on but would prefer to stop here. For a full list of commands, go to the Docker command documentation.


How Docker Is Used in A Real World

You cannot run merely Docker as-is to handle your workloads, especially the production ones. You need to have a scheduling and orchestration solution in place for a containerized environment. Some of the most popular container orchestration solutions include:

  • Kubernetes from Google
  • EC2 Container Service from AWS (A managed service)
  • Mesos Marathon from Apache
  • Docker Swarm from Docker (mainly a host-based clustering solution rather than a container)

Which one you should use depends mainly upon your business and workload needs, and familiarity.

I’d prefer Kubernetes as it has been used by Google for over a decade and has probably gotten a bit more adept with working in a containerized environment, and because I’m more familiar with it. However, a business/organization runs as per its needs, and one should be ready to understand and respect that fact and work in accordance.


Thanks for reading

If you liked this post, share it with all of your programming buddies!

Follow me on Facebook | Twitter

Further reading

Docker and Kubernetes: The Complete Guide

Docker Mastery: The Complete Toolset From a Docker Captain

Docker for the Absolute Beginner - Hands On - DevOps

How to debug Node.js in a Docker container?

Docker Containers for Beginners

Deploy Docker Containers With AWS CodePipeline

Build Docker Images and Host a Docker Image Repository with GitLab

How to create a full stack React/Express/MongoDB app using Docker

Originally published by Vikky Jitwani at https://dzone.com

What is the difference between Docker, Kubernetes and Docker Swarm ?

What is the difference between Docker, Kubernetes and Docker Swarm ?

What is the difference between Docker and Kubernetes? And Kubernetes or Docker Swarm? In my video "Docker vs Kubernetes vs Docker Swarm" I compare both Docker and Kubernetes and Kubernetes vs Docker Swarm.

What is the difference between Docker and Kubernetes? And Kubernetes or Docker Swarm?
In my video "Docker vs Kubernetes vs Docker Swarm" I compare both Docker and Kubernetes and Kubernetes vs Docker Swarm.

Kubernetes and Docker are not competing technologies. In fact, they actually complement one another to get the best out of both. In contrast, Docker Swarm is the comparable technology to Kubernetes.

  • 0:38 - Comparison Docker and Kubernetes
  • 1:40 - Docker and Kubernetes in the software development process
  • 2:42 - Kubernetes in Detail
  • 3:21 - Differences of Kubernetes and Docker Swarm

WordPress in Docker. Part 1: Dockerization

WordPress in Docker. Part 1: Dockerization

This entry-level guide will tell you why and how to Dockerize your WordPress projects.

This entry-level guide will tell you why and how to Dockerize your WordPress projects.

Kubernetes vs Docker

Kubernetes vs Docker

Linux-primarily based boxes to construct programs keeps developing, Docker Swarm vs. whilst both of that technology copes with containers, at a far better appearance, they're not absolutely competitors. Kubernetes and Docker operate at exclusive...

Linux-primarily based boxes to construct programs keeps developing, Docker Swarm vs. whilst both of that technology copes with containers, at a far better appearance, they're not absolutely competitors. Kubernetes and Docker operate at exclusive tiers of the stack, and you'll honestly use them together to form your packages higher.

Docker:

Docker as a platform revolutionized the manner software program become packaged. Imparting a sandboxed view of the working machine, it's delivered many benefits in constructing and going for walks programs. With Docker, the software is often constructed fast, deployed quickly, scaled rapidly, and run whenever, everywhere with minimal device resources. Being open supply, Docker fast exploded as classy for packaging and distributing containerized packages. But, because it developed, new problems arose. Those pretty specialized applications or popularly referred to as “containers” needed to be coordinated, talk, sequenced, treated for storage concerns, etc. this is often wherein Kubernetes Certification came along.

Kubernetes:

In the very middle, kubernetes may be a box orchestration platform. It facilitates running distinct bins throughout distinct machines, scaling up/down and including/getting obviate new packing containers as needed. It additionally distributes load among containers. because the new wave of utility improvement of building micro offerings has emerged, box orchestration and control have come to be an important part of them. Docker understood this rapidly and released their very own box management carrier, Docker Swarm.

Kubernetes vs.Docker

Docker and Kubernetes can clearly paintings together. As far as control platforms go, you'll use both Kubernetes and Docker Swarm to your Docker engines. Kubernetes currently holds the foremost important marketplace percentage and is pretty tons an equivalent old platform. It works round the idea of pods, which may be scheduling devices (and may incorporate one or extra packing containers) within the Kubernetes ecosystem and they are allotted among nodes to supply high availability.

It has a gain of the usage of years of research accomplished by way of Google, therefore leveraging the expertise. Being open-source, it's a vibrant, growing community with many useful resources, and steerage to be had for everyone searching.

It can run on either a public cloud carrier or on-premises and is straightforward to research and put effectively. Docker Swarm has the advantage of tightly incorporated into the Docker surroundings and makes use of its personal API. Its filtering and scheduling system permits the choice of highest quality nodes during a cluster to installation bins.

As it is evolved by means of Docker itself, Docker Swarm gets obviate many compatibility and other variations and integrates smoothly. Kubernetes Training usually isn't an entire solution and involves custom plug-ins to installation. just in case you employ Docker swarm, these sorts of dependencies are addressed properly inside the environment, making found out and setup honestly smooth. However, Docker Swarm isn't notably used as Kubernetes. Subsequently, the community and guide round it aren't as expansive and handy to succeed in bent. Most cloud companies today offer Kubernetes as a service.

For more information about Docker & Kubernetes Online Training