forked from vishnu2kmohan/spark-dcos-docker
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Dockerfile-CentOS-cuDNN
167 lines (158 loc) · 9.32 KB
/
Dockerfile-CentOS-cuDNN
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
FROM centos:7.4.1708
LABEL maintainer="Vishnu Mohan <[email protected]>"
ARG CONDA_DIR="/opt/conda"
ARG CONDA_INSTALLER="Miniconda3-4.3.31-Linux-x86_64.sh"
ARG CONDA_MD5="7fe70b214bee1143e3e3f0467b71453c"
ARG CONDA_URL="https://repo.continuum.io/miniconda"
ARG DCOS_COMMONS_URL="https://downloads.mesosphere.com/dcos-commons"
ARG DCOS_COMMONS_VERSION="0.40.3"
ARG GPG_KEYSERVER="hkps://pgp.mit.edu"
ARG HADOOP_VERSION="2.7"
ARG JAVA_HOME="/opt/jdk"
ARG JAVA_URL="https://downloads.mesosphere.com/java"
ARG JAVA_VERSION="8u162"
ARG MESOSPHERE_PREFIX="/opt/mesosphere"
ARG LIBMESOS_BUNDLE_SHA256="875f6500101c7b219feebe05bd8ca68ea98682f974ca7f8efc14cb52790977b0"
ARG LIBMESOS_BUNDLE_URL="https://downloads.mesosphere.com/libmesos-bundle"
ARG LIBMESOS_BUNDLE_VERSION="master-28f8827"
ARG MESOS_JAR_SHA1="0cef8031567f2ef367e8b6424a94d518e76fb8dc"
ARG MESOS_MAVEN_URL="https://repository.apache.org/service/local/repositories/releases/content/org/apache/mesos/mesos"
ARG MESOS_PROTOBUF_JAR_SHA1="189ef74959049521be8f5a1c3de3921eb0117ffb"
ARG MESOS_SANDBOX="/mnt/mesos/sandbox"
ARG MESOS_VERSION="1.5.0"
ARG NVIDIA_GPGKEY_SUM=d1be581509378368edeec8c1eb2958702feedf3bc3d17011adbf24efacce4ab5
ARG NVIDIA_CUDA_MAJOR_VERSION="9-0"
ARG NVIDIA_CUDA_PKG_VERSION="9.0.176-1"
ARG NVIDIA_CUDA_VERSION="9.0"
ARG NVIDIA_CUDA_TOOLS_GPG_KEY="7fa2af80"
ARG NVIDIA_CUDNN_MAJOR_VERSION="7"
ARG NVIDIA_CUDNN_VERSION="7.1.1.5"
ARG NVIDIA_CUDNN_PKG_VERSION="7.1.1.5-1+cuda9.0"
ARG NVIDIA_CUDNN_SUM=""d2038dca6e6070aa6879d827fa6c032c942514a6b9bddf5ade275670ca474b9c
ARG NVIDIA_DISTRO="rhel7"
ARG NVIDIA_URL="http://developer.download.nvidia.com/compute"
ARG REPO="http://cdn-fastly.deb.debian.org"
ARG SPARK_DIST_URL="https://downloads.mesosphere.com/spark"
ARG SPARK_HOME="/opt/spark"
ARG SPARK_VERSION="2.2.1-1"
ARG VCS_REF
ARG VERSION
ENV CODENAME=${CODENAME:-"stretch"} \
CONDA_DIR=${CONDA_DIR:-"/opt/conda"} \
DISTRO=${DISTRO:-"debian"} \
GPG_KEYSERVER=${GPG_KEYSERVER:-"hkps://pgp.mit.edu"} \
JAVA_HOME=${JAVA_HOME:-"/opt/jdk"} \
LANG="en_US.UTF-8" \
LANGUAGE="en_US.UTF-8" \
LC_ALL="en_US.UTF-8" \
MESOSPHERE_PREFIX=${MESOSPHERE_PREFIX:-"/opt/mesosphere}" \
LIBPROCESS_SSL_CA_DIR="${MESOS_SANDBOX}/.ssl" \
LIBPROCESS_SSL_CA_FILE="${MESOS_SANDBOX}.ssl/ca.crt" \
LIBPROCESS_SSL_CERT_FILE="${MESOS_SANDBOX}/.ssl/scheduler.crt" \
LIBPROCESS_SSL_KEY_FILE="${MESOS_SANDBOX}/.ssl/scheduler.key" \
MESOS_AUTHENTICATEE="com_mesosphere_dcos_ClassicRPCAuthenticatee" \
MESOS_MODULES="{\"libraries\": [{\"file\": \"libdcos_security.so\", \"modules\": [{\"name\": \"com_mesosphere_dcos_ClassicRPCAuthenticatee\"}]}]}" \
MESOS_NATIVE_LIBRARY="${MESOSPHERE_PREFIX}/libmesos-bundle/lib/libmesos.so" \
MESOS_NATIVE_JAVA_LIBRARY="${MESOSPHERE_PREFIX}/libmesos-bundle/lib/libmesos.so" \
MESOS_SANDBOX=${MESOS_SANDBOX:-"/mnt/mesos/sandbox"} \
NVIDIA_VISIBLE_DEVICES=all \
NVIDIA_DRIVER_CAPABILITIES=compute,utility \
NVIDIA_REQUIRE_CUDA="cuda>=9.0" \
PATH="${JAVA_HOME}/bin:${SPARK_HOME}/bin:${CONDA_DIR}/bin:${MESOSPHERE_PREFIX}/bin:${PATH}" \
SHELL="/bin/bash" \
SPARK_HOME=${SPARK_HOME:-"/opt/spark"}
# Use OSL for repos
RUN rpm -Uvh http://epel.osuosl.org/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm \
&& sed -i -e 's/^\(mirrorlist.*\)/#\1/g' /etc/yum.repos.d/epel.repo \
&& sed -i -e 's/^#baseurl=.*pub\/epel\/7\/$basearch$/baseurl=http:\/\/epel.osuosl.org\/7\/$basearch\//' /etc/yum.repos.d/epel.repo \
&& yum install yum install --assumeyes --tolerant --quiet epel-release \
&& sed -i -e 's/^\(mirrorlist.*\)/#\1/g' /etc/yum.repos.d/CentOS-Base.repo \
&& sed -i -e 's/^#baseurl=.*$releasever\/os\/$basearch\//baseurl=http\:\/\/centos.osuosl.org\/$releasever\/os\/$basearch\//g' /etc/yum.repos.d/CentOS-Base.repo \
&& sed -i -e 's/^#baseurl=.*$releasever\/updates\/$basearch\//baseurl=http\:\/\/centos.osuosl.org\/$releasever\/updates\/$basearch\//g' /etc/yum.repos.d/CentOS-Base.repo \
&& sed -i -e 's/^#baseurl=.*$releasever\/addons\/$basearch\//baseurl=http\:\/\/centos.osuosl.org\/$releasever\/addons\/$basearch\//g' /etc/yum.repos.d/CentOS-Base.repo \
&& sed -i -e 's/^#baseurl=.*$releasever\/extras\/$basearch\//baseurl=http\:\/\/centos.osuosl.org\/$releasever\/extras\/$basearch\//g' /etc/yum.repos.d/CentOS-Base.repo \
&& sed -i -e 's/^#baseurl=.*$releasever\/centosplus\/$basearch\//baseurl=http\:\/\/centos.osuosl.org\/$releasever\/centosplus\/$basearch\//g' /etc/yum.repos.d/CentOS-Base.repo \
&& sed -i -e 's/^#baseurl=.*$releasever\/contrib\/$basearch\//baseurl=http\:\/\/centos.osuosl.org\/$releasever\/contrib\/$basearch\//g' /etc/yum.repos.d/CentOS-Base.repo \
&& yum upgrade --assumeyes --tolerant --quiet \
&& yum install --assumeyes --tolerant --quiet \
bash-completion \
bzip2 \
ca-certificates \
curl \
deltarpm \
dirmngr \
git \
gnupg \
jq \
openssh-clients \
procps \
rsync \
sudo \
unzip \
vim \
wget \
&& yum clean all
LABEL org.label-schema.build-date=$BUILD_DATE \
org.label-schema.name="Apache Spark" \
org.label-schema.description="Apache Spark is a fast and general engine for large-scale data processing" \
org.label-schema.url="http://spark.apache.org" \
org.label-schema.vcs-ref=$VCS_REF \
org.label-schema.vcs-url="https://github.com/vishnu2kmohan/spark" \
org.label-schema.version=$VERSION \
org.label-schema.schema-version="2.2.1-1.10.5" \
com.nvidia.volumes.needed="nvidia_driver" \
com.nvidia.cuda.version="${CUDA_VERSION}" \
com.nvidia.cudnn.version="${NVIDIA_CUDNN_VERSION}"
COPY spark-root-conda-cudnn-env.yml "${CONDA_DIR}/"
COPY cuda.repo /etc/yum.repos.d/cuda.repo
RUN cd /tmp \
&& curl --retry 3 -fsSL "${NVIDIA_URL}/cuda/repos/${NVIDIA_DISTRO}/x86_64/${NVIDIA_CUDA_TOOLS_GPG_KEY}.pub" | sed '/^Version/d' > /etc/pki/rpm-gpg/RPM-GPG-KEY-NVIDIA \
&& echo "$NVIDIA_GPGKEY_SUM /etc/pki/rpm-gpg/RPM-GPG-KEY-NVIDIA" | sha256sum -c --strict - \
&& yum install --assumeyes --tolerant --quiet \
"cuda-cudart-${NVIDIA_CUDA_MAJOR_VERSION}-${NVIDIA_CUDA_PKG_VERSION}" \
"cuda-libraries-${NVIDIA_CUDA_MAJOR_VERSION}-${NVIDIA_CUDA_PKG_VERSION}" \
"cuda-libraries-dev-${NVIDIA_CUDA_MAJOR_VERSION}-${NVIDIA_CUDA_PKG_VERSION}" \
&& yum clean all \
&& ln -s /usr/local/cuda-9.0 /usr/local/cuda \
&& ln -s /usr/local/cuda-9.0/targets/x86_64-linux/lib/stubs/libcuda.so /usr/local/cuda-9.0/targets/x86_64-linux/lib/libcuda.so.1 \
&& curl --retry 3 -fsSL "${NVIDIA_URL}/redist/cudnn/v7.1.1/cudnn-9.0-linux-x64-v7.1.tgz" -O \
&& echo "${NVIDIA_CUDNN_SUM} cudnn-9.0-linux-x64-v7.1.tgz" | sha256sum -c - \
&& tar --no-same-owner -xzf cudnn-9.0-linux-x64-v7.1.tgz -C /usr/local --wildcards 'cuda/lib64/libcudnn.so.*' \
&& echo "/usr/local/nvidia/lib" >> /etc/ld.so.conf.d/nvidia.conf \
&& echo "/usr/local/nvidia/lib64" >> /etc/ld.so.conf.d/nvidia.conf \
&& mkdir -p "${CONDA_DIR}" "${JAVA_HOME}" "${SPARK_HOME}" \
&& mkdir -p "${MESOSPHERE_PREFIX}" "${MESOSPHERE_PREFIX}/bin" \
&& curl --retry 3 -fsSL -O "${LIBMESOS_BUNDLE_URL}/libmesos-bundle-${LIBMESOS_BUNDLE_VERSION}.tar.gz" \
&& echo "${LIBMESOS_BUNDLE_SHA256}" "libmesos-bundle-${LIBMESOS_BUNDLE_VERSION}.tar.gz" | sha256sum -c - \
&& tar xf "libmesos-bundle-${LIBMESOS_BUNDLE_VERSION}.tar.gz" -C "${MESOSPHERE_PREFIX}" \
&& rm "libmesos-bundle-${LIBMESOS_BUNDLE_VERSION}.tar.gz" \
&& echo "${MESOSPHERE_PREFIX}/libmesos-bundle/lib" >> /etc/ld.so.conf.d/libmesos.conf \
&& cd "${MESOSPHERE_PREFIX}/libmesos-bundle/lib" \
&& curl --retry 3 -fsSL -O "${MESOS_MAVEN_URL}/${MESOS_VERSION}/mesos-${MESOS_VERSION}.jar" \
&& echo "${MESOS_JAR_SHA1} mesos-${MESOS_VERSION}.jar" | sha1sum -c - \
&& curl --retry 3 -fsSL -O "${MESOS_MAVEN_URL}/${MESOS_VERSION}/mesos-${MESOS_VERSION}-shaded-protobuf.jar" \
&& echo "${MESOS_PROTOBUF_JAR_SHA1} mesos-${MESOS_VERSION}-shaded-protobuf.jar" | sha1sum -c - \
&& cd /tmp \
&& curl --retry 3 -fsSL -O "${DCOS_COMMONS_URL}/artifacts/${DCOS_COMMONS_VERSION}/bootstrap.zip" \
&& unzip "bootstrap.zip" -d "${MESOSPHERE_PREFIX}/bin/" \
&& curl --retry 3 -fsSL -O "${JAVA_URL}/server-jre-${JAVA_VERSION}-linux-x64.tar.gz" \
&& tar xf "server-jre-${JAVA_VERSION}-linux-x64.tar.gz" -C "${JAVA_HOME}" --strip-components=1 \
&& curl --retry 3 -fsSL -O "${SPARK_DIST_URL}/assets/spark-${SPARK_VERSION}-bin-${HADOOP_VERSION}.tgz" \
&& tar xf "spark-${SPARK_VERSION}-bin-${HADOOP_VERSION}.tgz" -C "${SPARK_HOME}" --strip-components=1 \
&& chmod -R ugo+rw "${SPARK_HOME}" \
&& curl --retry 3 -fsSL -O "$CONDA_URL/$CONDA_INSTALLER" \
&& echo "$CONDA_MD5 $CONDA_INSTALLER" | md5sum -c - \
&& bash "./$CONDA_INSTALLER" -u -b -p "$CONDA_DIR" \
&& $CONDA_DIR/bin/conda config --system --prepend channels conda-forge \
&& $CONDA_DIR/bin/conda config --system --set auto_update_conda false \
&& $CONDA_DIR/bin/conda config --system --set show_channel_urls true \
&& $CONDA_DIR/bin/conda update --json --all -yq \
&& $CONDA_DIR/bin/conda env update --json -q -f "${CONDA_DIR}/spark-root-conda-cudnn-env.yml" \
&& $CONDA_DIR/bin/conda clean --json -tipsy \
&& rm -rf /root/.cache/pip/* \
&& rm -rf /tmp/* \
&& ldconfig
COPY conf/ "${SPARK_HOME}/conf/"
COPY krb5.conf.mustache /etc/
COPY mesos-dispatcher-start.sh "${MESOSPHERE_PREFIX}/bin"
WORKDIR "${SPARK_HOME}"