2222# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2323# SOFTWARE.
2424
25- # Ubuntu 22.04 LTS - Jammy
26- ARG BASE_IMAGE=ubuntu:jammy-20240125
25+ ARG BASE_IMAGE=ghcr.io/nipreps/smriprep-base:20251104
2726
2827#
2928# Build wheel
@@ -38,7 +37,7 @@ RUN uvx --from=build pyproject-build --installer=uv /src
3837#
3938
4039# Utilities for downloading packages
41- FROM ${BASE_IMAGE} as downloader
40+ FROM ubuntu:jammy-20240125 AS downloader
4241# Bump the date to current to refresh curl/certificates/etc
4342RUN echo "2023.07.20"
4443RUN apt-get update && \
@@ -50,20 +49,8 @@ RUN apt-get update && \
5049 unzip && \
5150 apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
5251
53- # FreeSurfer 7.3.2
54- FROM downloader as freesurfer
55- COPY docker/files/freesurfer7.3.2-exclude.txt /usr/local/etc/freesurfer7.3.2-exclude.txt
56- RUN curl -sSL https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/7.3.2/freesurfer-linux-ubuntu22_amd64-7.3.2.tar.gz \
57- | tar zxv --no-same-owner -C /opt --exclude-from=/usr/local/etc/freesurfer7.3.2-exclude.txt
58-
5952# Micromamba
60- FROM downloader as micromamba
61-
62- # Install a C compiler to build extensions when needed.
63- # traits<6.4 wheels are not available for Python 3.11+, but build easily.
64- RUN apt-get update && \
65- apt-get install -y --no-install-recommends build-essential && \
66- apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
53+ FROM downloader AS micromamba
6754
6855WORKDIR /
6956# Bump the date to current to force update micromamba
@@ -87,65 +74,20 @@ RUN npm install -g svgo@^3.2.0 bids-validator@^1.14.0 && \
8774#
8875# Main stage
8976#
90- FROM ${BASE_IMAGE} as smriprep
91-
92- # Configure apt
93- ENV DEBIAN_FRONTEND="noninteractive" \
94- LANG="en_US.UTF-8" \
95- LC_ALL="en_US.UTF-8"
96-
97- # Some baseline tools
98- # bc, tcsh are needed for FreeSurfer
99- # libglu1-mesa is needed for Connectome Workbench
100- RUN apt-get update && \
101- apt-get install -y --no-install-recommends \
102- bc \
103- ca-certificates \
104- curl \
105- git \
106- gnupg \
107- libglu1-mesa \
108- lsb-release \
109- netbase \
110- tcsh \
111- xvfb && \
112- apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
113-
114- # Install files from stages
115- COPY --from=freesurfer /opt/freesurfer /opt/freesurfer
116-
117- # Simulate SetUpFreeSurfer.sh
118- ENV OS="Linux" \
119- FS_OVERRIDE=0 \
120- FIX_VERTEX_AREA="" \
121- FSF_OUTPUT_FORMAT="nii.gz" \
122- FREESURFER_HOME="/opt/freesurfer"
123- ENV SUBJECTS_DIR="$FREESURFER_HOME/subjects" \
124- FUNCTIONALS_DIR="$FREESURFER_HOME/sessions" \
125- MNI_DIR="$FREESURFER_HOME/mni" \
126- LOCAL_DIR="$FREESURFER_HOME/local" \
127- MINC_BIN_DIR="$FREESURFER_HOME/mni/bin" \
128- MINC_LIB_DIR="$FREESURFER_HOME/mni/lib" \
129- MNI_DATAPATH="$FREESURFER_HOME/mni/data"
130- ENV PERL5LIB="$MINC_LIB_DIR/perl5/5.8.5" \
131- MNI_PERL5LIB="$MINC_LIB_DIR/perl5/5.8.5" \
132- PATH="$FREESURFER_HOME/bin:$FREESURFER_HOME/tktools:$MINC_BIN_DIR:$PATH"
77+ FROM ${BASE_IMAGE} AS smriprep
13378
13479# Create a shared $HOME directory
13580RUN useradd -m -s /bin/bash -G users smriprep
13681WORKDIR /home/smriprep
137- ENV HOME="/home/smriprep" \
138- LD_LIBRARY_PATH="/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
82+ ENV HOME="/home/smriprep"
13983
14084COPY --from=micromamba /bin/micromamba /bin/micromamba
14185COPY --from=micromamba /opt/conda/envs/smriprep /opt/conda/envs/smriprep
14286
14387ENV MAMBA_ROOT_PREFIX="/opt/conda"
14488RUN micromamba shell init -s bash && \
14589 echo "micromamba activate smriprep" >> $HOME/.bashrc
146- ENV PATH="/opt/conda/envs/smriprep/bin:$PATH" \
147- CPATH="/opt/conda/envs/smriprep/include:$CPATH" \
148- LD_LIBRARY_PATH="/opt/conda/envs/smriprep/lib:$LD_LIBRARY_PATH"
90+ ENV PATH="/opt/conda/envs/smriprep/bin:$PATH"
14991
15092# Precaching atlases
15193COPY scripts/fetch_templates.py fetch_templates.py
@@ -155,20 +97,7 @@ RUN python fetch_templates.py && \
15597 find $HOME/.cache/templateflow -type f -exec chmod go=u {} +
15698
15799# FSL environment
158- ENV LANG="C.UTF-8" \
159- LC_ALL="C.UTF-8" \
160- PYTHONNOUSERSITE=1 \
161- FSLDIR="/opt/conda/envs/smriprep" \
162- FSLOUTPUTTYPE="NIFTI_GZ" \
163- FSLMULTIFILEQUIT="TRUE" \
164- FSLLOCKDIR="" \
165- FSLMACHINELIST="" \
166- FSLREMOTECALL="" \
167- FSLGECUDAQ="cuda.q"
168-
169- # MSM
170- RUN curl -L -H "Accept: application/octet-stream" https://api.github.com/repos/ecr05/MSM_HOCR/releases/assets/16253707 -o /usr/local/bin/msm \
171- && chmod +x /usr/local/bin/msm
100+ ENV FSLDIR="/opt/conda/envs/smriprep"
172101
173102# Unless otherwise specified each process should only use one thread - nipype
174103# will handle parallelization
0 commit comments