We are pleased to announce Atomic App 0.1.1! Find it at github and docker hub.

Atomic App is the reference implementation of the Nulecule Specification for composite applications. It can be used to bootstrap container applications and to install/deploy and run them. One of the key design goals of the Nulecule spec is to be container and orchestration engine agnostic, so that any developer or operator could successfully build, test, install, run, and manage composite container applications regardless of tooling.

In that same vein, Atomic App is designed to be provider agnostic, whether you want to run your application in a Kubernetes, OpenShift, or plain container environment, like Docker. It’s this multi-provider support feature that we are emphasizing for this release: building a Nulecule application results in a portable container that can be run in a wide variety of environments, and Atomic App takes the Nulecule application container and allows the operator to easily run a composite application in their chosen environment with their chosen providers.

It is in the spirit of portability that we announce a major milestone for Atomic App: support for OpenShift v3 as a provider. And for developers of Nulecule applications, we have also added some new and exciting developer features.

First of all, lets have a look at the developer-focused features. Logging has had a complete overhaul, as we have harmonized the logging output and made it more clear. Developers of an Atomic App will be guided to the problem, even though logging is pretty verbose. We need it for our own work - sorry! For now, logging will go to the console.

Furthermore we have added a new feature: atomic stop myapp-atomicapp. This will stop all components of an Atomic App. Before that you had to stop each component individually using kubectl… we hope this feature will speed up your development.

But the biggest change for Atomic App 0.1.1 is the OpenShift Provider. We support OpenShift v3 as it combines so many technolgies we love into one platform. Please take the time and make yourself familar with the only PaaS based on Docker, Kubernetes and Atomic Host.

Using Atomic App’s OpenShift provider, porting your Atomic app to OpenShift v3 can be as simple as adding to your Nulecule file:

inherit: kubernetes

This will tell Atomic App to use the same config files from Kubernetes for OpenShift. In the best case, this will simply work (but will not, of course, add any OpenShift v3 features to your application, like Replication Controllers).

To give you a complete example we will take a look at Zookeeper. The OpenShift team has provided a Zookeeper 3.4.6 docker container image and we have nuleculized it in the example linked here.

To see this in action:

  • Install (eg download and extract) the Zookeeper Atomic App by running atomic install vpavlin/zookeeper-atomicapp. This will download all required container images and extract them into the current directory.
  • Run this example by logging in to OpenShift using osc login (requires an active OpenShift v3 instance). This will create an OpenShift configuration at ~/.config/openshift/.config.
  • Point Atomic App to that file by adding openshiftconfig = <somepath>/.config to your answers.conf. Don’t forget to set the provider to ‘openshift’ in your answers.conf file in the root directory of your app.
  • Now, a simple atomic run vpavlin/zookeeper-atomicapp will deploy and start Zookeeper on OpenShift3.

Please let us know how you like the OpenShift Provider and what we need to do to enhance it even more.

Last but not least, Atomic App 0.1.1 is compliant with the Nulecule Specification 0.0.2, so that the Nulecule file is a little more readable than the previous version of the spec.

And as an important side note: our friends at DevAssistant have started to support the Nulecule Specification.

You can now create all that is required to build an Atomic App with DevAssistant:

da create nulecule -n MyApp --author "Tomas Radej" --email "tradej@redhat.com" \
--license GPLv2 --description "My first Nulecule App" --kubernetes.