Cloud computing has become increasingly popularity among companies. It greatly saves the investment of infrastructure and training with everything is running on cloud, it also improves the accessibility and flexibility of service provided by companies. With its popularity, many products are born or becoming popular to help build and move the apps to the cloud.
Some well known names of these products are Vagrant, Docker/LXC, Chef and OpenStack. These tools can help create, test and deploy applications developed without concerning too much about platform differences. What are the relationship of these tools and what are their purposes?
Chef
Chef is an automation platform that transforms infrastructure into code. it is a configuration management software. Most of them use the same paradigm: they allow you to define the state you want a machine to be, with regards to configuration files, software installed, users, groups and many other resource types. Most of them also provide functionality to push changes onto specific machines, a process usually called orchestration.
Similar products include Puppet and Ansible.
Vagrant
Vagrant is a tool for building complete development environments. With an easy-to-use workflow and focus on automation, Create and configure lightweight, reproducible, and portable development environments.
It provides a reproducible way to generate fully virtualized machines using either Oracle's VirtualBox or VMWare technology as providers. Vagrant can coordinate with a configuration management software to continue the process of installation where the operating system's installer finishes. This is known as provisioning.
However, Vargrant is still a virtual machine depending on Virtual Box (or others) with a huge overhead. It requires you to have a hard drive file that can be huge, it takes a lot of RAM, and performance can be not very good.
Docker
An open source project to pack, ship and run any application as a lightweight container. Itself is not a VM but a container built on that.
The functionality of this software somewhat overlaps with that of Vagrant, in which it provides the means to define operating systems installations, but greatly differs in the technology used for this purpose. Docker uses Linux containers, which are not virtual machines, but isolated processes running in isolated filesystems. Docker can also use a configuration management system to provision the containers.
LXC
An operating-system-level virtualization environment for running multiple isolated Linux systems (containers) on a single Linux control host. LXC combines cgroups and namespace support to provide an isolated environment for applications. It can be used by Docker as one of its execution drivers, enabling image management and providing deployment services.
OpenStack
OpenStack is ppen source software for building private and public clouds.
The primary target for OpenStack installations are bare metal multi-node environments, where the different components can be used in dedicated hardware to achieve better results.
A key functionality of OpenStack is its support for many virtualization technologies, from fully virtualized (VirtualBox, VMWare), to paravirtualized (KVM/Qemu) and also containers (LXC) and even User Mode Linux (UML).