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:<version>
$ docker push sdss5/flicamera:<version>
$ 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:<version>
$ 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:<tag>
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:<tag>
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 defaultflicameralistens to port19995. If you want to runflicameraon a different port you’ll need to expose that port and change the entrypoint.Assuming that
flicamerais going to write new images to/datawe ned to create a volume and mount it in the container on that path.The actor name defaults to
flicamerabut can be changed by passing theACTOR_NAMEenvironment 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
--deviceflag, but that requires changes to the kernel configuration to ensure that the camera device is always mounted with the same name.