Before moving our production infrastructure over however, we decided that we wanted to start developing with them locally first. We could shake out any issues with our applications before risking the production environment.
using Chef and Vagrant to provision local VMs
Engineers at IFTTT currently all use Apple computers
Backing services, such as the app’s database, queueing system, or cache, is one area where dev/prod parity is important
The twelve-factor developer resists the urge to use different backing services between development and production, even when adapters theoretically abstract away any differences in backing services.
declarative provisioning tools such as Chef and Puppet combined with light-weight virtual environments such as Docker and Vagrant allow developers to run local environments which closely approximate production environments.
all deploys of the app (developer environments, staging, production) should be using the same type and version of each of the backing services.
LXC (LinuX Containers) is a OS-level virtualization technology that allows creation and running of multiple isolated Linux virtual environments (VE) on a single control host.
Docker, previously called dotCloud, was started as a side project and only open-sourced in 2013. It is really an extension of LXC’s capabilities.
Docker is developed in the Go language and utilizes LXC, cgroups, and the Linux kernel itself. Since it’s based on LXC, a Docker container does not include a separate operating system; instead it relies on the operating system’s own functionality as provided by the underlying infrastructure.
Docker acts as a portable container engine, packaging the application and all its dependencies in a virtual container that can run on any Linux server.
a VE there is no preloaded emulation manager software as in a VM.
In a VE, the application (or OS) is spawned in a container and runs with no added overhead, except for a usually minuscule VE initialization process.
LXC will boast bare metal performance characteristics because it only packages the needed applications.
the OS is also just another application that can be packaged too.
a VM, which packages the entire OS and machine setup, including hard drive, virtual processors and network interfaces. The resulting bloated mass usually takes a long time to boot and consumes a lot of CPU and RAM.
don’t offer some other neat features of VM’s such as IaaS setups and live migration.
LXC as supercharged chroot on Linux. It allows you to not only isolate applications, but even the entire OS.
Libvirt, which allows the use of containers through the LXC driver by connecting to 'lxc:///'.
'LXC', is not compatible with libvirt, but is more flexible with more userspace tools.
Portable deployment across machines
Versioning: Docker includes git-like capabilities for tracking successive versions of a container
Component reuse: Docker allows building or stacking of already created packages.
Shared libraries: There is already a public registry (http://index.docker.io/ ) where thousands have already uploaded the useful containers they have created.
Docker taking the devops world by storm since its launch back in 2013.
LXC, while older, has not been as popular with developers as Docker has proven to be
LXC having a focus on sys admins that’s similar to what solutions like the Solaris operating system, with its Solaris Zones, Linux OpenVZ, and FreeBSD, with its BSD Jails virtualization system
it started out being built on top of LXC, Docker later moved beyond LXC containers to its own execution environment called libcontainer.
Unlike LXC, which launches an operating system init for each container, Docker provides one OS environment, supplied by the Docker Engine
LXC tooling sticks close to what system administrators running bare metal servers are used to
The LXC command line provides essential commands that cover routine management tasks, including the creation, launch, and deletion of LXC containers.
Docker containers aim to be even lighter weight in order to support the fast, highly scalable, deployment of applications with microservice architecture.
With backing from Canonical, LXC and LXD have an ecosystem tightly bound to the rest of the open source Linux community.
Docker Swarm
Docker Trusted Registry
Docker Compose
Docker Machine
Kubernetes facilitates the deployment of containers in your data center by representing a cluster of servers as a single system.
Swarm is Docker’s clustering, scheduling and orchestration tool for managing a cluster of Docker hosts.
rkt is a security minded container engine that uses KVM for VM-based isolation and packs other enhanced security features.
Apache Mesos can run different kinds of distributed jobs, including containers.
Elastic Container Service is Amazon’s service for running and orchestrating containerized applications on AWS
LXC offers the advantages of a VE on Linux, mainly the ability to isolate your own private workloads from one another. It is a cheaper and faster solution to implement than a VM, but doing so requires a bit of extra learning and expertise.
Docker is a significant improvement of LXC’s capabilities.