Arion Manual

Version unreleased

Hercules Labs

Table of Contents

Introduction
Installation
Traditional Linux or Mac
Not installing: use it in a project
NixOS
Getting Started
Composition Options
Service Options

Introduction

Arion is a tool for building and running applications that consist of multiple docker containers. It has special support for docker images that are built with Nix, for a smooth development experience and improved performance.

It is built on top of Docker Compose, which implements the container orchestration functionality.

Instead of configuring the compositions in YAML files like docker-compose.yaml, Arion uses the Nix language to declare the compositions. Because of this, Arion gives you the ability to declare your deployments, configuration and packaging in the same language. By replacing multiple tools with a single language, you decrease your mental load and you can more easily refactor and maintain your configurations.

Although Arion can be used as a Docker Compose with an improved configuration front end, there is more to be gained from integrating with Nix. In particular, the more structured approach of Nix compared to Dockerfiles allows the following:

  • Build components of your image in parallel, automatically.
  • Share packages between images, regardless of the order they were added.
  • Improve performance by skipping container image creation.
  • Work with structured data instead of strings, templates and a multitude of expression languages.
  • Use one language and refactor across deployments, configuration and packaging.

Installation

Traditional Linux or Mac

TODO: describe: install Nix and nix-env -i

Not installing: use it in a project

TODO: describe: using nix-shell or in a script, building images as part of nix-build, pinning, see also todomvc-nix.

NixOS

TODO: describe: Docker + environment.systemPackages

Getting Started

Composition Options

build.dockerComposeYaml

Type: package

Declared by:

src/nix/docker-compose-module.nix
build.dockerComposeYamlText

Type: Concatenated string

Declared by:

src/nix/docker-compose-module.nix
docker-compose.raw

Type: attribute set

Declared by:

src/nix/docker-compose-module.nix
docker-compose.services

Type: attribute set of list of unspecifieds or unspecified convertible to its

Default: { }

Declared by:

src/nix/docker-compose-module.nix

Service Options

build.service

Type: attribute set of unspecifieds

Declared by:

src/nix/service.nix
service.build.context

Type: null or Concatenated string

Default: null

Declared by:

src/nix/service.nix
service.command

Type: null or unspecified

Default: null

Declared by:

src/nix/service.nix
service.depends_on

Type: list of Concatenated strings

Default: [ ]

Declared by:

src/nix/service.nix
service.entrypoint

Type: null or Concatenated string

Default: null

Declared by:

src/nix/service.nix
service.environment

Type: attribute set of Concatenated string or signed integers

Default: { }

Declared by:

src/nix/service.nix
service.expose

Type: list of Concatenated strings

Default: [ ]

Declared by:

src/nix/service.nix
service.image

Type: Concatenated string

Declared by:

src/nix/service.nix
service.ports

Expose ports on host. "host:container" or structured. See https://docs.docker.com/compose/compose-file/#ports

Type: list of unspecifieds

Default: [ ]

Declared by:

src/nix/service.nix
service.restart

Type: null or Concatenated string

Default: null

Declared by:

src/nix/service.nix
service.useHostStore

Bind mounts the host store if enabled, avoiding copying.

Type: boolean

Default: false

Declared by:

src/nix/service-host-store.nix
service.volumes

Type: list of unspecifieds

Default: [ ]

Declared by:

src/nix/service.nix
service.working_dir

Type: null or Concatenated string

Default: null

Declared by:

src/nix/service.nix