Below, I’d like to introduce you to software containers – isolated user-space instances utilized in an operating-system-level approach to virtualization. Containers separate apps from the OS and their physical infrastructure used for connecting to the network. Thus, it is possible to run multiple virtual containers on the same carnel.
Probably, you might have heard of Docker, which appeared several years ago and caused a lot of excitement among IT specialists. It is the most striking example of container software, but there are some other noteworthy solutions. I’ve described the most prominent platformsfurther in this blog post, but let’s start with their nature and usage.
Containers solve a bunch of problems which occur when software is moved from one computing environment to another. A staging environment, a physical machine, a developer’s computer, a data center, or a public cloud probably offer different conditions. Therefore, by using code containers, you prevent your projects from problems related to dissimilar environments. Please note that even a distinct network topology or security policies might be a reason of conflicts and limitations. But how does container software help to solve multiple problems?
Since a container includes an entire runtime environment with app’s libraries, dependencies, binaries, and configuration files, all problems related to OS and infrastructure differences are abstracted away.
Despite such approach looks similar to virtualisation, the difference between them is great. In case of virtualization technology, a package (a virtual machine) contains an entire operating system. Thus, a physical server with several virtual machines running on top of it gets several separate operating systems. By using software containers, you reduce the number of operating systems to a single one. Such approach makes them much more lightweight, as well as decrease the usage of resources in comparison with virtual machines.
In practice, the size of a container may be just tens of megabytes, while a virtual machine often takes up several gigabytes. Therefore, a single server can host far less virtual machines than containers. Moreover, containerized applications can be started almost instantly, whereas in case of a virtual machine this process takes up to several minutes. Unfortunately, containers are not as secure as virtual machines, since they provide a lower level of isolation, but you can slightly fix the problem by using SELinux. Furthermore, container management software is not as comprehensive as tools like System Center by Microsoft or VMware vCenter.
If you think that software containers will replace virtual machines, you are mistaken. They are complementary technologies, but not competing ones. Both have unique features and use cases, so you should choose between virtual machines and containers depending on a situation. Just watch how Gordon Haff explains the difference between them.
Despite software containers are known for years, the idea caught fire only with the appearance of Docker, which triggered the development of similar solutions produced by Google, Microsoft, and Amazon. However, Docker has drifted too far from its roots: now, it is a much more complicated tool with tons of opportunities.
At the same time, there is another container system called Rocket or rkt. Due to the RunC runtime by the Open Container Project Docker and rkt containers are compatible. Moreover, containers created by other products should be compatible as well. That will help to decrease fragmentation in the container ecosystem. According to Docker’s tweet, we should be even able to use RunC containers on Windows.
Today, every company with an intent to develop container software takes part in the Open Container Project. Amazon Web Services, CoreOS, Docker, Fujitsu Limited, Google, Huawei, Intel, Joyent, Microsoft, Red Hat, VMware, and bunch of other industry giants are working hard on their projects with new standards in mind. But what are the main requirements, features, and opportunities typical for the container ecosystem?
Software containers don’t need heavy operating systems, so you can easily forget about traditional RedHat for Linux or Windows Server. Use lightweight Atom, CoreOS, Nano, Project Photon, or RancherOS. Addition, you can pay attention to Rancher Labs’s infrastructure platform for Docker.
Container orchestration software is another necessary aspect of the ecosystem. You can easily simplify a lot of routine processes with the help of Kubernetes or Mesosphere.
In case of stateful enterprise applications, there is a need of a storage layer with enterprise features. Luckily, you can easily get data persistence across nodes, clones, container-level snapshots, and other necessary stuff with Portworx or other similar solution.
Networking is another vital for container software topic. For instance, with SocketPlane.io, you can create a virtual network aimed at connecting multiple Docker containers deployed across various hosts.
Container management opportunities are represented with the Sysdig monitoring service; Atlas – an infrastructure management solution by HashiCorp; and configuration management companies, such as Chef and Puppet.
Other solutions are described below.
The best container management software
Despite the popularity of software containers is rapidly growing, there are still a lot of challenges around managing them, but with the aid of below startups, coders can easily prevent themselves from current issues.
Dockeris the most popular container management software focused on both basic aspects and advanced features of development with the aid of containers. It is a de facto standard for container runtimes.
BlueDataprovides the ability to deploy big data platforms in Docker containers, making containerized versions of software available through a free trial. You can run containers as a hosted app or a downloaded program.
ClusterHQoffers Flocker – an open source product, which allows software containers to run databases and port them between VM hosts without losing data related to apps contained inside.
CoreOSis a lightweight Linux OS for rkt and other scale-out distributed systems. The portfolio of CoreOS also includes a commercial distribution of Kubernetes dubbed Tectonic.
Kismaticis designed to manage infrastructure clusters. It offers commercial support for Kubernetes and Docker.
With Portworxdevelopers can manage clusters of containers. The software assess an available infrastructure, provisions containers, gets the necessary storage, and manages networking features, such as IP addresses.
Rancher Labsprovides a platform for container management. As for RancherOS, it is a lightweight OS optimized for running software containers.
Shippable is a hosted service that provides developers with the ability to write code and test it immediately to ensure it doesn’t contain any bugs.
Sysdigis an open source Linux monitoring platform for virtual containers. It provides the following types of information: system health checks, top network connections, most I/O intensive files, a history of executed commands and log data, etc.
Tutumoffers container management software. Developers write code, port it into the platform, and let the software take care of the rest: network connections and storage for instance.
Twistlockis going to fix all problems related to the security of containers. The company provides an “end-to-end” solution for monitoring and protecting software containers, which features a customizable dashboard, “gates,” and security profiles.
Weaveworkscreates a network for connecting containers. Each container gets an IP address and the ability to be mapped with a Scope tool.
Since Docker is the core reason of software containers popularisation, I’d like to pay more attention to the project in a separate blog post. You can find a detailed description of Docker, its comparison with the closest competitors, as well as hosting solutions optimized for the requirements of the platform here: Docker – The Revolution in Software Containerization. Interested in what is Docker container? Follow the link to check the answer.