197 lines
7.8 KiB
Docker
Executable File
197 lines
7.8 KiB
Docker
Executable File
# syntax=docker/dockerfile:1
|
|
# Copyright (c) Jupyter Development Team.
|
|
# Distributed under the terms of the Modified BSD License.
|
|
# https://github.com/jupyter/docker-stacks/blob/main/images/base-notebook/Dockerfile
|
|
ARG REGISTRY=quay.io
|
|
ARG OWNER=jupyter
|
|
ARG BASE_CONTAINER=$REGISTRY/$OWNER/docker-stacks-foundation
|
|
FROM $BASE_CONTAINER
|
|
|
|
LABEL maintainer="Jupyter Project <jupyter@googlegroups.com>"
|
|
|
|
# Fix: https://github.com/hadolint/hadolint/wiki/DL4006
|
|
# Fix: https://github.com/koalaman/shellcheck/wiki/SC3014
|
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
|
|
|
USER root
|
|
|
|
# Install all OS dependencies for the Server that starts but lacks all
|
|
# features (e.g., download as all possible file formats)
|
|
RUN apt-get update --yes && \
|
|
apt-get install --yes --no-install-recommends \
|
|
fonts-liberation \
|
|
# - pandoc is used to convert notebooks to html files
|
|
# it's not present in the aarch64 Ubuntu image, so we install it here
|
|
pandoc \
|
|
# - run-one - a wrapper script that runs no more
|
|
# than one unique instance of some command with a unique set of arguments,
|
|
# we use `run-one-constantly` to support the `RESTARTABLE` option
|
|
run-one && \
|
|
apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
|
|
USER ${NB_UID}
|
|
|
|
# Install JupyterLab, Jupyter Notebook, JupyterHub and NBClassic
|
|
# Generate a Jupyter Server config
|
|
# Cleanup temporary files
|
|
# Correct permissions
|
|
# Do all this in a single RUN command to avoid duplicating all of the
|
|
# files across image layers when the permissions change
|
|
WORKDIR /tmp
|
|
RUN mamba install --yes \
|
|
'jupyterlab' \
|
|
'notebook' \
|
|
'jupyterhub' \
|
|
'nbclassic' && \
|
|
jupyter server --generate-config && \
|
|
mamba clean --all -f -y && \
|
|
npm cache clean --force && \
|
|
jupyter lab clean && \
|
|
rm -rf "/home/${NB_USER}/.cache/yarn" && \
|
|
fix-permissions "${CONDA_DIR}" && \
|
|
fix-permissions "/home/${NB_USER}"
|
|
|
|
ENV JUPYTER_PORT=8888
|
|
EXPOSE $JUPYTER_PORT
|
|
|
|
# Configure container startup
|
|
CMD ["start-notebook.py"]
|
|
|
|
# Copy local files as late as possible to avoid cache busting
|
|
COPY start-notebook.py start-notebook.sh start-singleuser.py start-singleuser.sh /usr/local/bin/
|
|
COPY jupyter_server_config.py docker_healthcheck.py /etc/jupyter/
|
|
|
|
# Fix permissions on /etc/jupyter as root
|
|
USER root
|
|
RUN fix-permissions /etc/jupyter/
|
|
|
|
# HEALTHCHECK documentation: https://docs.docker.com/engine/reference/builder/#healthcheck
|
|
# This healtcheck works well for `lab`, `notebook`, `nbclassic`, `server`, and `retro` jupyter commands
|
|
# https://github.com/jupyter/docker-stacks/issues/915#issuecomment-1068528799
|
|
HEALTHCHECK --interval=5s --timeout=3s --start-period=5s --retries=3 \
|
|
CMD /etc/jupyter/docker_healthcheck.py || exit 1
|
|
|
|
# here add
|
|
ARG CREATE_USER="jovyan"
|
|
ARG CREATE_USER_PASSWD="password"
|
|
ARG ROOT_PASSWD="password"
|
|
ARG HOME="/home/${CREATE_USER}"
|
|
ARG DEBIAN_FRONTEND="noninteractive"
|
|
ENV DEBIAN_FRONTEND=${DEBIAN_FRONTEND}
|
|
ARG NODEJS_VERSION='18'
|
|
ENV NODEJS_VERSION=${NODEJS_VERSION}
|
|
|
|
COPY install.sh /tmp
|
|
RUN <<EOT
|
|
#!/bin/bash
|
|
# 更新软件源
|
|
apt-get update
|
|
# 安装时区数据包并设置时区
|
|
apt-get install -y tzdata
|
|
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
|
echo 'Asia/Shanghai' > /etc/timezone
|
|
dpkg-reconfigure -f noninteractive tzdata
|
|
# 安装所需的软件包
|
|
sudo apt-get remove --purge libnode72:amd64 -y
|
|
curl -fsSL https://deb.nodesource.com/setup_${NODEJS_VERSION}.x | sudo -E bash -
|
|
apt-get install -y python3 python3-pip gcc g++ build-essential nodejs npm gdebi-core curl wget openssh-server vim lrzsz net-tools sudo git nodejs
|
|
npm install -g configurable-http-proxy yarn --registry=https://registry.npmmirror.com
|
|
# 创建新用户
|
|
useradd -m -s /bin/bash ${CREATE_USER}
|
|
echo "${CREATE_USER}:${CREATE_USER_PASSWD}" | chpasswd
|
|
echo "${CREATE_USER} ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers
|
|
EOT
|
|
|
|
# 安装 Jupyter 和相关软件
|
|
RUN <<EOT
|
|
#!/bin/bash
|
|
python3 -m pip install ipython jupyterhub jupyterlab notebook jupyter_packaging -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
|
python3 -m pip install aiohttp -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
|
python3 -m pip install jupyterhub jupyterlab notebook radian pycurl aiohttp jupyter-rsession-proxy ipykernel>=6.25.0 jupyterlab-language-pack-zh-CN jupyterlab-git jupyterlab-system-monitor jupyter_nbextensions_configurator jupyter_contrib_nbextensions jupyterlab_widgets jupyterlab-drawio jupyterlab-spreadsheet-editor jupyterlab-cell-flash jedi-language-server jupyterlab_code_formatter jupyterlab-spellchecker jupyterlab_vim nbresuse ipydrawio jedi ipympl black isort theme-darcula ipywidgets tensorboard jupyterlab_latex jupyter_bokeh autopep8 xeus-python jupyterlab-lsp python-lsp-server dockerspawner jupyterhub-nativeauthenticator lckr_jupyterlab_variableinspector -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
|
EOT
|
|
|
|
ARG RSERVER_VERSION="rstudio-server-2024.09.1-394-amd64.deb"
|
|
ENV RSERVER_VERSION=${RSERVER_VERSION}
|
|
RUN <<EOT
|
|
#!/bin/bash
|
|
# install rserver
|
|
apt update
|
|
apt update -qq
|
|
apt install -y --no-install-recommends software-properties-common dirmngr
|
|
wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
|
|
echo | add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"
|
|
apt-get update
|
|
apt install -y --no-install-recommends r-base
|
|
wget "https://download2.rstudio.org/server/$(lsb_release -cs)/amd64/${RSERVER_VERSION}" -O /tmp/rstudio-server.deb
|
|
chmod +x /tmp/rstudio-server.deb
|
|
gdebi -n /tmp/rstudio-server.deb
|
|
rm -rf /tmp/rstudio-server.deb
|
|
chown -R ${CREATE_USER}:users /home/${CREATE_USER}
|
|
# 清理和减小镜像大小
|
|
apt-get clean
|
|
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/man/?? /usr/share/man/??_*
|
|
EOT
|
|
|
|
# Switch back to jovyan to avoid accidental container runs as root
|
|
USER ${NB_UID}
|
|
|
|
# install mojo
|
|
ARG MODULAR_HOME="/home/${CREATE_USER}/.modular"
|
|
ENV MODULAR_HOME=$MODULAR_HOME
|
|
ENV PATH="$MODULAR_HOME/pkg/packages.modular.com_mojo/bin:/home/${CREATE_USER}/.local/bin:$PATH"
|
|
ARG HTTP_PROXY=""
|
|
ARG HTTPS_PROXY=""
|
|
ARG NO_PROXY="localhost,127.0.0.1"
|
|
ENV HTTP_PROXY=$HTTP_PROXY
|
|
ENV HTTPS_PROXY=$HTTPS_PROXY
|
|
RUN <<EOT
|
|
#!/bin/bash
|
|
curl --retry 5 https://get.modular.com | sh -
|
|
mamba create -n mojo python=3.10 ipykernel ipython nglview -c conda-forge -y
|
|
mamba activate mojo && modular install mojo
|
|
mamba run -n mojo python -m ipykernel install --user --name="mojo" --display-name="mojo_env"
|
|
EOT
|
|
|
|
# Install Rust https://rsproxy.cn/#getStarted
|
|
ENV RUSTUP_DIST_SERVER="https://rsproxy.cn"
|
|
ENV RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"
|
|
ENV PATH="/home/${CREATE_USER}/.cargo/bin:$PATH"
|
|
ENV CARGO_UNSTABLE_SPARSE_REGISTRY="true"
|
|
RUN <<EOT
|
|
#!/bin/bash
|
|
curl --proto '=https' --tlsv1.2 -sSf https://rsproxy.cn/rustup-init.sh | sh -s -- -y
|
|
echo '[source.crates-io]
|
|
replace-with = "rsproxy-sparse"
|
|
[source.rsproxy]
|
|
registry = "https://rsproxy.cn/crates.io-index"
|
|
[source.rsproxy-sparse]
|
|
registry = "sparse+https://rsproxy.cn/index/"
|
|
[registries.rsproxy]
|
|
index = "https://rsproxy.cn/crates.io-index"
|
|
[net]
|
|
git-fetch-with-cli = true' >> ~/.cargo/config.toml
|
|
source $HOME/.cargo/env
|
|
cargo install evcxr_jupyter
|
|
evcxr_jupyter --install
|
|
EOT
|
|
|
|
RUN <<EOT
|
|
#!/bin/bash
|
|
sudo apt update
|
|
sudo apt install -y texlive-full
|
|
mamba create -n torch tensorboard jupyter_packaging pytorch biopython biopandas pymol-open-source mdtraj torchvision torchaudio python=3 ipython requests scienceplots autopep8 ipykernel\
|
|
pandas numpy matplotlib scipy seaborn orange3 -c pytorch -c nvidia -c conda-forge -y
|
|
git clone https://ghproxy.dockless.eu.org/https://github.com/arose/nglview
|
|
cd nglview
|
|
mamba run -n torch python3 setup.py install
|
|
cd js
|
|
rm -rf node_modules package-lock.json
|
|
npm install typescript@latest --registry=https://registry.npmmirror.com
|
|
npm install --registry=https://registry.npmmirror.com
|
|
cd ../..
|
|
mamba run -n torch python -m ipykernel install --user --name="torch" --display-name="torch_env"
|
|
EOT
|
|
|
|
WORKDIR "${HOME}"
|
|
|