October 6, 2015

Project Atomic or: How I Learned to Stop Worrying and Love Containers

atomicProject Atomic is a set of technologies that makes containers easier to develop, configure, deploy, run, administer, and deliver in a wide variety of execution environments. This interconnected set of technologies starts with tools that make it easier to run a single container and continues to tools that help deploy complex multi-container applications.

Many of these projects include the word “atomic” in their name. Therefore, discussions turn into conversations about “atomics” and people can get confused. In this post, I will introduce the main atomics and a few of their friends.

Atomic Host

Containers need a operating system to run on, and that's Atomic Host. Atomic Host represents a design pattern for distributions to build an environment that is optimized for running Linux containers. This pattern can be implemented by existing distributions, which is critical. This eliminates the need to wrap your head around building a new operating system while developing a container deployment environment at the same time.

Some key advantages of an Atomic Host are:

Built on a trusted distribution: Pulling the components that are required to support containerization from a distribution that is trusted and then layering on additional capabilities for containers means that the operating system already has:

  • Hardware and software support, including known kernel support and drivers
  • Broad ISV and IHV support

  • Established and familiar ways to get involved, file bugs, submit patches and get support often from the same colleagues and communities you are familiar with.

  • The ability to reuse existing skills instead of having to learn a whole new operating system

Atomic updates:

  • Single-step -- or atomic -- upgrades and reversioning of the operating system. This is done via the delivery of an OSTree, or a complete system tree, to the server that is used to boot the server into a new operating system version.
  • No half-updated systems or unpacking RPMs and running scripts on every host.  

A streamlined package set: This only includes what is required to build a Docker and Kubernetes environment.

You can find Atomic Host variants of Fedora, CentOS, and Red Hat Enterprise Linux. These distributions use rpm-ostree to implement the Atomic Host pattern. It allows existing and trusted RPMs to be leveraged to construct the OSTrees. It is also optimized for delivering the tree because it implements what is essentially git for the operating system.

Nulecule and Atomic App

Question: What do you call a containerized application?

Answer: A mess of images, containers, READMEs, and configuration files pretending to be easily deployable. 1990 called and wants its install process back!

Most applications are made of multiple containers. Even a simple web application will typically require a web-frontend and a database. Different container environments will connect those applications in different ways.The Nulecule Specification allows a multi-container application to be specified and configured once and then deployed and run in many execution environments. Today, there is support for Docker, Kubernetes, and OpenShift, and more are welcome. It's worth noting that Nulecule is a made-up word derived from molecule by fictional nuclear plant operator Homer Simpson. Even the specification name has something to with atomic!

A specification is great, but an implementation is needed for it to be useful. Atomic App is a Python-based implementation of the Nulecule specification. It lives inside a container that is run by the application user. The user never runs Atomic App directly, but benefits from the configuration that Atomic App provides.

Atomic Command

In contrast to Atomic App, the atomic command is a tool to make running containers easier. It provides additional functionality and adds syntactic sugar. For example, using special labels the atomic command can install, start and stop containers easily by turning long Docker commands into short commands like atomic run projectatomic/helloapache. Atomic command is available for many distributions and has been tested on Fedora, CentOS, Debian, and Red Hat Enterprise Linux in both standard and Atomic Host (where available) variants.

If you're using an Atomic Host, the atomic command does double-duty and provides access to host-specific administration, including upgrades.

Atomic Developer Bundle

The Atomic Developer Bundle (ADB) provides a platform for developers on Linux, Windows, and OS X to use when packaging containerized applications. The ADB encourages good packaging patterns and integration with native, PaaS, and IaaS environments. The ADB is a virtual machine that contains all the tools needed to package containerized applications for these environments. Included in the box is a fully functional Kubernetes preconfigured for you to develop against.

Atomic Reactor & OpenShift Build System Client

Atomic Reactor is a command-line addressable, source-to-image builder for Docker containers. Starting with a Git repo, it can resolve all dependencies and build requirements to allow you to build and push a container to a registry easily. Using Atomic Reactor will allow your build chain to be clean and automatable. Look for it to appear in the Atomic Developer Bundle. A similar tool, OpenShift Build System (OSBS) Client, can trigger builds and deployments in OpenShift.

Atomic Enterprise

In between PasS and IasS sits a project that also has “atomic” in its name. Atomic Enterprise builds on the power of Atomic Host and embeds the operational enablement technologies of OpenShift into a simple, powerful, and easy-to-approach experience for deploying and scaling applications in containers. Atomic Enterprise is an infrastructure platform that is designed to run, orchestrate, and scale multi-container based applications and services. It provides a scale-out cluster of Atomic Host instances that together form a foundation for delivering traditional and cloud-native applications via containers.

Project Atomic has an “atomic” for every container situation. Individuals experimenting with containers on their laptops can use the atomic command, developers can use the Atomic Developer Bundle, Atomic App, and Nulecule, and operators can use Atomic Reactor and Atomic Enterprise. With all these atomics, I am sure you will find one to love.

Click Here!