Horatio
Horatio helps you build a Docker image for the project you're working on and produces an artifact (JSON document) which
contains meta-data about the image produced, this artifact than can be used in your build pipeline to do things like
deploy containers with a configuration management tool / scheduler of your choice, Ansible for example.
Horatio's advantage is that it stays out of your way and let's you get on with building great software.
Horatio is most handy if you have an existing build pipeline and just want to try Docker containers out for your project with
minimal fuss or have a lot of services to build, especially in different languages.
Automatic Project Detection
If, for example, you have a Java project which you build and manage with maven Horatio can parse a POM for you, strip the name and
version and build and push a Docker container to a registry for you.
The automatic project detection is also good if you're nailing up several services in different languages, this helps
automate building of Docker containers in a fast and simple manner, it's been used this way in the past.
Supported project types
Horatio automatically detects the kind of project you're working with and acts accordingly so far it supports:
If you use a Horatio document then Horatio will increment the version, commit
and push it back the source repository for you. In all other cases Horatio will
leave your existing version management alone.
Arbitrary Container Builds
This workflow is best if you just would like to build something like a Redis image.
If you just need to get an arbitrary project built and pushed somewhere you can simply create a horatio.json, like so:
To get started, Create a Horatio spec horatio.json
in your project root with the contents {'name': 'misc-project', 'version': '0.0.1'}
This workflow automatically increments the 'version' in the spec and pushes it back to your repository, this will be
configurable soon
Usage
To install
$ gem install horatio
$ horatio
To prevent caching of a build, export the following environment variable before running horatio
DOCKER_BUILD_NO_CACHE=1
Dev
bundle install
guard
Why do versions contain source repository revisions
Unfortunately the Docker registry handles tags as mutable objects. If you push a
image to the registry with the same name and version tag you will overwrite the
previous tag. Inserting the revision from the latest git commit ensures
we don't end up with collisions.
Horatio?
In honour of Horatio McAllister