/
Dockerfile.cpu
67 lines (51 loc) · 2.72 KB
/
Dockerfile.cpu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
##############################################################
# This Dockerfile contains the Devito codes and can be built using different base images.
##############################################################
ARG pyversion=python:3.7
ARG arch=gcc
# Base image
FROM ${pyversion} as base
ENV DEBIAN_FRONTEND noninteractive
# Install for basic base not containing it
RUN apt-get update && apt-get install -y vim wget git libnuma1 tmux
# Install tmpi
RUN curl https://raw.githubusercontent.com/Azrael3000/tmpi/master/tmpi -o /usr/local/bin/tmpi
# Install OpenGL library, necessary for the installation of GemPy
RUN apt-get install -y libgl1-mesa-glx
##############################################################
# GCC standard image
##############################################################
FROM base as gcc
RUN apt-get install -y mpich libmpich-dev
# Env vars defaults
ENV DEVITO_ARCH="gcc"
ENV DEVITO_LANGUAGE="openmp"
##############################################################
# ICC image
##############################################################
FROM base as icc
# Download the key to system keyring
# https://www.intel.com/content/www/us/en/develop/documentation/installation-guide-for-intel-oneapi-toolkits-linux/top/installation/install-using-package-managers/apt.html#apt
RUN wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor > /usr/share/keyrings/oneapi-archive-keyring.gpg
RUN echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" > /etc/apt/sources.list.d/oneAPI.list
# Install wanted components only (icc and mpiicc)
RUN apt-get update -y && apt-get install -y intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic intel-oneapi-mpi-devel
# Set en vars by hand since we can't use entrypoint for intermediate image
ENV I_ICC_ROOT=/opt/intel/oneapi/compiler/latest/
ENV I_MPI_ROOT=/opt/intel/oneapi/mpi/latest/
ENV PATH $I_MPI_ROOT/libfabric/bin:$I_MPI_ROOT/bin:$I_ICC_ROOT/linux/bin/intel64:$I_ICC_ROOT/linux/bin:${PATH}
ENV LD_LIBRARY_PATH $I_MPI_ROOT/libfabric/lib:$I_MPI_ROOT/lib/release:$I_MPI_ROOT/lib:$I_ICC_ROOT/linux/lib:$I_ICC_ROOT/linux/lib/x64:$I_ICC_ROOT/linux/compiler/lib/intel64_lin:${LD_LIBRARY_PATH}
ENV FI_PROVIDER_PATH $I_MPI_ROOT/libfabric/lib/prov:/usr/lib64/libfabric:${LD_LIBRARY_PATH}
# Devito config
ENV DEVITO_ARCH="icc"
ENV DEVITO_LANGUAGE="openmp"
# MPICC compiler for mpi4py
ENV MPICC=$I_MPI_ROOT/bin/mpiicc
##############################################################
# Published image
##############################################################
FROM ${arch} as final
RUN apt-get clean && apt-get autoclean && apt-get autoremove && \
rm -rf /var/lib/apt/lists/*
EXPOSE 8888
CMD ["/bin/bash"]