s. Contain- ers that run on the same engine share the same Linux kernel of the host server and are executed by Docker engine rather than hypervisor. Containers are much smaller in terms of size than virtual machine and have shorter start-up time. Therefore, Docker containers are consid- ered as the agile and lightweight solution. While the lightweight os solutions have existed for a few years, Docket container [21] is the one that leads to the mass adoption and the hype around containiza- tion. Docker container was initially designed as a Go language building runtime. Today, the Open Container Initiative builds the ecosystem around Docker container. Recently, a container standardization is dis- cussed, and a runtime implementation is produced, called runC [22]. Figure 2.3 shows the architecture of container. Compared to the traditional VM architecture in Figure 2.2, the container does not have the per VM guest OS, which is usually tens of gigabytes. Each VM instance has a full guest os image in addition to the binaries and libraries needed for the applications. It usually leads to high memory 2 Virtualization and Cloud Computing Figure 2.3 Docker container architectures. Libraries Libraries Host operating system Hardware and disk utilization and thus a slow start-up time. In contrast, in container, each application runs as an isolated process in user space on the host operating system, sharing kernel with other containers. Each application is usually on the order of megabytes, which is of much lighter weight. Therefore, container is a much more portable and efficient solution than VM. The resource isolation benefits are still provided by the host OS. Thus, container is a much lightweight virtualization concept. The main technologies behind container are namespace, control group, and union file system (UFS). Each container runs a set of namespaces, which provides the isolation. Each container can only access its own namespaces. The control group is used to set up access control to hardware resources for each conta