Docker

Docker is a mature, production grade technology to run multiple applications on the same host with total segregation.

To clear up a common misconception, containers are NOT mini virtual machines.

When we create a Docker image with the FROM directive, Docker only adds the slimmed down version of the Linux distribution we specified, so our application thinks it is running in that Linux distribution. This makes it possible to run the package manager and other software, specific to that distribution in the container.

The rest of the Dockerfile customizes the image to add packages, set the environment, specify the first command to execute, and install our custom application.

The Linux kernel natively supports the total segregation of applications in namespaces, and able to limit the CPU, memory, disk and network usage of each namespace, so those can coexist without taking all resources from each other.

The applications of the container run natively on the host computer’s kernel in isolated disk, process, network, interprocess communication, hostname, and user namespaces. This allows them to run with minimal performance penalty, making containers much more efficient than Virtual Machines.

To see your containerized applications running on the Linux host, execute

ps -e

This does not work on Macintosh, as Docker runs in a virtual machine on macOS.

To learn Docker

To learn Docker Swarm

Docker

Docker Swarm

Docker Volumes

Container monitoring

Docker troubleshooting

I want to thank Robert Lestak for many of his great Docker scripts.