Software Container Technology is one of the most popular technologies used currently in app development. In fact, the top two websites in the world, Google Search and YouTube, run on containers. Moreover, Google creates and starts over two billion containers each week.
Many container technologies are offered and supported by the major cloud computing platforms including Amazon Web Services, Google Cloud, and Microsoft Azure. They support many container technologies including Docker, Kubernetes, rkt (pronounced “rocket”), etc.
In fact, most tech corporations in existence now develop or employ containers, which leads us to the question
What is Software Container Technology?
Software container technology, or simply “container technology” is a set of technologies to standardize software packages. A container is according to Docker “a standardized unit of software, which can run isolated from other software”.
Software containers or, “containers” offer a solution to the software portability problem. Meaning, containers resolve the issue of how to move software reliably from one computing environment to another, say from a development to a production environment.
Container technology’s name is inspired by the shipping industry wherein goods are shipped in containers. In place of creating specialized methods to ship each product, a standardized method was created to ship products — a steel shipping container.
A shipping container is designed as part of a standardized process and so, ships are designed to fit its standard size. Each container stores any number of items and once it reaches the docks, is lifted by crane onto a ship.
The result of this is a container can be handled and transported as a unit, thereby improving efficiency and decreasing cost, thanks to the standardized process. The same idea introduced to computer software is called container technology.
How does the Container Technology Work?
Have you ever faced a situation where an application works perfectly on a machine but fails to start on another machine? Of course, this is an issue experienced primarily on the backend of applications since this isn’t an issue found in a pre-packaged application;
For example, if you download and install a browser like Chrome you will not experience this problem.
However, it affects most backend applications since they’re complex in nature. The problem occurs when an application is migrated from a development system to a test or production server or from a physical server to a cloud environment.
Issues occur in the migration when there is a difference between two computer systems, whether it’s different operating system, system libraries, system updates, storage, or network topology.
“You’re going to test using Python 2.7… it’s going to run on Python 3 in production… rely on the behavior of a certain version of an SSL library and another one will be installed. You’ll run your tests on Debian and production is on Red Hat and all sorts of weird things happen,” said Solomon Hykes, creator of Docker.
Containers allow for Software to be packaged along with all its configuration files, dependent binaries, libraries, and packages — all in a single unit. This means it’s a self-sufficient package that can run on any platform regardless of the platform’s host applications or resources.
Like a crane which picks up and transfers a container as an isolated unit to the ship which is designed to handle and store it, a system is designed to provide the essential resources for the container which incorporates all resources in a single unit, allowing for easy migration from one system to another.
Advantages of the Container Technology
Virtual machines were the best answer to the software portability problem until the advent of the container technology which enabled a single physical machine to run multiple virtual machines — a virtualized operating system. A single virtual machine may contain its own operating system, libraries, and applications.
Since the physical machine runs multiple operating systems as per the number of running virtual machines, there is a huge overhead of system resources. Meaning, a single physical machine can run only a limited number of virtual machines.
In contrast, multiple containers share a single operating system of the host machine, allowing them to share a system’s resources in a much more efficient manner than virtual machines. For instance, a virtual machine may require some gigabytes of RAM, but a container with the same app may work with a few gigabytes.
A virtual machine is just a virtualized PC, meaning, it can take as much as several minutes to boot up depending on the host machine as opposed to a container which can start in mere seconds.
Drawbacks to Container Technology
Since multiple containers share a single operating system, there are many more security concerns when compared to virtual machines. If there is, for example, a bug in the host operating system, it will affect all its containers. This isn’t the case with a virtual machine because each virtual machine has its own OS.
The positive side of the widespread adoption of containers is that this is an issue which is known to the community at large, and many efforts are being made to come up with solutions to improve containers security in general and docker security in particular as it is one of the most common containers used.
Like any technology, there is a need to be cautious and take container security precautions. Despite some drawbacks, however, there is no doubt that container technology has significantly changed the face of app development for the better and has helped teams save time, manpower and money, using less systems to get results.