Despite the fact that I have been using docker containers for multiple weeks now, I still find the concept of docker containers to be a bit more mystical than I would like. Thus, I chose to try and find some good sources that break down this concept, which led me to a podcast on Spotify of all places. To begin however, I wanted to give a summary of what is stated on Docker’s own website. These containers are called a standardized unit of software, sort of like a big zip file containing the program, relevant libraries, dependencies, etc.. This allows containers to be used across any system, as normally you would have to ensure that the systems utilizing your program have all relevant data before using your program.
The podcast I found gives a more general overview of Docker as a whole and, if you are still a little hazy on exactly what it does, I would highly recommend giving it a listen. Essentially, docker containers are much faster than utilizing a virtual machine, as they do not require an entire image of an operating system to run on. Having used some virtual machines, such as VMWare, in the past, I can definitely confirm that Docker is significantly faster, and easier to install. You can also run multiple containers simultaneously that are all self contained. This could be useful for larger projects, as you could have one facet that has different dependencies or requirements, or maybe one is required to run in a different language than another. These containers are all “wrapped” into an image that will run these containers, but also has all of the other important information, as was listed above. These programs can be even further customized through creating your own docker file. This could allow you to specify, for example, one image to use node and java whereas you have another utilizing bash and python, and much more.
To summarize, Docker containers essentially act as their own self contained systems, in a similar conceptual manner to a virtual machine. Its core function is to give each user their own environment to run certain software, but removing the issue of varying operating systems. The amount of containers you may want will vary, depending on the scope of your program. These containers are unique in that they are both more lightweight than a virtual machine and allow great consistency in terms of normalizing system to system deployment for users. Additionally, multiple containers can be combined into an image, which is a collection of containers to be run together. Thus you can see the reasons why Docker containers, and Docker as a whole, are so interesting.