.. highlight:: console .. _docker: Docker image ============ ``flicamera`` can run as a Docker container in a host that is physically connected to a FLI camera. This is mainly intended for ``flicamera`` to run as part of a `fliswarm `_. The Dockerfile is included with the code, in the ``etc/`` directory of the repository. To build a new image, simply go to that directory and run ``make``, which is equivalent to :: $ docker build -f Dockerfile -t sdss5/flicamera:latest .. (note that the context of the Docker build is the root of the ``flicamera`` repository). Tagging and pushing ^^^^^^^^^^^^^^^^^^^ Next, tag the new image and push it to the Docker Hub :: $ docker tag sdss5/flicamera:latest sdss5/flicamera: $ docker push sdss5/flicamera: $ docker push sdss5/flicamera:latest Note that the ``latest`` tag is consider the "default" tag to pull if you don't specify a tag version, but it's not necessarily the latest version unless you explicitely push it as such. See `this article `__ for more details. For fliswarm_ you will likely be using a private repo; make sure to also push to that repository :: $ docker push sdss-hub:5000/sdss5/flicamera: $ docker push sdss-hub:5000/sdss5/flicamera:latest Running flicamera as a container ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To run ``flicamera`` as a container, first make sure you have pulled the image you want to run :: $ docker pull sdss5/flicamera: The run the container :: $ docker run --rm -d -p 19995:19995 \ --mount source=data,target=/data \ --env OBSERVATORY=$OBSERVATORY \ --env ACTOR_NAME=flicamera-gfa \ --privileged \ sdss5/flicamera: A few notes about this command: - We need to run the container in detached mode (``-d``). - We need to expose the container port that we want to use and bind it to the host port (``-p 19995:19995``). By default ``flicamera`` listens to port ``19995``. If you want to run ``flicamera`` on a different port you'll need to expose that port and change the entrypoint. - Assuming that ``flicamera`` is going to write new images to ``/data`` we ned to create a volume and mount it in the container on that path. - The actor name defaults to ``flicamera`` but can be changed by passing the ``ACTOR_NAME`` environment variable. - We need to run the container in privileged mode to enable access to the host hardware in the container. It's also possible to use the ``--device`` flag, but that requires changes to the kernel configuration to ensure that the camera device is always mounted with the same name.