Skip to content

Instantly share code, notes, and snippets.

@ricardodeazambuja
Created January 31, 2019 18:20
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ricardodeazambuja/bdd59d9e2e9bae67313c8f6bd3da76a8 to your computer and use it in GitHub Desktop.
Save ricardodeazambuja/bdd59d9e2e9bae67313c8f6bd3da76a8 to your computer and use it in GitHub Desktop.
# Copyright 2018 The TensorFlow Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============================================================================
#
# This docker file was based on the dockerfile I obtained here:
# https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/dockerfiles/dockerfiles/gpu-jupyter.Dockerfile
#
# That's why I kept the copyright message above... however I changed/added a lot of stuff
# and fixed a bug where the autocomplete would not work because the image had no user home dir for UID 1000...
# I probably copied more stuff from other people's dockerfiles, but I forgot to take notes :(
# Life improvement if you are using VSCode:
# https://github.com/Microsoft/vscode-docker/issues/20#issuecomment-265326237
ARG UBUNTU_VERSION=16.04
FROM nvidia/cuda:9.0-base-ubuntu${UBUNTU_VERSION} as base
# My GeForce 940MX only works up to cuda9.0, anything above that will fail.
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
cuda-command-line-tools-9-0 \
cuda-cublas-9-0 \
cuda-cufft-9-0 \
cuda-curand-9-0 \
cuda-cusolver-9-0 \
cuda-cusparse-9-0 \
curl \
libcudnn7=7.2.1.38-1+cuda9.0 \
libnccl2=2.2.13-1+cuda9.0 \
libfreetype6-dev \
libhdf5-serial-dev \
libpng12-dev \
libzmq3-dev \
pkg-config \
rsync \
software-properties-common \
unzip \
&& \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN apt-get update && \
apt-get install nvinfer-runtime-trt-repo-ubuntu1604-4.0.1-ga-cuda9.0 && \
apt-get update && \
apt-get install libnvinfer4=4.1.2-1+cuda9.0 \
&& \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN file="$(ls -1 /usr/local/)" && echo $file
RUN apt-get -y update
RUN apt-get install -y --fix-missing \
build-essential \
cmake \
gfortran \
git \
wget \
curl \
graphicsmagick \
libgraphicsmagick1-dev \
libatlas-dev \
libavcodec-dev \
libavformat-dev \
libboost-all-dev \
libgtk2.0-dev \
libjpeg-dev \
liblapack-dev \
libswscale-dev \
pkg-config \
python3-dev \
python3-numpy \
software-properties-common \
zip \
&& apt-get clean && rm -rf /tmp/* /var/tmp/*
# For CUDA profiling, TensorFlow requires CUPTI.
ENV LD_LIBRARY_PATH /usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
ARG PYTHON=python3
ARG PIP=pip3
# See http://bugs.python.org/issue19846
ENV LANG C.UTF-8
RUN apt-get update && apt-get install -y \
${PYTHON} \
${PYTHON}-pip
RUN ${PIP} --no-cache-dir install --upgrade \
pip \
setuptools
# Some TF tools expect a "python" binary
RUN ln -s $(which ${PYTHON}) /usr/local/bin/python
# Options:
# tensorflow
# tensorflow-gpu
# tf-nightly
# tf-nightly-gpu
ARG TF_PACKAGE=tensorflow-gpu
RUN ${PIP} --no-cache-dir install ${TF_PACKAGE}
COPY bashrc /etc/bash.bashrc
RUN chmod a+rwx /etc/bash.bashrc
RUN ${PIP} --no-cache-dir install jupyter matplotlib pyinstrument
# RUN ${PIP} install jupyter matplotlib o pencv-python opencv-contrib-python pyinstrument
# Core linux dependencies.
RUN apt-get install -y --fix-missing \
build-essential \
cmake \
curl \
gfortran \
graphicsmagick \
git \
wget \
unzip \
yasm \
pkg-config \
libswscale-dev \
libtbb2 \
libtbb-dev \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libgraphicsmagick1-dev \
libjasper-dev \
libavformat-dev \
libhdf5-dev \
libpq-dev \
libgraphicsmagick1-dev \
libatlas-dev \
libavcodec-dev \
libboost-all-dev \
libgtk2.0-dev \
liblapack-dev \
liblapacke-dev \
libswscale-dev \
libcanberra-gtk-module \
libboost-dev \
libboost-all-dev \
libeigen3-dev \
# python3.6 \
python3-dev \
python3-numpy \
python3-scipy \
software-properties-common \
zip \
vim \
qt5-default \
&& apt-get clean && rm -rf /tmp/* /var/tmp/*
RUN ${PIP} --no-cache-dir install \
hdf5storage \
h5py \
py3nvml \
scikit-image \
scikit-learn
#
# OpenCV - compiles it with CUDA support
#
# To enable/disable CUDA support, you just need to change/exclude some of
# the build options like -DWITH_CUDA=ON (OFF), etc
WORKDIR /
RUN wget -O opencv.zip https://github.com/opencv/opencv/archive/4.0.1.zip
RUN wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.0.1.zip
RUN unzip opencv.zip
RUN unzip opencv_contrib.zip
RUN mv opencv-4.0.1 opencv
RUN mv opencv_contrib-4.0.1 opencv_contrib
RUN mkdir /opencv/build
WORKDIR /opencv/build
# ENV PATH="PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}"
# ENV LD_LIBRARY_PATH="LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"
# https://stackoverflow.com/questions/46584000/cmake-error-variables-are-set-to-notfound
# cmake -D CMAKE_BUILD_TYPE=RELEASE \
# -D CMAKE_INSTALL_PREFIX=/usr/local \
# -D INSTALL_PYTHON_EXAMPLES=ON \
# -D INSTALL_C_EXAMPLES=OFF \
# -D OPENCV_EXTRA_MODULES_PATH=/home/nicbet/Repositories/github.com/opencv/opencv_contrib/modules \
# -D PYTHON_EXECUTABLE=~/.virtualenvs/py3cv4/bin/python \
# -D BUILD_EXAMPLES=ON \
# -D WITH_CUDA=ON \
# -D CUDA_TOOLKIT_ROOT_DIR=/opt/cuda/9.2 ..
RUN cmake -DBUILD_TIFF=ON \
-DBUILD_opencv_java=OFF \
-DWITH_CUDA=ON \
-DENABLE_FAST_MATH=1 \
-DCUDA_FAST_MATH=1 \
-DWITH_CUBLAS=1 \
-DENABLE_AVX=ON \
-DWITH_OPENGL=ON \
# -DWITH_OPENCL=OFF \
-DWITH_IPP=ON \
-DWITH_TBB=ON \
-DWITH_EIGEN=ON \
-DWITH_V4L=ON \
# -DBUILD_TESTS=OFF \
# -DBUILD_PERF_TESTS=OFF \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=$(python -c "import sys; print(sys.prefix)") \
-DPYTHON_EXECUTABLE=$(which python) \
-DPYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-DPYTHON_PACKAGES_PATH=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") .. \
-DINSTALL_PYTHON_EXAMPLES=ON \
-DINSTALL_C_EXAMPLES=OFF \
-DOPENCV_ENABLE_NONFREE=ON \
-DOPENCV_EXTRA_MODULES_PATH=/opencv_contrib/modules \
-DBUILD_EXAMPLES=ON \
-D CUDA_TOOLKIT_ROOT_DIR=/opt/cuda/9.0 \
-DWITH_QT=ON ..
RUN make -j4 \
&& make install \
&& rm /opencv.zip \
&& rm /opencv_contrib.zip \
&& rm -rf /opencv \
&& rm -rf /opencv_contrib
WORKDIR /
# dlib
RUN cd ~ && \
mkdir -p dlib && \
git clone -b 'v19.16' --single-branch https://github.com/davisking/dlib.git dlib/ && \
cd dlib/ && \
python3 setup.py install --yes USE_AVX_INSTRUCTIONS --yes DLIB_USE_CUDA --clean
RUN mkdir -p /tf/tensorflow-tutorials && chmod -R a+rwx /tf/
RUN mkdir /.local && chmod a+rwx /.local
RUN apt-get install -y --no-install-recommends wget
WORKDIR /tf/tensorflow-tutorials
RUN wget https://raw.githubusercontent.com/tensorflow/docs/master/site/en/tutorials/keras/basic_classification.ipynb
RUN wget https://raw.githubusercontent.com/tensorflow/docs/master/site/en/tutorials/keras/basic_text_classification.ipynb
RUN wget https://raw.githubusercontent.com/tensorflow/docs/master/site/en/tutorials/keras/overfit_and_underfit.ipynb
RUN wget https://raw.githubusercontent.com/tensorflow/docs/master/site/en/tutorials/keras/save_and_restore_models.ipynb
RUN apt-get autoremove -y && apt-get remove -y wget
WORKDIR /tf
EXPOSE 8888
RUN useradd -ms /bin/bash container_user
RUN ${PYTHON} -m ipykernel.kernelspec
# CMD ["bash", "-c", "source /etc/bash.bashrc && jupyter notebook --notebook-dir=/tf --ip 0.0.0.0 --allow-root"]
CMD ["bash", "-c", "source /etc/bash.bashrc && jupyter notebook --notebook-dir=/tf --ip 0.0.0.0 --no-browser --allow-root --NotebookApp.custom_display_url='http://localhost:8888'"]
@daddydrac
Copy link

Step 17/48 : COPY bashrc /etc/bash.bashrc
COPY failed: stat /var/snap/docker/common/var-lib-docker/tmp/docker-builder124011368/bashrc: no such file or directory

@daddydrac
Copy link

I upgraded this for CUDA 10 etc, but it still throws errors, can you help out?

@ricardodeazambuja
Copy link
Author

@joehoeller, the error is related to the 'bashrc' file. You need to create a file called 'bashrc' (in the same folder where you call docker build) with this content:

# Copyright 2018 The TensorFlow Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ==============================================================================

export PS1="\[\e[31m\]tf-docker\[\e[m\] \[\e[33m\]\w\[\e[m\] > "
export TERM=xterm-256color
alias grep="grep --color=auto"
alias ls="ls --color=auto"

echo -e "\e[1;31m"
cat<<TF
________                               _______________                
___  __/__________________________________  ____/__  /________      __
__  /  _  _ \_  __ \_  ___/  __ \_  ___/_  /_   __  /_  __ \_ | /| / /
_  /   /  __/  / / /(__  )/ /_/ /  /   _  __/   _  / / /_/ /_ |/ |/ / 
/_/    \___//_/ /_//____/ \____//_/    /_/      /_/  \____/____/|__/
TF
echo -e "\e[0;33m"

if [[ $EUID -eq 0 ]]; then
  cat <<WARN
WARNING: You are running this container as root, which can cause new files in
mounted volumes to be created as the root user on your host machine.
To avoid this, run the container by specifying your user's userid:
$ docker run -u \$(id -u):\$(id -g) args...
WARN
else
  cat <<EXPL
You are running this container as user with ID $(id -u) and group $(id -g),
which should map to the ID and group for your user on the Docker host. Great!
EXPL
fi

# Turn off colors
echo -e "\e[m"

@ricardodeazambuja
Copy link
Author

...or you can just comment out this line from the Dockerfile and change the last line by deleting the source /etc/bash.bashrc &&

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment