Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Allen Institute OpenScope image #233

Merged
merged 12 commits into from
Feb 19, 2025
4 changes: 3 additions & 1 deletion .github/workflows/docker-push.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ jobs:
include:
- tag: latest
dockerfile: Dockerfile
- tag: latest
dockerfile: Dockerfile.openscope
- tag: latest-allensdk
dockerfile: Dockerfile.allensdk
- tag: latest-gpu
Expand Down Expand Up @@ -51,4 +53,4 @@ jobs:
tags: |
${{ secrets.DOCKERHUB_DANDIHUB_USERNAME }}/dandihub:${{ matrix.tag }}
cache-from: type=registry,ref=${{ secrets.DOCKERHUB_DANDIHUB_USERNAME }}/dandihub:${{ matrix.tag }}
cache-to: type=inline
cache-to: type=inline
4 changes: 3 additions & 1 deletion .github/workflows/docker-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ jobs:
include:
- tag: latest
dockerfile: Dockerfile
- tag: latest
dockerfile: Dockerfile.openscope
- tag: latest-allensdk
dockerfile: Dockerfile.allensdk
- tag: latest-gpu
Expand All @@ -41,4 +43,4 @@ jobs:
file: ./images/${{ matrix.dockerfile }}
push: false
cache-from: type=registry,ref=${{ secrets.DOCKERHUB_DANDIHUB_USERNAME }}/dandihub:${{ matrix.tag }}
cache-to: type=inline
cache-to: type=inline
25 changes: 25 additions & 0 deletions envs/shared/jupyterhub.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ singleuser:
default: true
kubespawner_override:
image: "${singleuser_image_repo}:${singleuser_image_tag}-allensdk"
openscope:
display_name: "OpenScope"
default: true
kubespawner_override:
image: "${singleuser_image_repo}:${singleuser_image_tag}-openscope"
kubespawner_override:
image_pull_policy: Always
cpu_limit: 2
Expand Down Expand Up @@ -109,6 +114,11 @@ singleuser:
default: true
kubespawner_override:
image: "${singleuser_image_repo}:${singleuser_image_tag}-allensdk"
openscope:
display_name: "OpenScope"
default: true
kubespawner_override:
image: "${singleuser_image_repo}:${singleuser_image_tag}-openscope"
matlab:
display_name: "MATLAB (must provide your own license)"
kubespawner_override:
Expand Down Expand Up @@ -143,6 +153,11 @@ singleuser:
display_name: "MATLAB (must provide your own license)"
kubespawner_override:
image: "${singleuser_image_repo}:${singleuser_image_tag}-matlab"
openscope:
display_name: "OpenScope"
default: true
kubespawner_override:
image: "${singleuser_image_repo}:${singleuser_image_tag}-openscope"
kubespawner_override:
image_pull_policy: Always
cpu_limit: 24
Expand All @@ -167,6 +182,11 @@ singleuser:
default: true
kubespawner_override:
image: "${singleuser_image_repo}:${singleuser_image_tag}-allensdk"
openscope:
display_name: "OpenScope"
default: true
kubespawner_override:
image: "${singleuser_image_repo}:${singleuser_image_tag}-openscope"
matlab:
display_name: "MATLAB (must provide your own license)"
kubespawner_override:
Expand Down Expand Up @@ -195,6 +215,11 @@ singleuser:
default: true
kubespawner_override:
image: "${singleuser_image_repo}:${singleuser_image_tag}-gpu-allensdk"
openscope:
display_name: "OpenScope"
default: true
kubespawner_override:
image: "${singleuser_image_repo}:${singleuser_image_tag}-openscope"
matlab:
display_name: "MATLAB GPU (must provide your own license)"
kubespawner_override:
Expand Down
75 changes: 75 additions & 0 deletions images/Dockerfile.openscope
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
FROM quay.io/jupyter/datascience-notebook:python-3.11.10

USER root

RUN apt update \
&& apt install -y software-properties-common \
&& add-apt-repository -y 'ppa:apptainer/ppa' \
&& apt update \
&& apt install -y apptainer-suid \
&& rm -rf /var/lib/apt/lists/* && rm -rf /tmp/*

RUN apt-get update && apt-get install -y ca-certificates libseccomp2 \
s3fs netbase less parallel tmux screen vim emacs htop curl \
&& rm -rf /var/lib/apt/lists/* && rm -rf /tmp/*

RUN curl --silent --show-error "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" \
-o "awscliv2.zip" && unzip awscliv2.zip \
&& ./aws/install && rm -rf ./aws awscliv2.zip

# Install jupyter server proxy and desktop
RUN curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg \
&& echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg] https://brave-browser-apt-release.s3.brave.com/ stable main"|sudo tee /etc/apt/sources.list.d/brave-browser-release.list \
&& apt-get -y -qq update \
&& apt-get -y -qq install \
dbus-x11 \
xfce4 \
xfce4-panel \
xfce4-session \
xfce4-settings \
xorg \
xubuntu-icon-theme \
brave-browser \
tigervnc-standalone-server \
tigervnc-xorg-extension \
# chown $HOME to workaround that the xorg installation creates a
# /home/jovyan/.cache directory owned by root
&& chown -R $NB_UID:$NB_GID $HOME \
&& rm -rf /var/lib/apt/lists/* && rm -rf /tmp/*

# apt-get may result in root-owned directories/files under $HOME
RUN mkdir /opt/extras && chown -R $NB_UID:$NB_GID $HOME /opt/extras

USER $NB_USER

RUN pip install --no-cache-dir jupyter-remote-desktop-proxy

ENV MAMBA_NO_LOW_SPEED_LIMIT=1

RUN mamba install --yes 'datalad>=0.18' rclone 'h5py>3.3=mpi*' ipykernel zarr blosc eccodes websockify \
&& wget --quiet https://raw.githubusercontent.com/DanielDent/git-annex-remote-rclone/v0.8/git-annex-remote-rclone \
&& chmod +x git-annex-remote-rclone && mv git-annex-remote-rclone /opt/conda/bin \
&& conda clean --all -f -y && rm -rf /tmp/*

RUN pip install --no-cache-dir -U plotly jupyter_bokeh jupytext nbgitpuller datalad_container \
datalad-osf dandi nibabel nilearn pybids spikeinterface neo itkwidgets \
'pydra>=0.25' 'pynwb>=2.8.3' 'nwbwidgets>=0.10.2' hdf5plugin s3fs h5netcdf "xarray[io]" \
aicsimageio kerchunk 'neuroglancer>=2.28' cloud-volume ipywidgets ome-zarr \
webio_jupyter_extension https://github.com/balbasty/dandi-io/archive/refs/heads/main.zip \
tensorstore anndata

RUN pip install --no-cache-dir multiscale_spatial_image jupyterlab-git \
datalad-fuse

RUN pip install --no-cache-dir brainrender napari

# Leaving "standard" Dockerfile copy above as-is to simplify later switch to modular builds.
USER root

RUN apt-get install -y coreutils libgl1 libglx-mesa0 libglib2.0-0 && rm -rf /var/lib/apt/lists/* /tmp/*

USER $NB_USER

RUN cd /tmp \
&& git clone https://github.com/AllenInstitute/openscope_databook.git \
&& pip install --no-cache-dir -e './openscope_databook[dev]'
Loading