mirror of
https://github.com/cs341-illinois/coursebook.git
synced 2026-10-02 08:04:38 +08:00
28 lines
1.5 KiB
TeX
28 lines
1.5 KiB
TeX
\section{Containerization}
|
|
As we enter an era of unprecedented scale with around 20 billion devices
|
|
connected to the internet in 2018, we need technologies that help us develop and
|
|
maintain software capable of scaling upwards. Additionally, as software increases
|
|
in complexity, and designing secure software becomes harder, we find that we
|
|
have new constraints imposed on us as we develop applications. As if that wasn't
|
|
enough, efforts to simplify software distribution and development, like package
|
|
manager systems can often lead to headaches of their own, leading to broken
|
|
packages, dependencies that are impossible to resolve and other such
|
|
environmental nightmares that have become all to common today. While these seem
|
|
like disjoint problems at first, all of these and more can be solved by throwing
|
|
\keyword{containerization} at the problem.
|
|
|
|
\subsection{What is a container?}
|
|
A container is almost like a virtual machine.
|
|
In some senses, containers are to virtual machines as threads are to processes.
|
|
A container is a lightweight environment that shares resources and a kernel with
|
|
a host machine, while isolating itself from other containers or processes on the
|
|
host. You may have encountered containers while working with technologies such
|
|
as \keyword{Docker}, perhaps the most well-known implementation of containers
|
|
out there.
|
|
|
|
\subsection{Linux Namespaces}
|
|
|
|
\subsection{Building a container from scratch}
|
|
|
|
\subsection{Containers in the wild: Software distribution is a Snap}
|