Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in.
Docker images can be created by Dockerfiles which can be stacked and thus form a directed graph. OGS-6 image definitions are created with
ufz/ogs-container-maker. Built images can be found at the GitLab Container Registry. You can also create images from your local source code.
To build an image by yourself create a Dockerfile:
docker build -t repo/image_name path/to/directory
-t specifies a name for the image, can be arbitrary chosen (but should match the corresponding image on Docker Hub if there is one)
Now you can see your build image with
$ docker images.
To run commands inside a container:
docker run --rm image_name command_to_run
--rm Cleans up after exiting the container
To run an interactive shell add the
docker run --rm -it image_name
It is useful to mount folders from the host operating system in the Docker container, e.g. to edit source code on your host with your favorite editor:
docker run --rm -it -v /host/directory:/container/directory image_name
There are docker images provided on the GitLab Container Registry which include everything necessary to build OGS-6 (e.g.
registry.opengeosys.org/ogs/ogs/gcc). They are used by the CI but you can also use them for development. For running the images require CPU capabilities equivalent or better than the Intel Ivybridge1 architecture.
Even better for development is the usage of Singularity container because they offer a transparent mapping of the user to container space.