Skip to content

Commit 7b3c404

Browse files
author
jakubk
committed
enh: generate dockerfiles with neurodocker + rename base dockerfile
Rename base.Dockerfile to Dockerfile.base to conform to moby style. For now, the master Neurodocker Docker image is used, but a versioned image will be used once a newer Neurodocker version is released.
1 parent 9a988d6 commit 7b3c404

File tree

4 files changed

+508
-249
lines changed

4 files changed

+508
-249
lines changed

Dockerfile

Lines changed: 199 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,111 +1,212 @@
1-
# Copyright (c) 2016, The developers of the Stanford CRN
2-
# All rights reserved.
1+
# Generated by Neurodocker v0.3.1-2-g4dfcf56.
32
#
4-
# Redistribution and use in source and binary forms, with or without
5-
# modification, are permitted provided that the following conditions are met:
3+
# Thank you for using Neurodocker. If you discover any issues
4+
# or ways to improve this software, please submit an issue or
5+
# pull request on our GitHub repository:
6+
# https://github.com/kaczmarj/neurodocker
67
#
7-
# * Redistributions of source code must retain the above copyright notice, this
8-
# list of conditions and the following disclaimer.
9-
#
10-
# * Redistributions in binary form must reproduce the above copyright notice,
11-
# this list of conditions and the following disclaimer in the documentation
12-
# and/or other materials provided with the distribution.
13-
#
14-
# * Neither the name of crn_base nor the names of its
15-
# contributors may be used to endorse or promote products derived from
16-
# this software without specific prior written permission.
17-
#
18-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21-
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22-
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23-
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24-
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25-
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26-
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27-
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8+
# Timestamp: 2017-10-02 22:55:57
289

10+
FROM kaczmarj/nipype:base
2911

30-
#
31-
# Based on https://github.com/poldracklab/fmriprep/blob/9c92a3de9112f8ef1655b876de060a2ad336ffb0/Dockerfile
32-
#
33-
FROM nipype/base:latest
34-
MAINTAINER The nipype developers https://github.com/nipy/nipype
35-
36-
ARG PYTHON_VERSION_MAJOR=3
37-
38-
# Installing and setting up miniconda
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
42-
43-
ENV PATH=/usr/local/miniconda/bin:$PATH \
44-
LANG=C.UTF-8 \
45-
LC_ALL=C.UTF-8 \
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
51-
52-
# Installing precomputed python packages
53-
ARG PYTHON_VERSION_MINOR=6
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 \
65-
traits=4.6.0 \
66-
psutil \
67-
icu=58.1 && \
68-
sync;
69-
70-
# matplotlib cleanups: set default backend, precaching fonts
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 && \
72-
python -c "from matplotlib import font_manager"
73-
74-
# Install CI scripts
75-
COPY docker/files/run_* /usr/bin/
76-
RUN chmod +x /usr/bin/run_*
77-
78-
# Replace imglob with a Python3 compatible version
79-
COPY nipype/external/fsl_imglob.py /usr/bin/fsl_imglob.py
80-
RUN rm -rf ${FSLDIR}/bin/imglob && \
81-
chmod +x /usr/bin/fsl_imglob.py && \
82-
ln -s /usr/bin/fsl_imglob.py ${FSLDIR}/bin/imglob
83-
84-
# Installing dev requirements (packages that are not in pypi)
85-
WORKDIR /src/
86-
COPY requirements.txt requirements.txt
87-
RUN pip install -r requirements.txt && \
88-
rm -rf ~/.cache/pip
89-
90-
RUN git clone https://github.com/INCF/pybids.git && \
91-
cd pybids && python setup.py develop
92-
93-
# Installing nipype
94-
COPY . /src/nipype
95-
RUN cd /src/nipype && \
96-
pip install -e .[all] && \
97-
rm -rf ~/.cache/pip
98-
99-
WORKDIR /work/
12+
ARG DEBIAN_FRONTEND=noninteractive
13+
14+
#----------------------------------------------------------
15+
# Install common dependencies and create default entrypoint
16+
#----------------------------------------------------------
17+
ENV LANG="en_US.UTF-8" \
18+
LC_ALL="C.UTF-8" \
19+
ND_ENTRYPOINT="/neurodocker/startup.sh"
20+
RUN apt-get update -qq && apt-get install -yq --no-install-recommends \
21+
apt-utils bzip2 ca-certificates curl locales unzip \
22+
&& apt-get clean \
23+
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
24+
&& localedef --force --inputfile=en_US --charmap=UTF-8 C.UTF-8 \
25+
&& chmod 777 /opt && chmod a+s /opt \
26+
&& mkdir -p /neurodocker \
27+
&& if [ ! -f "$ND_ENTRYPOINT" ]; then \
28+
echo '#!/usr/bin/env bash' >> $ND_ENTRYPOINT \
29+
&& echo 'set +x' >> $ND_ENTRYPOINT \
30+
&& echo 'if [ -z "$*" ]; then /usr/bin/env bash; else $*; fi' >> $ND_ENTRYPOINT; \
31+
fi \
32+
&& chmod -R 777 /neurodocker && chmod a+s /neurodocker
33+
ENTRYPOINT ["/neurodocker/startup.sh"]
34+
35+
LABEL maintainer="The nipype developers https://github.com/nipy/nipype"
36+
37+
ENV MKL_NUM_THREADS="1" \
38+
OMP_NUM_THREADS="1"
39+
40+
# Create new user: neuro
41+
RUN useradd --no-user-group --create-home --shell /bin/bash neuro
42+
USER neuro
43+
44+
#------------------
45+
# Install Miniconda
46+
#------------------
47+
ENV CONDA_DIR=/opt/conda \
48+
PATH=/opt/conda/bin:$PATH
49+
RUN echo "Downloading Miniconda installer ..." \
50+
&& miniconda_installer=/tmp/miniconda.sh \
51+
&& curl -sSL -o $miniconda_installer https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh \
52+
&& /bin/bash $miniconda_installer -b -p $CONDA_DIR \
53+
&& rm -f $miniconda_installer \
54+
&& conda config --system --prepend channels conda-forge \
55+
&& conda config --system --set auto_update_conda false \
56+
&& conda config --system --set show_channel_urls true \
57+
&& conda update -y -q --all && sync \
58+
&& conda clean -tipsy && sync
10059

