What are containers?
The use of containers has grown significantly over the past couple of years with Docker leading the charge. The multifaceted deployment scenarios provided by containers are changing IT strategies and tactics.
Docker defines a container as, “a lightweight, stand-alone, executable package of a piece of software that includes everything needed to run it.”
Containers vs. Virtual Machines
A first glance, a container appears to be similar to a virtual machine. While there is some commonality, they are very different in nature.
A virtual machine (VM) resides on a server and emulates a specific hardware configuration with a complete operating system (OS) and a suite of applications. Because a VM emulates hardware, it can take a while to boot up.
A container also resides on a server but shares the operating system’s kernel with other containers on the server. Since a container does not contain an entire operating system, it takes up much less server space and boots up almost instantly.
In short, containers give developers many of the benefits of a VM in a much lighter, faster package along with some other key benefits outlined below.
Practical Uses for Containers
Container technology is encouraging rapid, agile development, unlike anything the IT industry has ever seen. Below are four practical examples of when it may make sense to deploy containers.
One of the primary advantages of working with containers is the flexibility to run applications in multiple environments, without the burden of infrastructure requirements. Containers can be reliably deployed almost anywhere regardless of the configuration of the operation system, software, or hardware.
Containers are lightweight and have a smaller memory footprint than virtual machines. This reduces the amount of necessary server capacity in most scenarios, which reduces hardware costs and server management time.
In multi-tenant applications, containers give the flexibility to run multiple, individual environments with customizations to meet their unique requirements for each tenant application.
Containers provide an easy and efficient way to test code and track down errors without impacting mission critical components of an application that is actively deployed.
Development Team Advantages
Containers isolate a software application from the hardware and software environment it runs in. That is a major benefit to development teams because it makes it easier to move software through the development pipeline. When packaged in a container, software can be transferred from the developer’s computer to the continuous integration (CI) servers, to the QA servers, and finally to the production servers with a much smaller risk that the different hardware and software configurations in those environments will cause problems. Containers provide a consistent environment for code regardless of the host machine.
At Level 12, our development team uses containers primarily for the benefits outlined above. In particular, we have them operating:
- In our Continuous Integration environment to guarantee our application’s tests are running with the same system libraries available that our production servers have installed.
- To make upgrade and deployment of the Pentaho suite of analytics tools more manageable. We use Docker to create an image of the installed/upgraded/configured software, which is a laborious process. That image can then be given to developers for their local development needs and also deployed to the servers, with minimal configuration changes, with relative ease. Before containerizing Pentaho, every developer and both QA and production servers would have to be upgraded or reconfigured individually, which took a lot of time.
Due to concerns we have about the Docker daemon running with elevated privileges (i.e. as root), we have avoided using Docker in production for most of our applications. However, the container community is continuing to mature at a rapid pace, and we believe it likely there will be popular options for running containers without root privileges in the near future.
It will be fun to watch how the technology and application of containers evolve over time. In the comment section below, share your experience with containers or what you think the future holds for this remarkable technology.