1FROM neurodebian:nd18.04@sha256:3b3f09ca5387f479f144a2e45fb191afa9c9f7c1bd0f03ac90941834a4e5a616 2# FROM thewtex/opengl:ubuntu1804@sha256:b9de45d4f594b57136f7ec3b890567ecea1421278ee4c7be80e11888bf8d23ba 3 4ENV DEBIAN_FRONTEND=noninteractive 5ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn 6 7 8RUN apt-get update && apt-get install -y wget sudo locales \ 9 && apt-get clean \ 10 && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 11# The gpg key import is a little flaky... 12# COPY .docker/neurodebian.gpg /usr/local/etc/neurodebian.gpg 13# RUN wget -O- http://neuro.debian.net/lists/bionic.us-nh.full > /etc/apt/sources.list.d/neurodebian.sources.list && \ 14# apt-key add /usr/local/etc/neurodebian.gpg && \ 15# (apt-key adv --refresh-keys --keyserver hkp://ha.pool.sks-keyservers.net 0xA5D32F012649A5A9 || true) 16 17# Configure environment 18RUN ln -sf /bin/bash /bin/sh # use bash by default 19ENV SHELL=/bin/bash \ 20 CONTAINER_USER="afni_user" \ 21 CONTAINER_UID="1000" \ 22 CONTAINER_GID="100" \ 23 PYTHONUSERBASE=/opt/user_pip_packages \ 24 TINI_SUBREAPER="" \ 25 LANG="en_US.UTF-8" \ 26 LC_ALL="en_US.UTF-8" \ 27 AFNI_ROOT=/opt/afni/src 28 29ENV DESTDIR="$AFNI_ROOT/../install" \ 30 PATH="$PYTHONUSERBASE/bin:$PATH" \ 31 HOME=/home/$CONTAINER_USER 32# For any variables that should be present for all users of the container they 33# should be set in /etc/environment (variables set by ENV do not cleanly 34# propagate to all users). Should do this for PATH again later in the dockerfile (or 35# child files) 36ENV PRESERVED_VARS "PYTHONUSERBASE AFNI_ROOT DESTDIR PATH TINI_SUBREAPER LC_ALL" 37RUN bash -c 'for val in $PRESERVED_VARS;do \ 38 echo $val=${!val} >> /etc/environment ; \ 39 done' 40 41# Copy a script that we will use to correct permissions after running certain commands 42COPY .docker/fix-permissions /usr/local/bin/fix-permissions 43RUN chmod a+rx /usr/local/bin/fix-permissions 44 45# Add a lightweight init for container 46RUN wget https://github.com/krallin/tini/releases/download/v0.19.0/tini-static -O /usr/local/bin/tini && chmod a+x /usr/local/bin/tini 47 48# Enable prompt color in the skeleton .bashrc before creating the default CONTAINER_USER 49RUN sed -i 's/^#force_color_prompt=yes/force_color_prompt=yes/' /etc/skel/.bashrc 50 51RUN echo "auth requisite pam_deny.so" >> /etc/pam.d/su && \ 52 sed -i.bak -e 's/^%admin/#%admin/' /etc/sudoers && \ 53 sed -i.bak -e 's/^%sudo/#%sudo/' /etc/sudoers && \ 54 useradd -m -s /bin/bash -N -u $CONTAINER_UID $CONTAINER_USER && \ 55 chmod g+w /etc/passwd && \ 56 fix-permissions $HOME \ 57 && sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \ 58 && dpkg-reconfigure --frontend=noninteractive locales \ 59 && update-locale LANG="en_US.UTF-8" 60 61# Install runtime and basic dependencies 62RUN apt-get update && apt-get install -y eatmydata && \ 63 eatmydata apt-get install -y --no-install-recommends \ 64 ca-certificates \ 65 curl \ 66 freeglut3-dev \ 67 git \ 68 libf2c2-dev \ 69 libglew-dev \ 70 libglib2.0-dev \ 71 libglu1-mesa-dev \ 72 libglw1-mesa-dev \ 73 libgsl-dev \ 74 libgts-dev \ 75 libjpeg62-dev \ 76 libmotif-dev \ 77 libxi-dev \ 78 libxmhtml-dev \ 79 libxmu-dev \ 80 libxpm-dev \ 81 libxt-dev \ 82 python3-rpy2 \ 83 python3-wxgtk4.0 \ 84 python3.6-dev \ 85 qhull-bin \ 86 r-base \ 87 tcsh \ 88 xvfb \ 89 && apt-get clean \ 90 && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 91 92# Install development dependencies 93RUN apt-get update && apt-get install -y eatmydata && \ 94 eatmydata apt-get install -y --no-install-recommends \ 95 build-essential \ 96 bzip2 \ 97 f2c \ 98 g++ \ 99 gcc \ 100 git-annex-standalone \ 101 libtool \ 102 m4 \ 103 ncurses-dev \ 104 ninja-build \ 105 pkg-config \ 106 && apt-get clean \ 107 && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 108 109# Install test dependencies and some useful tools 110RUN apt-get update && apt-get install -y eatmydata && \ 111 eatmydata apt-get install -y --no-install-recommends \ 112 gdb \ 113 rsync \ 114 tree \ 115 valgrind \ 116 vim \ 117 x11-apps \ 118 && apt-get clean \ 119 && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 120 121# set non interactive backend for matplotlib 122RUN mkdir -p /root/.config/matplotlib \ 123 && echo "backend: Agg" > /root/.config/matplotlib/matplotlibrc 124 125RUN ln -s /usr/bin/python3 /usr/bin/python 126COPY .docker/start.sh /usr/local/bin 127RUN mkdir /usr/local/bin/image_startup.d && fix-permissions /usr/local/bin/image_startup.d 128RUN fix-permissions /opt 129USER $CONTAINER_UID 130 131 132###### Switch to non privileged user ###### 133RUN bash -c 'mkdir -p $AFNI_ROOT/../{build,src,install} && fix-permissions $AFNI_ROOT/../..' 134 135ENV CMAKE_VER=3.14.7 136RUN wget -P /opt/cmake https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-Linux-x86_64.tar.gz \ 137 ; cd /opt/cmake \ 138 ; tar xzvf cmake-${CMAKE_VER}-Linux-x86_64.tar.gz \ 139 ;rm -fr cmake-${CMAKE_VER}-Linux-x86_64.tar.gz \ 140 && fix-permissions /opt 141ENV PATH="/opt/cmake/cmake-${CMAKE_VER}-Linux-x86_64/bin:$PATH" 142 143RUN mkdir $PYTHONUSERBASE 144# Add some more test dependencies 145RUN curl -fsSL https://bootstrap.pypa.io/get-pip.py \ 146 | python3 - --no-cache-dir --prefix $PYTHONUSERBASE 147RUN python3 -m pip install \ 148 --no-cache-dir \ 149 autopep8 \ 150 black==20.8b1 \ 151 codecov \ 152 cython \ 153 datalad \ 154 distro \ 155 docker \ 156 filelock \ 157 gcovr \ 158 ipython \ 159 matplotlib \ 160 nibabel \ 161 'numpy>=1.14.5' \ 162 pandas \ 163 pdbpp \ 164 pytest \ 165 pytest-cov \ 166 pytest-xdist \ 167 scipy \ 168 git+git://github.com/leej3/xvfbwrapper.git@add_support_for_xquartz_and_multi_threading \ 169 && fix-permissions /opt \ 170 && git config --global user.name "Docker Almighty" \ 171 && git config --global user.email "nobody@example.com" \ 172 && datalad wtf 173 174 175# add pdb alias ipy for easier pdb debugging 176RUN echo 'alias ipy from IPython import embed;embed()' >> ~/.pdbrc 177RUN mkdir $HOME/work && fix-permissions $HOME/work 178WORKDIR $HOME/ 179 180ENTRYPOINT ["tini", "-g", "start.sh", "--"] 181 182