Developers and system administrators can finally agree on one thing: Containers are the perfect development playground. Virtual containers are chrooted directories (Folders for you Windows types) that are securely isolated from the rest of the operating system. Essentially, a container is a secure development system that only shares essential files with the host operating system, but allows a developer to work on applications without negatively affecting the host. A container has its own IP address, its own identity, its own filesystems (with the exception of a few shared with the host), and its own runlevel.
It seems that system administrators and developers are always at odds with each other about user permissions, application permissions, sudo access, application placement, and space requirements. Containers remove all but the space requirements contention. System administrators still allocate space to containers based on needs and availability, but developers can have complete dominion over their own containers as root. They can reboot their containers as needed, install software, and perform all the tests they want without affecting the host system.
What makes containers so compelling for developers, other than the aforementioned features, is that they're building applications in a production-consistent environment. All too often development systems have different kernels than their production counterparts do. They often have different base software installed. And development systems are often patched at different intervals.
This disparate administration between environments creates supportability gaps that drive system administrators crazy. Developers often want the latest, greatest available software on which to build their applications. Production systems administrators and business rules won't allow leading edge software because of stability and security vulnerabilities associated with such software, which is often in the beta stage of development.
However, having a container on a fully supported system alleviates some of those issues. The developer can use his or her leading edge software and test it against the system for stability. And any security vulnerabilities that appear out of its use can often be restricted to the container in use.
One of the most popular container applications is Docker. Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications. Dockerized apps are portable and can run on any operating system. Docker provides developers a ready-made application platform that speeds development and decreases the time required to make an application ready for shipping to users.
Containers provide a lightweight alternative to traditional virtual machines. They give the developer a more standard working environment and they give system administrators peace of mind. Containers aren't new, but they're seeing a resurgence in popularity because of their low overhead, high security, relative trouble-free nature, and operating system consistency.
If you're a developer, you should explore containers for your work and if you're a system administrator, you need to enable chroot environments on your fully supported, pre-production systems.
What do you think of the container revolution and Docker? Do you think this is a fad or a viable way to create applications that work anywhere? Talk back and let me know.