60+
#-------------------------
61+
# Create conda environment
62+
#-------------------------
63+
RUN conda create -y -q --name neuro \
64+
&& sync && conda clean -tipsy && sync
65+
ENV PATH=/opt/conda/envs/neuro/bin:$PATH
66+
67+
COPY ["docker/files/run_builddocs.sh", "docker/files/run_examples.sh", "docker/files/run_pytests.sh", "nipype/external/fsl_imglob.py", "/usr/bin/"]
68+
69+
COPY [".", "/src/nipype"]
70+
71+
USER root
72+
73+
# User-defined instruction
74+
RUN chmod 777 -R /src/nipype
75+
76+
USER neuro
77+
78+
ARG PYTHON_VERSION_MAJOR="3"
79+
ARG PYTHON_VERSION_MINOR="6"
10180
ARG BUILD_DATE
10281
ARG VCS_REF
10382
ARG VERSION
104-
LABEL org.label-schema.build-date=$BUILD_DATE \
83+
84+
#-------------------------
85+
# Update conda environment
86+
#-------------------------
87+
RUN conda install -y -q --name neuro python=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} \
88+
icu=58.1 \
89+
libxml2 \
90+
libxslt \
91+
matplotlib \
92+
mkl \
93+
numpy \
94+
pandas \
95+
psutil \
96+
scikit-learn \
97+
scipy \
98+
traits=4.6.0 \
99+
&& sync && conda clean -tipsy && sync \
100+
&& /bin/bash -c "source activate neuro \
101+
&& pip install -q --no-cache-dir -e /src/nipype[all]" \
102+
&& sync
103+
104+
LABEL org.label-schema.build-date="$BUILD_DATE" \
105105
org.label-schema.name="NIPYPE" \
106106
org.label-schema.description="NIPYPE - Neuroimaging in Python: Pipelines and Interfaces" \
107107
org.label-schema.url="http://nipype.readthedocs.io" \
108-
org.label-schema.vcs-ref=$VCS_REF \
108+
org.label-schema.vcs-ref="$VCS_REF" \
109109
org.label-schema.vcs-url="https://github.com/nipy/nipype" \
110-
org.label-schema.version=$VERSION \
110+
org.label-schema.version="$VERSION" \
111111
org.label-schema.schema-version="1.0"
112+
113+
#--------------------------------------
114+
# Save container specifications to JSON
115+
#--------------------------------------
116+
RUN echo '{ \
117+
\n "pkg_manager": "apt", \
118+
\n "check_urls": false, \
119+
\n "instructions": [ \
120+
\n [ \
121+
\n "base", \
122+
\n "kaczmarj/nipype:base" \
123+
\n ], \
124+
\n [ \
125+
\n "label", \
126+
\n { \
127+
\n "maintainer": "The nipype developers https://github.com/nipy/nipype" \
128+
\n } \
129+
\n ], \
130+
\n [ \
131+
\n "env", \
132+
\n { \
133+
\n "MKL_NUM_THREADS": "1", \
134+
\n "OMP_NUM_THREADS": "1" \
135+
\n } \
136+
\n ], \
137+
\n [ \
138+
\n "user", \
139+
\n "neuro" \
140+
\n ], \
141+
\n [ \
142+
\n "miniconda", \
143+
\n { \
144+
\n "env_name": "neuro", \
145+
\n "add_to_path": true \
146+
\n } \
147+
\n ], \
148+
\n [ \
149+
\n "copy", \
150+
\n [ \
151+
\n "docker/files/run_builddocs.sh", \
152+
\n "docker/files/run_examples.sh", \
153+
\n "docker/files/run_pytests.sh", \
154+
\n "nipype/external/fsl_imglob.py", \
155+
\n "/usr/bin/" \
156+
\n ] \
157+
\n ], \
158+
\n [ \
159+
\n "copy", \
160+
\n [ \
161+
\n ".", \
162+
\n "/src/nipype" \
163+
\n ] \
164+
\n ], \
165+
\n [ \
166+
\n "user", \
167+
\n "root" \
168+
\n ], \
169+
\n [ \
170+
\n "run", \
171+
\n "chmod 777 -R /src/nipype" \
172+
\n ], \
173+
\n [ \
174+
\n "user", \
175+
\n "neuro" \
176+
\n ], \
177+
\n [ \
178+
\n "arg", \
179+
\n { \
180+
\n "PYTHON_VERSION_MAJOR": "3", \
181+
\n "PYTHON_VERSION_MINOR": "6", \
182+
\n "BUILD_DATE": "", \
183+
\n "VCS_REF": "", \
184+
\n "VERSION": "" \
185+
\n } \
186+
\n ], \
187+
\n [ \
188+
\n "miniconda", \
189+
\n { \
190+
\n "env_name": "neuro", \
191+
\n "conda_install": "python=${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} icu=58.1 libxml2 libxslt matplotlib mkl numpy pandas psutil scikit-learn scipy traits=4.6.0", \
192+
\n "pip_opts": "-e", \
193+
\n "pip_install": "/src/nipype[all]" \
194+
\n } \
195+
\n ], \
196+
\n [ \
197+
\n "label", \
198+
\n { \
199+
\n "org.label-schema.build-date": "$BUILD_DATE", \
200+
\n "org.label-schema.name": "NIPYPE", \
201+
\n "org.label-schema.description": "NIPYPE - Neuroimaging in Python: Pipelines and Interfaces", \
202+
\n "org.label-schema.url": "http://nipype.readthedocs.io", \
203+
\n "org.label-schema.vcs-ref": "$VCS_REF", \
204+
\n "org.label-schema.vcs-url": "https://github.com/nipy/nipype", \
205+
\n "org.label-schema.version": "$VERSION", \
206+
\n "org.label-schema.schema-version": "1.0" \
207+
\n } \
208+
\n ] \
209+
\n ], \
210+
\n "generation_timestamp": "2017-10-02 22:55:57", \
211+
\n "neurodocker_version": "0.3.1-2-g4dfcf56" \
212+
\n}' > /neurodocker/neurodocker_specs.json

0 commit comments

Comments
 (0)