Doc improvements
This commit is contained in:
parent
9297411d40
commit
0f6a1bd41f
5 changed files with 91 additions and 2 deletions
56
README.md
56
README.md
|
@ -29,6 +29,8 @@ want to either build images or manage garbage collection roots if you
|
||||||
control the deployment host. Either of these has yet to be
|
control the deployment host. Either of these has yet to be
|
||||||
implemented.
|
implemented.
|
||||||
|
|
||||||
|
Support for other Linux than NixOS is untested.
|
||||||
|
|
||||||
# Install
|
# Install
|
||||||
|
|
||||||
Have [Nix](https://nixos.org/nix/) and Docker installed.
|
Have [Nix](https://nixos.org/nix/) and Docker installed.
|
||||||
|
@ -36,14 +38,57 @@ Have [Nix](https://nixos.org/nix/) and Docker installed.
|
||||||
git clone git@github.com:hercules-ci/arion.git
|
git clone git@github.com:hercules-ci/arion.git
|
||||||
nix-env -iA arion -f .
|
nix-env -iA arion -f .
|
||||||
|
|
||||||
# Example of usage
|
# Example `arion-compose.nix`
|
||||||
|
|
||||||
The command line inherits most `docker-compose` commands.
|
This Nix expression serves the Nix manual at host port 8000 when launched with `arion up`. It is a function from a package set (`pkgs`) to a configuration.
|
||||||
|
|
||||||
|
```
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
config.docker-compose.services = {
|
||||||
|
|
||||||
|
webserver = {
|
||||||
|
service.useHostStore = true;
|
||||||
|
# service.depends_on = [ "backend" ];
|
||||||
|
service.command = [ "sh" "-c" ''
|
||||||
|
cd "$$WEB_ROOT"
|
||||||
|
${pkgs.python3}/bin/python -m http.server
|
||||||
|
'' ];
|
||||||
|
service.ports = [
|
||||||
|
"8000:8000" # host:container
|
||||||
|
];
|
||||||
|
service.environment.WEB_ROOT = "${pkgs.nix.doc}/share/doc/nix/manual";
|
||||||
|
};
|
||||||
|
|
||||||
|
# backend = { ... }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `pkgs` argument comes from a file called `arion-pkgs.nix`. It can be as simple as `import <nixpkgs> {}` to use the Nixpkgs from your `$NIX_PATH`.
|
||||||
|
|
||||||
|
# A full featured example
|
||||||
|
|
||||||
|
To see how Arion can be used in a project, have a look at [todomvc-nix](https://github.com/nix-community/todomvc-nix/tree/master/deploy/arion).
|
||||||
|
|
||||||
git clone git@github.com:nix-community/todomvc-nix.git
|
git clone git@github.com:nix-community/todomvc-nix.git
|
||||||
cd todomvc-nix/deploy/arion
|
cd todomvc-nix/deploy/arion
|
||||||
arion up
|
arion up
|
||||||
|
|
||||||
|
# How it works
|
||||||
|
|
||||||
|
Arion is essentially a thin wrapper around Nix and docker-compose.
|
||||||
|
When it runs, it does the following:
|
||||||
|
|
||||||
|
- Evaluate the configuration using Nix, producing a `docker-compose.yaml` and a garbage collection root
|
||||||
|
- Invoke `docker-compose`
|
||||||
|
- Clean up the garbage collection root
|
||||||
|
|
||||||
|
Most of the interesting stuff happens in Arion's Nix expressions,
|
||||||
|
where it runs the module system (known from NixOS) and provides the configuration that makes the Docker Compose file do the things it needs to do.
|
||||||
|
|
||||||
|
The interesting part is of course the [service-host-store.nix module](src/nix/service-host-store.nix) which performs the bind mounts to make the host Nix store available in the container.
|
||||||
|
|
||||||
# "FAQ"
|
# "FAQ"
|
||||||
|
|
||||||
### Do I need to use Hercules CI?
|
### Do I need to use Hercules CI?
|
||||||
|
@ -72,6 +117,13 @@ safe with respect to garbage collection. A deployment that is more
|
||||||
serious than local development must leave a GC root on the deployment
|
serious than local development must leave a GC root on the deployment
|
||||||
host. This use case is not supported as of now.
|
host. This use case is not supported as of now.
|
||||||
|
|
||||||
|
### What is messing with my environment variables?
|
||||||
|
|
||||||
|
Docker Compose performs its own environment variable
|
||||||
|
substitution. This can be a little annoying in `services.command` for
|
||||||
|
example. Either reference a script from `pkgs.writeScript` or escape
|
||||||
|
the dollar sign as `$$`.
|
||||||
|
|
||||||
### Why "Arion"?
|
### Why "Arion"?
|
||||||
|
|
||||||
Arion comes from Greek mythology. Poseidon, the god of ~Docker~ the
|
Arion comes from Greek mythology. Poseidon, the god of ~Docker~ the
|
||||||
|
|
21
examples/minimal/arion-compose.nix
Normal file
21
examples/minimal/arion-compose.nix
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
config.docker-compose.services = {
|
||||||
|
|
||||||
|
webserver = {
|
||||||
|
service.useHostStore = true;
|
||||||
|
# service.depends_on = [ "backend" ];
|
||||||
|
service.command = [ "sh" "-c" ''
|
||||||
|
cd "$$WEB_ROOT"
|
||||||
|
${pkgs.python3}/bin/python -m http.server
|
||||||
|
'' ];
|
||||||
|
service.ports = [
|
||||||
|
"8000:8000" # host:container
|
||||||
|
];
|
||||||
|
service.environment.WEB_ROOT = "${pkgs.nix.doc}/share/doc/nix/manual";
|
||||||
|
};
|
||||||
|
|
||||||
|
# backend = { ... }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
2
examples/minimal/arion-pkgs.nix
Normal file
2
examples/minimal/arion-pkgs.nix
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# Instead of pinning Nixpkgs, we can opt to use the one in NIX_PATH
|
||||||
|
import <nixpkgs> {}
|
4
examples/todomvc/README.md
Normal file
4
examples/todomvc/README.md
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
|
||||||
|
# todomvc
|
||||||
|
|
||||||
|
This is the most full-featured example of a project. It's a [demo/template repo in its own right.](https://github.com/nix-community/todomvc-nix/tree/master/deploy/arion).
|
10
src/arion
10
src/arion
|
@ -79,6 +79,16 @@ Usage:
|
||||||
arion docker-compose help
|
arion docker-compose help
|
||||||
arion docker-compose help up|logs|...
|
arion docker-compose help up|logs|...
|
||||||
|
|
||||||
|
Top-level arion options
|
||||||
|
|
||||||
|
These must be provided before the command.
|
||||||
|
|
||||||
|
--file FILE Use FILE instead of the default ./arion-compose.nix
|
||||||
|
Can be specified multiple times for a merged configuration.
|
||||||
|
--pkgs EXPR Use EXPR instead of ./arion-pkgs.nix to get the
|
||||||
|
Nixpkgs attrset used for bootstrapping and evaluating
|
||||||
|
the configuration.
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
|
|
Loading…
Reference in a new issue