129 lines
5.6 KiB
Bash
Executable File
129 lines
5.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
cd $(cd -P -- "$(dirname -- "$0")" && pwd -P)
|
|
|
|
# Set the path of the generated Dockerfile
|
|
export DOCKERFILE=".build/Dockerfile"
|
|
export STACKS_DIR=".build/docker-stacks"
|
|
# please test the build of the commit in https://github.com/jupyter/docker-stacks/commits/master in advance
|
|
export HEAD_COMMIT="703d8b2dcb886be2fe5aa4660a48fbcef647e7aa"
|
|
|
|
while [[ "$#" -gt 0 ]]; do case $1 in
|
|
-c|--commit) HEAD_COMMIT="$2"; shift;;
|
|
--no-datascience-notebook) no_datascience_notebook=1;;
|
|
--python-only) no_datascience_notebook=1;;
|
|
--no-useful-packages) no_useful_packages=1;;
|
|
-s|--slim) no_datascience_notebook=1 && no_useful_packages=1;;
|
|
*) echo "Unknown parameter passed: $1" &&
|
|
echo "Usage: $0 -c [sha-commit] # set the head commit of the docker-stacks submodule
|
|
(https://github.com/jupyter/docker-stacks/commits/master). default: $HEAD_COMMIT."; exit 1;;
|
|
esac; shift; done
|
|
|
|
|
|
# Clone if docker-stacks doesn't exist, and set to the given commit or the default commit
|
|
ls $STACKS_DIR/README.md > /dev/null 2>&1 || (echo "Docker-stacks was not found, cloning repository" \
|
|
&& git clone https://github.com/jupyter/docker-stacks.git $STACKS_DIR)
|
|
echo "Set docker-stacks to commit '$HEAD_COMMIT'."
|
|
if [[ "$HEAD_COMMIT" == "latest" ]]; then
|
|
echo "WARNING, the latest commit of docker-stacks is used. This may result in version conflicts"
|
|
cd $STACKS_DIR && git pull && cd -
|
|
else
|
|
export GOT_HEAD="false"
|
|
cd $STACKS_DIR && git pull && git reset --hard "$HEAD_COMMIT" > /dev/null 2>&1 && cd - && export GOT_HEAD="true"
|
|
echo "$HEAD"
|
|
if [[ "$GOT_HEAD" == "false" ]]; then
|
|
echo "Error: The given sha-commit is invalid."
|
|
echo "Usage: $0 -c [sha-commit] # set the head commit of the docker-stacks submodule (https://github.com/jupyter/docker-stacks/commits/master)."
|
|
echo "Exiting"
|
|
exit 2
|
|
else
|
|
echo "Set head to given commit."
|
|
fi
|
|
fi
|
|
|
|
# Write the contents into the DOCKERFILE and start with the header
|
|
echo "# This Dockerfile is generated by 'generate-Dockerfile.sh' from elements within 'src/'
|
|
|
|
# **Please do not change this file directly!**
|
|
# To adapt this Dockerfile, adapt 'generate-Dockerfile.sh' or 'src/Dockerfile.usefulpackages'.
|
|
# More information can be found in the README under configuration.
|
|
|
|
" > $DOCKERFILE
|
|
cat src/Dockerfile.header >> $DOCKERFILE
|
|
|
|
echo "
|
|
############################################################################
|
|
#################### Dependency: jupyter/base-image ########################
|
|
############################################################################
|
|
" >> $DOCKERFILE
|
|
cat $STACKS_DIR/base-notebook/Dockerfile | grep -v BASE_CONTAINER >> $DOCKERFILE
|
|
|
|
# copy files that are used during the build:
|
|
cp $STACKS_DIR/base-notebook/jupyter_notebook_config.py .build/
|
|
cp $STACKS_DIR/base-notebook/fix-permissions .build/
|
|
cp $STACKS_DIR/base-notebook/start.sh .build/
|
|
cp $STACKS_DIR/base-notebook/start-notebook.sh .build/
|
|
cp $STACKS_DIR/base-notebook/start-singleuser.sh .build/
|
|
chmod 755 .build/*
|
|
|
|
echo "
|
|
############################################################################
|
|
################# Dependency: jupyter/minimal-notebook #####################
|
|
############################################################################
|
|
" >> $DOCKERFILE
|
|
cat $STACKS_DIR/minimal-notebook/Dockerfile | grep -v BASE_CONTAINER >> $DOCKERFILE
|
|
|
|
echo "
|
|
############################################################################
|
|
################# Dependency: jupyter/scipy-notebook #######################
|
|
############################################################################
|
|
" >> $DOCKERFILE
|
|
cat $STACKS_DIR/scipy-notebook/Dockerfile | grep -v BASE_CONTAINER >> $DOCKERFILE
|
|
|
|
# install Julia and R if not excluded or spare mode is used
|
|
if [[ "$no_datascience_notebook" != 1 ]]; then
|
|
echo "
|
|
############################################################################
|
|
################ Dependency: jupyter/datascience-notebook ##################
|
|
############################################################################
|
|
" >> $DOCKERFILE
|
|
cat $STACKS_DIR/datascience-notebook/Dockerfile | grep -v BASE_CONTAINER >> $DOCKERFILE
|
|
else
|
|
echo "Set 'no-datascience-notebook' = 'python-only', not installing the datascience-notebook with Julia and R."
|
|
fi
|
|
|
|
# Note that the following step also installs the cudatoolkit, which is
|
|
# essential to access the GPU.
|
|
echo "
|
|
############################################################################
|
|
########################## Dependency: gpulibs #############################
|
|
############################################################################
|
|
" >> $DOCKERFILE
|
|
cat src/Dockerfile.gpulibs >> $DOCKERFILE
|
|
|
|
# install useful packages if not excluded or spare mode is used
|
|
if [[ "$no_useful_packages" != 1 ]]; then
|
|
echo "
|
|
############################################################################
|
|
############################ Useful packages ###############################
|
|
############################################################################
|
|
" >> $DOCKERFILE
|
|
cat src/Dockerfile.usefulpackages >> $DOCKERFILE
|
|
else
|
|
echo "Set 'no-useful-packages', not installing stuff within src/Dockerfile.usefulpackages."
|
|
fi
|
|
|
|
# Copy the demo notebooks and change permissions
|
|
cp -r extra/Getting_Started data
|
|
chmod -R 755 data/
|
|
|
|
# Copying config
|
|
cp src/jupyter_notebook_config.json .build/
|
|
echo >> $DOCKERFILE
|
|
echo "# Copy jupyter_notebook_config.json" >> $DOCKERFILE
|
|
echo "COPY jupyter_notebook_config.json /etc/jupyter/" >> $DOCKERFILE
|
|
|
|
#cp $(find $(dirname $DOCKERFILE) -type f | grep -v $STACKS_DIR | grep -v .gitkeep) .
|
|
|
|
echo "GPU Dockerfile was generated successfully in file ${DOCKERFILE}."
|
|
echo "Run 'bash start-local.sh -p [PORT]' to start the GPU-based Juyterlab instance."
|