30
30
#
31
31
# Based on https://github.com/poldracklab/fmriprep/blob/9c92a3de9112f8ef1655b876de060a2ad336ffb0/Dockerfile
32
32
#
33
- FROM ubuntu:xenial-20161213
33
+ FROM nipype/base:latest
34
34
MAINTAINER The nipype developers https://github.com/nipy/nipype
35
35
36
- ARG DEBIAN_FRONTEND=noninteractive
37
-
38
- # Pre-cache neurodebian key
39
- COPY docker/files/neurodebian.gpg /root/.neurodebian.gpg
40
-
41
- # Prepare environment
42
- RUN apt-key add /root/.neurodebian.gpg && \
43
- apt-get update && \
44
- apt-get install -y --no-install-recommends curl bzip2 ca-certificates xvfb && \
45
- curl -sSL http://neuro.debian.net/lists/xenial.us-ca.full >> /etc/apt/sources.list.d/neurodebian.sources.list && \
46
- apt-key adv --refresh-keys --keyserver hkp://ha.pool.sks-keyservers.net 0xA5D32F012649A5A9 || true; \
47
- apt-get update
48
-
49
- # Installing freesurfer
50
- RUN curl -sSL https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/6.0.0/freesurfer-Linux-centos6_x86_64-stable-pub-v6.0.0.tar.gz | tar zxv -C /opt \
51
- --exclude='freesurfer/trctrain' \
52
- --exclude='freesurfer/subjects/fsaverage_sym' \
53
- --exclude='freesurfer/subjects/fsaverage3' \
54
- --exclude='freesurfer/subjects/fsaverage4' \
55
- --exclude='freesurfer/subjects/fsaverage5' \
56
- --exclude='freesurfer/subjects/fsaverage6' \
57
- --exclude='freesurfer/subjects/cvs_avg35' \
58
- --exclude='freesurfer/subjects/cvs_avg35_inMNI152' \
59
- --exclude='freesurfer/subjects/bert' \
60
- --exclude='freesurfer/subjects/V1_average' \
61
- --exclude='freesurfer/average/mult-comp-cor' \
62
- --exclude='freesurfer/lib/cuda' \
63
- --exclude='freesurfer/lib/qt'
64
-
65
- ENV FSL_DIR=/usr/share/fsl/5.0 \
66
- OS=Linux \
67
- FS_OVERRIDE=0 \
68
- FIX_VERTEX_AREA= \
69
- FSF_OUTPUT_FORMAT=nii.gz \
70
- FREESURFER_HOME=/opt/freesurfer
71
- ENV SUBJECTS_DIR=$FREESURFER_HOME/subjects \
72
- FUNCTIONALS_DIR=$FREESURFER_HOME/sessions \
73
- MNI_DIR=$FREESURFER_HOME/mni \
74
- LOCAL_DIR=$FREESURFER_HOME/local \
75
- FSFAST_HOME=$FREESURFER_HOME/fsfast \
76
- MINC_BIN_DIR=$FREESURFER_HOME/mni/bin \
77
- MINC_LIB_DIR=$FREESURFER_HOME/mni/lib \
78
- MNI_DATAPATH=$FREESURFER_HOME/mni/data \
79
- FMRI_ANALYSIS_DIR=$FREESURFER_HOME/fsfast
80
- ENV PERL5LIB=$MINC_LIB_DIR/perl5/5.8.5 \
81
- MNI_PERL5LIB=$MINC_LIB_DIR/perl5/5.8.5 \
82
- PATH=$FREESURFER_HOME/bin:$FSFAST_HOME/bin:$FREESURFER_HOME/tktools:$MINC_BIN_DIR:$PATH
83
- RUN echo "cHJpbnRmICJrcnp5c3p0b2YuZ29yZ29sZXdza2lAZ21haWwuY29tXG41MTcyXG4gKkN2dW12RVYzelRmZ1xuRlM1Si8yYzFhZ2c0RVxuIiA+IC9vcHQvZnJlZXN1cmZlci9saWNlbnNlLnR4dAo=" | base64 -d | sh
84
-
85
- # Installing Neurodebian packages (FSL, AFNI, git)
86
- RUN apt-get install -y --no-install-recommends \
87
- fsl-core=5.0.9-1~nd+1+nd16.04+1 \
88
- fsl-mni152-templates=5.0.7-2 \
89
- afni=16.2.07~dfsg.1-2~nd16.04+1
90
-
91
- ENV FSLDIR=/usr/share/fsl/5.0 \
92
- FSLOUTPUTTYPE=NIFTI_GZ \
93
- FSLMULTIFILEQUIT=TRUE \
94
- POSSUMDIR=/usr/share/fsl/5.0 \
95
- LD_LIBRARY_PATH=/usr/lib/fsl/5.0:$LD_LIBRARY_PATH \
96
- FSLTCLSH=/usr/bin/tclsh \
97
- FSLWISH=/usr/bin/wish \
98
- AFNI_MODELPATH=/usr/lib/afni/models \
99
- AFNI_IMSAVE_WARNINGS=NO \
100
- AFNI_TTATLAS_DATASET=/usr/share/afni/atlases \
101
- AFNI_PLUGINPATH=/usr/lib/afni/plugins \
102
- PATH=/usr/lib/fsl/5.0:/usr/lib/afni/bin:$PATH
103
-
104
- # Installing and setting up ANTs
105
- RUN mkdir -p /opt/ants && \
106
- curl -sSL "https://github.com/stnava/ANTs/releases/download/v2.1.0/Linux_Ubuntu14.04.tar.bz2" \
107
- | tar -xjC /opt/ants --strip-components 1
108
-
109
- ENV ANTSPATH=/opt/ants \
110
- PATH=$ANTSPATH:$PATH
111
-
112
- # Installing and setting up c3d
113
- RUN mkdir -p /opt/c3d && \
114
- curl -sSL "http://downloads.sourceforge.net/project/c3d/c3d/1.0.0/c3d-1.0.0-Linux-x86_64.tar.gz" \
115
- | tar -xzC /opt/c3d --strip-components 1
116
-
117
- ENV C3DPATH=/opt/c3d/ \
118
- PATH=$C3DPATH/bin:$PATH
119
-
120
- # Install some other required tools
121
- RUN apt-get install -y --no-install-recommends \
122
- git=1:2.7.4-0ubuntu1 \
123
- graphviz=2.38.0-12ubuntu2 \
124
- unzip \
125
- apt-utils \
126
- fusefat \
127
- make \
128
- ruby=1:2.3.0+1 && \
129
- apt-get clean && \
130
- rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
131
-
132
- # Install fake-S3
133
- ENV GEM_HOME /usr/lib/ruby/gems/2.3
134
- ENV BUNDLE_PATH="$GEM_HOME" \
135
- BUNDLE_BIN="$GEM_HOME/bin" \
136
- BUNDLE_SILENCE_ROOT_WARNING=1 \
137
- BUNDLE_APP_CONFIG="$GEM_HOME"
138
- ENV PATH $BUNDLE_BIN:$PATH
139
- RUN mkdir -p "$GEM_HOME" "$BUNDLE_BIN" && \
140
- chmod 777 "$GEM_HOME" "$BUNDLE_BIN"
141
-
142
- RUN gem install fakes3
143
-
144
- # Install Matlab MCR: from the good old install_spm_mcr.sh of @chrisfilo
145
- WORKDIR /opt
146
- RUN echo "destinationFolder=/opt/mcr" > mcr_options.txt && \
147
- echo "agreeToLicense=yes" >> mcr_options.txt && \
148
- echo "outputFile=/tmp/matlabinstall_log" >> mcr_options.txt && \
149
- echo "mode=silent" >> mcr_options.txt && \
150
- mkdir -p matlab_installer && \
151
- curl -sSL http://www.mathworks.com/supportfiles/downloads/R2015a/deployment_files/R2015a/installers/glnxa64/MCR_R2015a_glnxa64_installer.zip \
152
- -o matlab_installer/installer.zip && \
153
- unzip matlab_installer/installer.zip -d matlab_installer/ && \
154
- matlab_installer/install -inputFile mcr_options.txt && \
155
- rm -rf matlab_installer mcr_options.txt
156
-
157
- # Install SPM
158
- RUN curl -sSL http://www.fil.ion.ucl.ac.uk/spm/download/restricted/utopia/dev/spm12_r6472_Linux_R2015a.zip -o spm12.zip && \
159
- unzip spm12.zip && \
160
- rm -rf spm12.zip
161
-
162
- ENV MATLABCMD="/opt/mcr/v85/toolbox/matlab" \
163
- SPMMCRCMD="/opt/spm12/run_spm12.sh /opt/mcr/v85/ script" \
164
- FORCE_SPMMCR=1
165
-
36
+ ARG BUILD_DATE
37
+ ARG VCS_REF
38
+ ARG VERSION
39
+ ARG PYTHON_VERSION_MAJOR=3
40
+ ARG PYTHON_VERSION_MINOR=5
166
41
167
42
# Installing and setting up miniconda
168
- RUN curl -sSLO https://repo.continuum.io/miniconda/Miniconda3 -4.2.12-Linux-x86_64.sh && \
169
- bash Miniconda3 -4.2.12-Linux-x86_64.sh -b -p /usr/local/miniconda && \
170
- rm Miniconda3 -4.2.12-Linux-x86_64.sh
43
+ RUN curl -sSLO https://repo.continuum.io/miniconda/Miniconda${PYTHON_VERSION_MAJOR} -4.2.12-Linux-x86_64.sh && \
44
+ bash Miniconda${PYTHON_VERSION_MAJOR} -4.2.12-Linux-x86_64.sh -b -p /usr/local/miniconda && \
45
+ rm Miniconda${PYTHON_VERSION_MAJOR} -4.2.12-Linux-x86_64.sh
171
46
172
47
ENV PATH=/usr/local/miniconda/bin:$PATH \
173
48
LANG=C.UTF-8 \
174
49
LC_ALL=C.UTF-8 \
175
- ACCEPT_INTEL_PYTHON_EULA=yes
50
+ ACCEPT_INTEL_PYTHON_EULA=yes \
51
+ MKL_NUM_THREADS=1 \
52
+ OMP_NUM_THREADS=1
53
+ # MKL/OMP_NUM_THREADS: unless otherwise specified, each process should
54
+ # only use one thread - nipype will handle parallelization
176
55
177
56
# Installing precomputed python packages
178
57
RUN conda config --add channels conda-forge --add channels intel && \
179
58
chmod +x /usr/local/miniconda/bin/* && \
180
59
conda config --set always_yes yes --set changeps1 no && \
181
60
conda update -q conda && \
182
61
chmod +x /usr/local/miniconda/bin/*; sync && \
183
- conda install -y mkl=2017.0.1 \
62
+ conda install -y python=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} \
63
+ mkl=2017.0.1 \
184
64
numpy=1.11.2 \
185
65
scipy=0.18.1 \
186
66
scikit-learn=0.17.1 \
@@ -194,14 +74,9 @@ RUN conda config --add channels conda-forge --add channels intel && \
194
74
find /usr/local/miniconda/ -exec chmod 775 {} +
195
75
196
76
# matplotlib cleanups: set default backend, precaching fonts
197
- RUN sed -i 's/\( backend *: \) .*$/\1 Agg/g' /usr/local/miniconda/lib/python3.5 /site-packages/matplotlib/mpl-data/matplotlibrc && \
77
+ RUN sed -i 's/\( backend *: \) .*$/\1 Agg/g' /usr/local/miniconda/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} /site-packages/matplotlib/mpl-data/matplotlibrc && \
198
78
python -c "from matplotlib import font_manager"
199
79
200
- # Unless otherwise specified each process should only use one thread - nipype
201
- # will handle parallelization
202
- ENV MKL_NUM_THREADS=1 \
203
- OMP_NUM_THREADS=1
204
-
205
80
# Installing dev requirements (packages that are not in pypi)
206
81
WORKDIR /root/
207
82
COPY requirements.txt requirements.txt
@@ -214,11 +89,18 @@ RUN cd /root/src/nipype && \
214
89
pip install -e .[all] && \
215
90
rm -rf ~/.cache/pip
216
91
92
+ # Install CI scripts
93
+ COPY docker/files/run_* /usr/bin/
94
+ RUN chmod +x /usr/bin/run_*
95
+
96
+ # Replace imglob with a Python3 compatible version
97
+ COPY nipype/external/fsl_imglob.py /usr/bin/fsl_imglob.py
98
+ RUN rm -rf ${FSLDIR}/bin/imglob && \
99
+ chmod +x /usr/bin/fsl_imglob.py && \
100
+ ln -s /usr/bin/fsl_imglob.py ${FSLDIR}/bin/imglob
101
+
217
102
WORKDIR /root/
218
103
219
- ARG BUILD_DATE
220
- ARG VCS_REF
221
- ARG VERSION
222
104
LABEL org.label-schema.build-date=$BUILD_DATE \
223
105
org.label-schema.name="NIPYPE" \
224
106
org.label-schema.description="NIPYPE - Neuroimaging in Python: Pipelines and Interfaces" \
0 commit comments