-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDockerfile
273 lines (207 loc) · 8.59 KB
/
Dockerfile
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
ARG ROOT_CONTAINER="jupyter/base-notebook:lab-4.0.7"
FROM ${ROOT_CONTAINER} as base
ARG CLASS
ARG SQLITE
ARG PYTHON_VERSION
USER ${NB_UID}
RUN fix-permissions "${CONDA_DIR}" && \
fix-permissions "/home/${NB_USER}"
USER root
# RUN apt-get update && \
# apt-get install -y software-properties-common && \
# add-apt-repository universe && \
# add-apt-repository ppa:git-core/ppa && \
# apt update
USER ${NB_UID}
RUN fix-permissions "${CONDA_DIR}" && \
fix-permissions "/home/${NB_USER}"
USER root
RUN apt-get update && \
apt-get install -yq --no-install-recommends \
vim \
emacs \
ripgrep \
fd-find \
nano-tiny \
tzdata \
less \
git \
wget \
unzip \
openssh-client \
# nbconvert dependencies
# https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex
texlive-xetex \
texlive-latex-recommended \
texlive-fonts-recommended \
texlive-plain-generic \
pandoc \
dvipng && \
apt-get clean && rm -rf /var/lib/apt/lists/*
USER ${NB_UID}
RUN fix-permissions "${CONDA_DIR}" && \
fix-permissions "/home/${NB_USER}"
USER root
RUN fc-cache -fsv
RUN mktexlsr
#------------ Install VSCode Server a Root----------------------------
ENV VS_CODE_VERSION=4.91.1
RUN mkdir /opt/code-server
WORKDIR /opt/code-server
RUN wget -qO- https://github.com/coder/code-server/releases/download/v${VS_CODE_VERSION}/code-server-${VS_CODE_VERSION}-linux-amd64.tar.gz | tar zxvf - --strip-components=1
ENV PATH=/opt/code-server:/opt/code-server/bin:$PATH
#------------ Install Lab Extensions in base environment as NB_USER----------------------------
USER ${NB_UID}
RUN ls -la
RUN fix-permissions "${CONDA_DIR}" && \
fix-permissions "/home/${NB_USER}"
COPY requirements/common/ /tmp/
RUN mamba install -y -c conda-forge --file /tmp/requirements.txt && \
mamba clean --all -f -y
RUN ls -la
RUN fix-permissions "${CONDA_DIR}" && \
fix-permissions "/home/${NB_USER}"
RUN if [ "$SQLITE" = "true" ] ; then \
mamba install -y -c conda-forge xeus-sqlite && \
mamba clean --all -f -y ; \
fi
# Install jupyterlab git extension, this must come before installing extensions with pip (layer below)
# RUN jupyter labextension install '@jupyterlab/git' --no-build && \
# npm cache clean --force
RUN pip install --upgrade -r /tmp/requirements.pip.txt
RUN fix-permissions "${CONDA_DIR}" && \
fix-permissions "/home/${NB_USER}"
# Install and Enable Extensions
# RUN jupyter serverextension enable --py 'jupyterlab_git' --sys-prefix && \
# jupyter serverextension enable --py 'nbgitpuller' --sys-prefix && \
# jupyter nbextension install 'rise' --py --sys-prefix && \
# jupyter nbextension enable 'rise' --py --sys-prefix && \
# jupyter serverextension enable --sys-prefix --py 'jupyter_server_proxy' && \
# jupyter labextension install '@jupyterlab/server-proxy' --no-build && \
# jupyter nbextension install 'jupytext' --py --sys-prefix && \
# jupyter nbextension enable 'jupytext' --py --sys-prefix && \
# # jupyter serverextension enable --sys-prefix 'jupyterlab_latex' && \
# # jupyter labextension install '@jupyterlab/latex' --no-build && \
# # jupyter labextension install '@jupyter-widgets/[email protected]' '[email protected]' --no-build && \
# jupyter lab build && \
# jupyter lab clean -y && \
# npm cache clean --force && \
# rm -rf "/home/${NB_USER}/.cache/yarn" && \
# rm -rf "/home/${NB_USER}/.node-gyp" && \
# fix-permissions "${CONDA_DIR}" && \
# fix-permissions "/home/${NB_USER}"
# Overwrite default latex/jupyter template to include above fonts
COPY --chown=${NB_UID}:${NB_GID} scripts/style_jupyter.tplx /opt/conda/lib/python3.10/site-packages/nbconvert/templates/latex/style_jupyter.tplx
RUN fix-permissions $CONDA_DIR && \
fix-permissions /home/$NB_USER
# De-activate the default kernel spec
COPY scripts/jupyter_config.py /etc/jupyter/jupyter_config.py
RUN jupyter kernelspec remove -f python3
####################################################################
# Create Class Conda environment
COPY --chown=${NB_UID}:${NB_GID} requirements/classes/${CLASS} /home/$NB_USER/tmp/
COPY --chown=${NB_UID}:${NB_GID} requirements/classes/${CLASS}/condarc /home/$NB_USER/.mambarc
COPY --chown=${NB_UID}:${NB_GID} requirements/classes/${CLASS}/condarc /home/$NB_USER/.condarc
RUN mamba create --quiet --yes -p ${CONDA_DIR}/envs/${CLASS} python=${PYTHON_VERSION} && \
mamba install -y --name ${CLASS} --file /home/$NB_USER/tmp/requirements.txt && \
mamba clean --all -f -y
RUN fix-permissions $CONDA_DIR && \
fix-permissions /home/$NB_USER
# Link conda environment to Jupyter system-wide
USER root
RUN $CONDA_DIR/envs/${CLASS}/bin/python -m ipykernel install --name=${CLASS} --display-name "Python 3"
RUN fix-permissions $CONDA_DIR && \
fix-permissions /home/$NB_USER
USER $NB_USER
# Modify the path directly since the `source activate ${CLASS}`
# environment won't be preserved here.
ENV PATH ${CONDA_DIR}/envs/${CLASS}/bin:$PATH
RUN fix-permissions $CONDA_DIR && \
fix-permissions /home/$NB_USER
# Class-specific pip installs
RUN $CONDA_DIR/envs/${CLASS}/bin/pip install -r /home/$NB_USER/tmp/requirements.pip.txt && \
fix-permissions $CONDA_DIR && \
fix-permissions /home/$NB_USER
# make class environment to be the default one
ENV CONDA_DEFAULT_ENV ${CLASS}
# Switch back to jovyan to avoid accidental container runs as root
USER $NB_UID
WORKDIR $HOME
####################################################################
# Add R pre-requisites
FROM base as r_lang
ARG NB_USER="jovyan"
ARG NB_UID="1000"
ARG NB_GID="100"
ARG CLASS
USER root
RUN apt-get update && \
apt-get install -y --no-install-recommends \
fonts-dejavu \
unixodbc \
unixodbc-dev \
r-cran-rodbc \
gfortran \
gcc && \
rm -rf /var/lib/apt/lists/*
# Fix for devtools https://github.com/conda-forge/r-devtools-feedstock/issues/4
RUN ln -s /bin/tar /bin/gtar
USER $NB_UID
WORKDIR $HOME
RUN mamba install -y -p ${CONDA_DIR} -c conda-forge r-irkernel && \
mamba clean --all -f -y && \
fix-permissions $CONDA_DIR && \
fix-permissions /home/$NB_USER
# Install necessary R packages along with their dependencies
RUN Rscript /home/$NB_USER/tmp/packages.R
####################################################################
# Add Julia pre-requisites
FROM r_lang as r_julia
ARG NB_USER="jovyan"
ARG NB_UID="1000"
ARG NB_GID="100"
ARG CLASS
USER root
# Julia dependencies
ENV JULIA_DEPOT_PATH=/opt/julia
ENV JULIA_PKGDIR=/opt/julia
ENV JULIA_VERSION=1.10.4
ENV JULIA_TAG=v1.10.4
COPY requirements/classes/${CLASS}/julia_env/Project.toml $JULIA_PKGDIR/environments/$JULIA_TAG/
COPY requirements/classes/${CLASS}/julia_env/Manifest.toml $JULIA_PKGDIR/environments/$JULIA_TAG/
RUN fix-permissions ${JULIA_PKGDIR}
WORKDIR /tmp
# hadolint ignore=SC2046
RUN mkdir "/opt/julia-${JULIA_VERSION}" && \
wget -q https://julialang-s3.julialang.org/bin/linux/x64/$(echo "${JULIA_VERSION}" | cut -d. -f 1,2)"/julia-${JULIA_VERSION}-linux-x86_64.tar.gz" && \
echo "079f61757c3b5b40d2ade052b3cc4816f50f7ef6df668825772562b3746adff1 *julia-${JULIA_VERSION}-linux-x86_64.tar.gz" | sha256sum -c - && \
tar xzf "julia-${JULIA_VERSION}-linux-x86_64.tar.gz" -C "/opt/julia-${JULIA_VERSION}" --strip-components=1 && \
rm "/tmp/julia-${JULIA_VERSION}-linux-x86_64.tar.gz"
RUN ln -fs /opt/julia-*/bin/julia /usr/local/bin/julia
# Show Julia where conda libraries are \
RUN mkdir /etc/julia && \
echo "push!(Libdl.DL_LOAD_PATH, \"$CONDA_DIR/lib\")" >> /etc/julia/juliarc.jl && \
chown "${NB_USER}" "${JULIA_PKGDIR}"
USER $NB_UID
# Add Julia packages. Instantiate Julia env from files.
#
# Install IJulia as jovyan and then move the kernelspec out
# to the system share location. Avoids problems with runtime UID change not
# taking effect properly on the .local folder in the jovyan home dir.
RUN julia -e 'import Pkg; Pkg.update()' && \
julia -e "using Pkg; pkg\"add IJulia\"; pkg\"precompile\"" && \
# move kernelspec out of home \
mv "${HOME}/.local/share/jupyter/kernels/julia"* "${CONDA_DIR}/share/jupyter/kernels/" && \
chmod -R go+rx "${CONDA_DIR}/share/jupyter" && \
rm -rf "${HOME}/.local" && \
fix-permissions "${JULIA_PKGDIR}" "${CONDA_DIR}/share/jupyter"
RUN julia -e 'import Pkg; Pkg.update(); Pkg.instantiate(); Pkg.precompile();' && \
julia -e "using Pkg; pkg\"add WebIO\""
USER root
RUN /opt/conda/bin/python -m pip install webio_jupyter_extension
USER $NB_UID
ENV JULIA_DEPOT_PATH="$HOME/.julia:$JULIA_DEPOT_PATH"
USER $NB_UID
WORKDIR $HOME