What are containers?
The industry standard today is to use Virtual Machines (VMs) to run software applications. VMs run applications inside a guest Operating System, which runs on virtual hardware powered by the server’s host OS. VMs are great at providing full process isolation for applications: there are very few ways a problem in the host operating system can affect the software running in the guest operating system, and vice-versa. But this isolation comes at great cost - the computational overhead spent virtualizing hardware for a guest OS to use is substantial.
Containers take a different approach: by leveraging the low-level mechanics of the host operating system, containers provide most of the isolation of virtual machines at a fraction of the computing power. Containers offer a logical packaging mechanism in which applications can be abstracted from the environment in which they actually run. This decoupling allows container-based applications to be deployed easily and consistently, regardless of whether the target environment is a private data center, the public cloud, or even a developer’s personal laptop. This gives developers the ability to create predictable environments that are isolated from the rest of the applications and can be run anywhere. From an operations standpoint, apart from portability containers also give more granular control over resources giving your infrastructure improved efficiency which can result in better utilization of your compute resources.
Due to these benefits, containers have seen widespread adoption. Companies like Google, Facebook, Netflix and Salesforce leverage containers to make large engineering teams more productive and to improve utilization of compute resources. In fact, Google credited containers for eliminating the need for an entire data center.
More information for containers and Docker, as well as how to use Docker can be found on Docker for Beginners.
Docker
Docker Engine
Use the following guide to install Docker Engine on Ubuntu: https://docs.docker.com/engine/install/ubuntu/
Docker Desktop
Docker Desktop enables developers to locally build, share, and run containerized applications and microservices. Docker Desktop includes Docker Engine, Docker CLI client, Docker Build/BuildKit, Docker Compose, Docker Content Trust, Kubernetes, Docker Scan, and Credential Helper. Docker Desktop is for Mac and Windows and includes the Docker Dashboard for working with local and remote container images, Dev Environments and more new features are being delivered every month such as Volume Management.
Use the following guide to install Docker Desktop on Ubuntu: https://docs.docker.com/desktop/install/ubuntu/
Quick Start Guide
Once Docker Desktop is installed, the Quick Start Guide launches. It includes a simple exercise to build an example Docker image, run it as a container, push and save the image to Docker Hub: https://docs.docker.com/desktop/get-started/
Docker for Beginners
A nice tutorial for Docker beginners can be found on Docker for Beginners.
Linux containers
Linux-vserver and OpenVZ are two pre-existing, independently developed implementations of containers-like functionality for Linux. In fact, containers came about as a result of the work to upstream the vserver and OpenVZ functionality.
There are two user-space implementations of containers, each exploiting the same kernel features. Libvirt allows the use of containers through the LXC driver by connecting to lxc:///. This can be very convenient as it supports the same usage as its other drivers. The other implementation, called simply ‘LXC’, is not compatible with libvirt, but is more flexible with more userspace tools. It is possible to switch between the two, though there are peculiarities which can cause confusion.
Use the following guide to install LXC on Ubuntu: https://ubuntu.com/server/docs/containers-lxc
Containers orchestration
Kubernetes
In the Kubernetes Documentation Webpage, you can find tutorials related to understanding, using, setting up a K8s cluster, etc.
Another interesting tutorial can be found on: https://www.guru99.com/kubernetes-tutorial.html and on https://www.redhat.com/en/topics/containers/learning-kubernetes-tutorial