|
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 PYTHON_VERSION_MAJOR=3 |
166 | 37 |
|
167 | 38 | # 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 |
| 39 | +RUN curl -sSLO https://repo.continuum.io/miniconda/Miniconda${PYTHON_VERSION_MAJOR}-4.2.12-Linux-x86_64.sh && \ |
| 40 | + bash Miniconda${PYTHON_VERSION_MAJOR}-4.2.12-Linux-x86_64.sh -b -p /usr/local/miniconda && \ |
| 41 | + rm Miniconda${PYTHON_VERSION_MAJOR}-4.2.12-Linux-x86_64.sh |
171 | 42 |
|
172 | 43 | ENV PATH=/usr/local/miniconda/bin:$PATH \ |
173 | 44 | LANG=C.UTF-8 \ |
174 | 45 | LC_ALL=C.UTF-8 \ |
175 | | - ACCEPT_INTEL_PYTHON_EULA=yes |
| 46 | + ACCEPT_INTEL_PYTHON_EULA=yes \ |
| 47 | + MKL_NUM_THREADS=1 \ |
| 48 | + OMP_NUM_THREADS=1 |
| 49 | +# MKL/OMP_NUM_THREADS: unless otherwise specified, each process should |
| 50 | +# only use one thread - nipype will handle parallelization |
176 | 51 |
|
177 | 52 | # Installing precomputed python packages |
178 | | -RUN conda config --add channels conda-forge --add channels intel && \ |
179 | | - chmod +x /usr/local/miniconda/bin/* && \ |
180 | | - conda config --set always_yes yes --set changeps1 no && \ |
181 | | - conda update -q conda && \ |
182 | | - chmod +x /usr/local/miniconda/bin/*; sync && \ |
183 | | - conda install -y mkl=2017.0.1 \ |
184 | | - numpy=1.11.2 \ |
185 | | - scipy=0.18.1 \ |
186 | | - scikit-learn=0.17.1 \ |
187 | | - matplotlib=1.5.3 \ |
188 | | - pandas=0.19.0 \ |
189 | | - libxml2=2.9.4 \ |
190 | | - libxslt=1.1.29 \ |
| 53 | +ARG PYTHON_VERSION_MINOR=5 |
| 54 | +RUN conda config --add channels conda-forge; sync && \ |
| 55 | + conda config --set always_yes yes --set changeps1 no; sync && \ |
| 56 | + conda install -y python=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} \ |
| 57 | + mkl \ |
| 58 | + numpy \ |
| 59 | + scipy \ |
| 60 | + scikit-learn \ |
| 61 | + matplotlib \ |
| 62 | + pandas \ |
| 63 | + libxml2 \ |
| 64 | + libxslt \ |
191 | 65 | traits=4.6.0 \ |
192 | | - psutil=5.0.1 \ |
| 66 | + psutil \ |
193 | 67 | icu=58.1 && \ |
194 | | - find /usr/local/miniconda/ -exec chmod 775 {} + |
| 68 | + sync; |
195 | 69 |
|
196 | 70 | # matplotlib cleanups: set default backend, precaching fonts |
197 | | -RUN sed -i 's/\(backend *: \).*$/\1Agg/g' /usr/local/miniconda/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc && \ |
| 71 | +RUN sed -i 's/\(backend *: \).*$/\1Agg/g' /usr/local/miniconda/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages/matplotlib/mpl-data/matplotlibrc && \ |
198 | 72 | python -c "from matplotlib import font_manager" |
199 | 73 |
|
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 |
| 74 | +# Install codecov inside container |
| 75 | +RUN curl -so /usr/bin/codecov.io https://codecov.io/bash && \ |
| 76 | + chmod 755 /usr/bin/codecov.io |
| 77 | + |
| 78 | +# Install CI scripts |
| 79 | +COPY docker/files/run_* /usr/bin/ |
| 80 | +RUN chmod +x /usr/bin/run_* |
| 81 | + |
| 82 | +# Replace imglob with a Python3 compatible version |
| 83 | +COPY nipype/external/fsl_imglob.py /usr/bin/fsl_imglob.py |
| 84 | +RUN rm -rf ${FSLDIR}/bin/imglob && \ |
| 85 | + chmod +x /usr/bin/fsl_imglob.py && \ |
| 86 | + ln -s /usr/bin/fsl_imglob.py ${FSLDIR}/bin/imglob |
204 | 87 |
|
205 | 88 | # Installing dev requirements (packages that are not in pypi) |
206 | | -WORKDIR /root/ |
| 89 | +WORKDIR /src/ |
207 | 90 | COPY requirements.txt requirements.txt |
208 | 91 | RUN pip install -r requirements.txt && \ |
209 | 92 | rm -rf ~/.cache/pip |
210 | 93 |
|
211 | 94 | # Installing nipype |
212 | | -COPY . /root/src/nipype |
213 | | -RUN cd /root/src/nipype && \ |
| 95 | +COPY . /src/nipype |
| 96 | +RUN cd /src/nipype && \ |
214 | 97 | pip install -e .[all] && \ |
215 | 98 | rm -rf ~/.cache/pip |
216 | 99 |
|
217 | | -WORKDIR /root/ |
| 100 | +WORKDIR /work/ |
218 | 101 |
|
219 | 102 | ARG BUILD_DATE |
220 | 103 | ARG VCS_REF |
|
0 commit comments