Docker and Containerization (text)
by
Sasha Shkrebets
—
last modified
Mar 06, 2023 01:19 PM
In this lecture I'll give a brief overview of containerization in Docker.
I'll talk about what containers are and why they're useful.
In fact, you've already seen one form of containers in this course already.
Mininet emulates virtual networks by connecting containers with
virtual tunnels.
Welcome back.
In this lecture I'll give a brief overview of containerization in Docker.
I'll talk about what containers are and why they're useful.
In fact, you've already seen one form of containers in this course already.
Mininet emulates virtual networks by connecting containers with
virtual tunnels.
Containers are an operating system level virtualization technology that makes it
possible to run multiple isolated systems,
often Linux, on a single underlying host operating system.
Unprivileged containers now allow users to run software on the host without
actually accessing the hardware.
One of the more prominent instances of containers is Docker.
But previous versions of containerization include LXC, OpenVZ, and Linux vServers.
Containers provide application developers and
service providers increased portability by allowing a development of an application
In a completely contained host environment.
Once an application developer gets an application running in
one containerized environment, the application can then be deployed in
any environment that can host that container.
Another benefit of containerization is isolation,
which allows application developers to deploy applications on shared hardware and
isolated name spaces and environments.
In contrast to virtual machines, which have not only applications and
binaries but also a guest operating system.
A container has only the applications needed to run the service for
that container and any dependencies that that application has.
The underlying host OS and the associated operating system resources are shared.
Making containers significantly more lightweight and
faster to load than virtual machines.
In comparison to virtual machines containers have lower overhead
due to the direct use of operating system system calls
as opposed to less efficient emulated calls.
They do have somewhat less flexibility than virtual machines.
Because the guest OS in the container must be the same as the host OS.
In contrast, a virtual machine can run a completely different operating system than
that of the underlying host.
The file-level copy on write semantics provided by containers also offers
easier backup and simpler caching behavior than many virtual machines provide.
Docker is currently used to deploy distributed applications, for
continuous integration and delivery of multi-tiered services, for
platform as a service deployments, and for application deployment.
Let's take a quick look at Docker in action.
The Docker website provides detailed instructions.
For how to install Docker on a variety of host operating systems.
Once you have Docker installed you can use the Docker run command to fetch and
run a container.
In this particular example I've asked Docker to
run a container with the latest release of Ubuntu.
Since I didn't already have the image installed,
Docker automatically fetched the image and ran it for me.
Once I have a local image with a container,
I can ask Docker to run a command inside that particular container.
Here, I simply issue a command to echo, hello world,
inside that particular container.
What actually happened when I ran that command,
was that it ran inside the Docker container that I just fetched.
You can also use the docker run command to get an interactive shell
inside your container.
So here you can see I'm now inside the container
looking at a standard Linux installation.
Now if I exit the container,
I can also show you how I run the command as a daemon.
In this case I will launch an infinite loop and run it as a demon.
Particular demon does nothing particularly exciting except print hello world over
repeatedly.
Since I'm running the loop as a demon,
the text doesn't come out to the command prompt.
But rather two log that I can view.
To see the containers that are running I can type doc of ps.
And to see the output of any programs running in that container.
I could type Docker logs in the name of the container that's running.
Here you can see I have a very long string of hello world output to the Docker logs.
If I want to stop the container, I simply type Docker stop and
then the name of the container.
And now, when we type Docker ps,
you can see that no containers are currently running.
Because that stopped the running container.
In conclusion, containers are a lightweight means
of deploying applications in a self contained environment.
They're faster to deploy and more lightweight than virtual machines,
making them appealing for deploying and things like applications.
And possibly even network functions.
In the future I expect we may see network functions such as those we've discussed
in a previous lecture deploying containers such as those that Docker provides.