Containerized applications are applications run in isolated packages of code called containers. Containers include all the dependencies that an application might need to run on any host operating system, such as libraries, binaries, configuration files, and frameworks, into a single lightweight executable.
The process of containerizing applications makes application development faster, more efficient, and secure by separating different functionalities from hardware dependencies and other pieces of software. Containers can run on any host operating system and are isolated from other software and hardware objects, making them versatile tools to build applications that can be built once and run anywhere.
From Google Search to YouTube and Gmail, everything at Google runs through containers. The open source platforms Kubernetes and Knative were developed at Google and are some of the most widely used tools to manage containers and applications.
Isolation
As each containerized application exists in an isolated environment away from other apps and system components, faults within the application won’t affect other applications or the local system, which can limit the scope of bug incidents.
Portability
Containerized applications operate independently of the operating system and thus can be ported to nearly any environment such as physical servers, virtual machines, or on a developer’s personal machine, or in the cloud.
Lightweight
Unlike virtual machines, containers do not carry a version of the operating system with them, which makes them much lighter and more efficient than other virtualization methods.
Efficiency
Containerization applications can share a machine’s computing kernel and resources, and application layers within a container can be shared across multiple containers. Containerized applications thus require less resources, allowing multiple containers to be run on the same machine or virtual environment.
Scalability
Additional container instances can quickly be added to handle increased application loads.
Containerized applications work by running an executable package of software (the container) that include all the application dependencies necessary for the app to run on top of a host operating system. The containerized application has several objects, including all the app components (for example, frameworks, libraries) which make up the container image, which is then run by the container engine. The container image is the blueprint or architecture of the container system. When the application is run, the contents of the image are copied into a container instance and can then be used in any number of containers within the application. Container images are created on an industry standard called the Open Container Initiative (OCI) that helps the shareability and compatibility of containers.
Container engines are the runtime environment for the container and are the platform from which containerized applications are executed. Container engines accept the commands to build, manage, and start containers through client tools. The most popular container engines are tools like Docker or CRI-O.
Orchestration tools are used to manage containerized applications, especially in environments with many containers. Orchestration tools, like Kubernetes, deploy, manage, and scale containers
Containers and virtual machines are similar in function, but containers tend to use less resources and are more flexible.
Virtual machines allow multiple applications and operating systems to share the resources of a single physical computer or server and run simultaneously (like Windows and Linux sharing the same computer). A virtual machine carries its files and dependencies, as well as its own copy of the operating system.
Containers do not carry a copy of the operating system like virtual machines do. Because of this, the primary difference between containers and virtual machines is that containerization uses compute resources more efficiently. The container runtime is instead installed on the computer or server’s existing operating system, allowing all containers to share the same operating system.
At the most basic level, containers come in two types: system containers and application containers.
Application containers are stateless solutions that typically run a single process. When we talk about containerized applications, they are running application containers where each container handles a process, with multiple containers orchestrated by a tool like Kubernetes.
Application containers abound in the market. Docker is considered the most popular, though there are several others. Open source development of containers is managed by the OCI.
System containers—also known as operating system containers—are older and function much like virtual machines, though without the same computing overhead. It behaves as a standalone system and does not include the container image or require specialized software. System containers were typically used in monolithic, legacy applications.
Below are some of the common engines and tools types of containerized applications:
The most popular open source platform for containerization. Docker enables the creation and operation of Linux-based containers.
The open source project of LinuxContainers.org, LXC allows an app to run multiple Linux systems simultaneously, using a single Linux kernel as the operating system.
Also known as Rocket, rkt is an application-based container engine that allows for fine-grained control of containers or as specific components within a Docker container system.
A Container Runtime Interface (CRI) for container management platform Kubernetes, used to enable OCI compatible runtimes. Often used as a replacement for Docker when using Kubernetes.
Start building on Google Cloud with $300 in free credits and 20+ always free products.