Docker — MARV Robotics 19.04.0 documentation

# Docker

## Prerequisites

- Docker version 18.03.1-ce or greater, it might work with older versions as well.
- Checkout of MARV Robotics Enterprise Edition or Community Edition

## Building or configure image used

Users of the Enterprise Edition build their own image based on their custom release of MARV Robotics EE. Users of the Community Edition can use the published MARV Robotics CE Image `ternaris/marv-robotics` or build their own.

### Enterprise Edition and custom image

Building your own image is as simple as running `./scripts/build-image`.

    $ ./scripts/build-image
    ...
    Successfully tagged marvee-marvhub:latest

The basename of your checkout of MARV Robotics will be used as image name and subsequently also as container name. That way it is possible to have multiple containers based on different images running side-by-side.

### Marv user uid and gid

If the primary uid and gid of the user you are using to start the docker container is not 1000, you need to build a custom image with adjusted uid and gid.

    $ ./scripts/build-image --build-arg MARV_UID=1234 --build-arg MARV_GID=5678

Failure to do so can lead to:

    [Errno 13] Permission denied: '/home/marv/site/sessionkey'

### Community Edition: Official MARV Robotics CE Image

In order to use the official MARV Robotics Community Edition image instead, the scripts contained in the repository have to be instructed accordingly.

    $ cd marv-robotics
    $ echo ternaris/marv-robotics > .image-name

## Start container

Run container provides instructions for the basic use case.

    $ ./scripts/run-container

    Usage: run-container SITE SCANROOT [EXTRA_OPTS ...]

    The site is expected to contain marv.conf and uwsgi.conf.
    It is mounted inside the container at /home/marv/site.

    The scanroot contains the log files for one or more collections.
    It is mounted read-only into the container at /scanroot.

    All additional arguments are passed as options to docker run.

Without further arguments it will run the container in the foreground, which is good for development where you want to kill and recreate it occasionally.

    $ ./scripts/run-container sites/example path/to/scanroot

Use `--detach` to start the container in the background.

    $ ./scripts/run-container sites/example path/to/scanroot --detach

Either way, you can enter the running container.

    $ ./scripts/enter-container
    marv@ce:~$ marv --help

The scanroot is mounted read-only as `/scanroot` inside the container. Be aware of that when creating your own configuration.

## Adding your own code

To add your own code, create a python package in `./code` next to the marv packages. When building an image, all of the code is copied into the image and installed automatically. Especially during development, you don’t want to rebuild all the time.

    MARV_INIT=1 DEVELOP=1 ./scripts/run-container sites/example path/to/scanroot

In general changes you make to your code will be effective immediately. However, after adding the package, when making changes to its `setup.py`, and when making changes affecting the web serving part of marv, the container needs to be restarted. As a rule of thumb: when you make changes to the config file, you want to restart using `MARV_INIT=1`, while making changes to your node code does not need a restart.

## Serve documentation

While the container is running MARV Robotics should be available at: http://localhost:8000.

And it’s documentation is linked in the footer and served at: http://localhost:8000/docs/

Let’s switch to your locally served documentation.

## Summary

Using tooling from the MARV Robotics repository you created your own docker image or used the official CE image and started a docker container running marv.

Now you are ready to setup a basic site.