# Developing The Dockerfile itself is constructed from re-usable snippets, located in the templates/ directory, and can be regenerated by running: ```bash scripts/build-dockerfile ``` The above script uses environment substitution to stamp version information within the created Dockerfile. The files which declare the environment variables are in **SOLUTION** and **MANIFEST**. After joining the template/* pieces together, the file **Dockerfile.solution** is then added to the Dockerfile with environment substitution. # SOLUTION Solution specific definitions: CONTAINER_IMAGE is used as the container tag name OS_DISTRO is used as the base OS distribution. Possible values: ubuntu OS_RELEASE is used as the OS version. Possible values: disco, eoan # MANIFEST The version of MANIFEST is created by the set of Agama packages from the Agama repository and name-mangling them to be a VERSION declaration: For example: libgl1-mesa-glx_19.0.1-agama-109_amd64.deb is changed to: LIBGL1_MESA_GLX_VERSION=19.0.1-agama-109 This allows the Dockerfile templates version pin Agama packages: ```Dockerfile RUN apt-get install -y libgl1-mesa-glx=$LIBGL1_MESA_GLX_VERSION ``` The `scripts/build-dockerfile` loads MANIFEST, which defines LIBGL1_MESA_GLX_VERSION. That is then subsituted for the version in the above Dockerfile snippet when being placed into the main Dockerfile. # Tagging If the build succeeds, we want to be able to tag the git project as well as corresponding Docker images with the appropriate Agama tag: ```bash . MANIFEST ; git tag -f agama-${AGAMA_VERSION} ```