#!/bin/bash set -e usage() { cat << EOF Usage: $0 [OPTIONS] Build a new Python Docker image. Options: -g, --gpu Build an image with GPU support. -c, --use-cache Use layer cache when building a new image. -b, --base-image-tag TAG Base image tag. Defaults to value defined in DOCKERFILE. EOF } CACHE_FLAG='--no-cache' DOCKERFILE='Dockerfile' IMAGE_TAG='kaggle/python-build' BUILD_ARGS='' while :; do case "$1" in -h|--help) usage exit ;; -g|--gpu) IMAGE_TAG='kaggle/python-gpu-build' DOCKERFILE='gpu.Dockerfile' ;; -c|--use-cache) CACHE_FLAG='' ;; -b|--base-image-tag) if [[ -z $2 ]]; then usage printf 'ERROR: No TAG specified after the %s flag.\n' "$1" >&2 exit fi BUILD_ARGS="--build-arg BASE_TAG=$2" shift # skip the flag value ;; -?*) usage printf 'ERROR: Unknown option: %s\n' "$1" >&2 exit ;; *) break esac shift done BUILD_ARGS+=" --build-arg GIT_COMMIT=$(git rev-parse HEAD)" BUILD_ARGS+=" --build-arg BUILD_DATE=$(date '+%Y%m%d-%H%M%S')" readonly CACHE_FLAG readonly DOCKERFILE readonly IMAGE_TAG readonly BUILD_ARGS set -x docker build --rm --pull $CACHE_FLAG -t "$IMAGE_TAG" -f "$DOCKERFILE" $BUILD_ARGS .