This repository contains scripts and configurations used to build Determined environment images and deploy them to AWS. To configure a custom image based off an existing Determined image, clone this repository and modify the necessary files/scripts.
Dockerfile.cpuis the main build script for CPU imagesDockerfile.gpuis the main build script for GPU images/scriptscontains scripts for publishing Docker images to repositories/dockerfile_scriptscontains package installation and patch helper scripts for building external packagesMakefilecontains Docker build commands and top-level Docker image configurations (e.g. tags, build arguments, registry info)
To build a custom image:
- Modify an existing recipe in
Makefileor define a new command. - Add/modify any additional scripts needed for the image build
- run
make {build_name}
To publish an image:
- Add a
publishtarget or modify an existing recipe - Change registry info (
DOCKERHUB_REGISTRYandNGC_REGISTRY) inMakefileor specify make args - run
make {publish-target} DOCKERHUB_REGISTRY={registry}
We use Docker Buildx to create multi-platform CPU images. Although docker buildx is more powerful than the ordinary
docker build, it has a limitation: to build a multi-platform image you have to use
docker-container driver that does not allow to export an image so that appears in
docker images (see https://docs.docker.com/engine/reference/commandline/buildx_build/#output). You can only push an image directly to a registry (using --push option).
As a consequence, if you want to test dockerfile changes locally for one of the
multi-platform images (currently, Base CPU, TF 2.7 CPU, and TF 2.8 CPU), without pushing
to a docker registry, you have to modify Makefile or craft your own build command to build a single-platform image.
For example, to build the base image for linux/arm64 (to use on a Mac with M1 processor):
# the default builder uses docker driver
# confirm this with
docker buildx ls
docker buildx build -f Dockerfile-default-cpu \
--platform linux/arm64 \
--build-arg BASE_IMAGE="ubuntu:18.04" \
--build-arg PYTHON_VERSION="$(PYTHON_VERSION)" \
-t $(DOCKERHUB_REGISTRY)/$(CPU_PY_38_BASE_NAME)-$(SHORT_GIT_HASH) \
-t $(DOCKERHUB_REGISTRY)/$(CPU_PY_38_BASE_NAME)-$(VERSION) \
-o type=image,push=false \
.