Skip to content

Code_Saturne in a Docker container

CFLAG edited this page Mar 27, 2020 · 15 revisions

Prerequisites

  • Docker should be installed on the machine, both to create the Code_Saturne image and to run the container.
  • A fast internet connection is preferable.

Creation of the docker image

Create a file named Dockerfile with the following content:

FROM ubuntu:18.04 as builder

RUN apt-get update -y \
 && apt-get upgrade -y \
 && DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata \
 && apt-get install -y \
        wget zlib1g-dev \
        vim \
        gfortran g++ gcc make cmake \
        python3 python3-pyqt5 \
        pyqt5-dev pyqt5-dev-tools \
        openmpi-bin libopenmpi2 libopenmpi-dev \
 && apt-get autoremove \
 && apt-get clean

#---------------------------------------------------------
# hdf5 1.10.6
#---------------------------------------------------------

RUN wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.6/src/hdf5-1.10.6.tar.gz --directory-prefix=/tmp/ \
 && tar -zxvf /tmp/hdf5-1.10.6.tar.gz -C /tmp/ \
 && rm -r /tmp/hdf5-1.10.6.tar.gz \
 && mkdir /opt/hdf5-1.10.6
WORKDIR /tmp/hdf5-1.10.6
RUN ./configure CC=mpicc FC=mpif90 CXX=mpic++ \
        --prefix=/opt/hdf5-1.10.6 --enable-build-mode=production --enable-parallel \
 && make -j \
 && make install \
 && rm -rf /tmp/hdf5-1.10.6

#---------------------------------------------------------
# MED 4.0.0
#---------------------------------------------------------

RUN wget http://files.salome-platform.org/Salome/other/med-4.0.0.tar.gz --directory-prefix=/tmp/ \
 && tar -zxvf /tmp/med-4.0.0.tar.gz -C /tmp/ \
 && rm -r /tmp/med-4.0.0.tar.gz \
 && mkdir /opt/med-4.0.0
WORKDIR /tmp/med-4.0.0
RUN ./configure CC=mpicc CXX=mpic++ --prefix=/opt/med-4.0.0 \
        --with-med_int=long --disable-python --disable-fortran --with-hdf5=/opt/hdf5-1.10.6 \
 && make -j \
 && make install \
 && rm -rf /tmp/med-4.0.0

#---------------------------------------------------------
# CGNS 4.1.1
#---------------------------------------------------------

RUN wget https://github.com/CGNS/CGNS/archive/v4.1.1.tar.gz --directory-prefix=/tmp/ \
 && tar -zxvf /tmp/v4.1.1.tar.gz -C /tmp/ \
 && rm  -r /tmp/v4.1.1.tar.gz \
 && mkdir /opt/cgns-4.1.1 /tmp/tmp
WORKDIR /tmp/tmp
RUN cmake -DCMAKE_INSTALL_PREFIX=/opt/cgns-4.1.1 -DCGNS_ENABLE_64BIT=ON -DCGNS_ENABLE_SCOPING=ON \
        -DCGNS_ENABLE_HDF5=ON -DHDF5_NEED_MPI=ON -DHDF5_NEED_ZLIB=ON \
        -DCMAKE_PREFIX_PATH=/opt/hdf5-1.10.6 -DHDF5_INCLUDE_PATH=/opt/hdf5-1.10.6/include \
        -DZLIB_LIBRARY=/usr/lib/x86_64-linux-gnu/libz.so ../CGNS-4.1.1 \
 && make \
 && make install \
 && rm -rf /tmp/CGNS-4.1.1 /tmp/tmp

#---------------------------------------------------------
# Code Saturne, get sources
#---------------------------------------------------------

RUN wget http://www.code-saturne.org/cms/sites/default/files/releases/code_saturne-6.0.2.tar.gz --directory-prefix=/opt/ \
 && tar -zxvf /opt/code_saturne-6.0.2.tar.gz -C /opt/ \
 && rm -r /opt/code_saturne-6.0.2.tar.gz \
 && mv /opt/code_saturne-6.0.2 /opt/code_saturne-6.0.2_src \
 && mkdir /opt/saturne_tmp /opt/code_saturne-6.0.2_build /opt/code_saturne-6.0.2_debug

#---------------------------------------------------------
# Code Saturne, build
#---------------------------------------------------------

WORKDIR /opt/saturne_tmp
RUN ../code_saturne-6.0.2_src/configure PYTHON=/usr/bin/python3 CC=mpicc FC=mpif90 CXX=mpic++ \
        --prefix=/opt/code_saturne-6.0.2_build --with-hdf5=/opt/hdf5-1.10.6 \
        --with-med=/opt/med-4.0.0 --with-cgns=/opt/cgns-4.1.1 \
 && make -j \
 && make install

#---------------------------------------------------------
# Code Saturne, debug build
#---------------------------------------------------------

WORKDIR /opt/saturne_tmp
RUN rm -rf * \
 && ../code_saturne-6.0.2_src/configure PYTHON=/usr/bin/python3 CC=mpicc FC=mpif90 CXX=mpic++ CFLAGS='-g' FCFLAGS='-g' \
        --enable-debug --prefix=/opt/code_saturne-6.0.2_debug --with-hdf5=/opt/hdf5-1.10.6 \
        --with-med=/opt/med-4.0.0 --with-cgns=/opt/cgns-4.1.1 \
 && make -j \
 && make install

#---------------------------------------------------------
#
# This is probably unsafe
#
# Use at your own risks
#
#---------------------------------------------------------

RUN chmod -R 777 /opt/hdf5-1.10.6/ /opt/med-4.0.0/ /opt/cgns-4.1.1 /opt/code_saturne-6.0.2_src /opt/code_saturne-6.0.2_build /opt/code_saturne-6.0.2_debug \
 && echo 'root:rootpwd' | chpasswd \
 && apt-get install -y sudo gnome-terminal gedit gitk \
 && apt-get autoremove \
 && apt-get clean \
 && useradd csuser \
 && mkdir /home/csuser \
 && chown csuser /home/csuser \
 && chgrp csuser /home/csuser \
 && echo 'csuser:userpwd' | chpasswd \
 && adduser csuser sudo
USER csuser
ENV HOME /home/csuser
WORKDIR /home/csuser
RUN echo "alias code_saturne=/opt/code_saturne-6.0.2_build/bin/code_saturne" >> /home/csuser/.bashrc \
 && echo "alias code_saturne_debug=/opt/code_saturne-6.0.2_debug/bin/code_saturne" >> /home/csuser/.bashrc

#---------------------------------------------------------
#
# This is probably unsafe.
#
# Use at your own risks.
#
# Build the image with:
#   docker build -t cs_v6 .
#
# Clean all the docker images with:
#   docker system prune --volumes
#
# [Linux] - Run the container with:
#   docker run -it --rm -e DISPLAY=:0 -v ${HOME}/.Xautority:/root/.Xauthority:rw --net=host --name gnome-terminal cs_v6
#
# [Linux] - To share the local folder /aaa/bbb/ccc with the container, run the container with:
#   WARNING: the container will be able to modify the corresponding folder
#   docker run -it --rm -e DISPLAY=:0 -v ${HOME}/.Xautority:/root/.Xauthority:rw -v /aaa/bbb/ccc:/home/csuser/ccc --net=host --name gnome-terminal cs_v6
#
# [Linux] - When the container is running, activate the GUI:
#   xhost +local:root
#
# [Linux] - When the container is stopped, undo:
#   xhost -local:root
#
#---------------------------------------------------------

Open a terminal in the folder containing the Dockerfile. The following command will create a Docker image based on the aforementioned Dockerfile. The name of the Docker image will be cs_v6

docker build -t cs_v6 .

At this stage, a relatively large number of temporary Docker images are stored on the computer. They can be removed with the following command:

docker system prune --volumes

[Linux] Start a container based on the image

The following basic command can be used to start a container based on the image cs_v6, and open a terminal inside it:

docker run -it --rm --name gnome-terminal cs_v6

To activate the GUI, the following can be used:

docker run -it --rm -e DISPLAY=:0 -v ${HOME}/.Xautority:/root/.Xauthority:rw --net=host --name gnome-terminal cs_v6

Please note that the GUI will not work at first. The command xhost +local:root must be entered in the host to activate it. When the container is no longer used, the command xhost -local:root must be entered in the host.

It is possible to give additional options when running the Docker container. For instance, the option -v allows file sharing between the host and the container.

[Windows] Start a container based on the image

This link could help: https://cuneyt.aliustaoglu.biz/en/running-gui-applications-in-docker-on-windows-linux-mac-hosts/

[Mac] Start a container based on the image

This link could help: https://cuneyt.aliustaoglu.biz/en/running-gui-applications-in-docker-on-windows-linux-mac-hosts/

Create a container based on the development version of Code_Saturne

The Dockerfile file below can be used to create a container based on the development version of Code_Saturne.

FROM ubuntu:18.04 as builder

RUN apt-get update -y \
 && apt-get upgrade -y \
 && DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata \
 && apt-get install -y \
        wget zlib1g-dev \
        vim \
        gfortran g++ gcc make cmake \
        python3 python3-pyqt5 \
        pyqt5-dev pyqt5-dev-tools \
        openmpi-bin libopenmpi2 libopenmpi-dev \
 && apt-get autoremove \
 && apt-get clean

#---------------------------------------------------------
# hdf5 1.10.6
#---------------------------------------------------------

RUN wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.6/src/hdf5-1.10.6.tar.gz --directory-prefix=/tmp/ \
 && tar -zxvf /tmp/hdf5-1.10.6.tar.gz -C /tmp/ \
 && rm -r /tmp/hdf5-1.10.6.tar.gz \
 && mkdir /opt/hdf5-1.10.6
WORKDIR /tmp/hdf5-1.10.6
RUN ./configure CC=mpicc FC=mpif90 CXX=mpic++ \
        --prefix=/opt/hdf5-1.10.6 --enable-build-mode=production --enable-parallel \
 && make -j \
 && make install \
 && rm -rf /tmp/hdf5-1.10.6

#---------------------------------------------------------
# MED 4.0.0
#---------------------------------------------------------

RUN wget http://files.salome-platform.org/Salome/other/med-4.0.0.tar.gz --directory-prefix=/tmp/ \
 && tar -zxvf /tmp/med-4.0.0.tar.gz -C /tmp/ \
 && rm -r /tmp/med-4.0.0.tar.gz \
 && mkdir /opt/med-4.0.0
WORKDIR /tmp/med-4.0.0
RUN ./configure CC=mpicc CXX=mpic++ --prefix=/opt/med-4.0.0 \
        --with-med_int=long --disable-python --disable-fortran --with-hdf5=/opt/hdf5-1.10.6 \
 && make -j \
 && make install \
 && rm -rf /tmp/med-4.0.0

#---------------------------------------------------------
# CGNS 4.1.1
#---------------------------------------------------------

RUN wget https://github.com/CGNS/CGNS/archive/v4.1.1.tar.gz --directory-prefix=/tmp/ \
 && tar -zxvf /tmp/v4.1.1.tar.gz -C /tmp/ \
 && rm  -r /tmp/v4.1.1.tar.gz \
 && mkdir /opt/cgns-4.1.1 /tmp/tmp
WORKDIR /tmp/tmp
RUN cmake -DCMAKE_INSTALL_PREFIX=/opt/cgns-4.1.1 -DCGNS_ENABLE_64BIT=ON -DCGNS_ENABLE_SCOPING=ON \
        -DCGNS_ENABLE_HDF5=ON -DHDF5_NEED_MPI=ON -DHDF5_NEED_ZLIB=ON \
        -DCMAKE_PREFIX_PATH=/opt/hdf5-1.10.6 -DHDF5_INCLUDE_PATH=/opt/hdf5-1.10.6/include \
        -DZLIB_LIBRARY=/usr/lib/x86_64-linux-gnu/libz.so ../CGNS-4.1.1 \
 && make \
 && make install \
 && rm -rf /tmp/CGNS-4.1.1 /tmp/tmp

#---------------------------------------------------------
# Code Saturne, get sources
#---------------------------------------------------------

WORKDIR /opt
RUN apt-get install -y build-essential autoconf automake libtool bison flex gettext python git \
 && apt-get autoremove \
 && apt-get clean \
 && git clone -b master --single-branch --depth 100 https://github.com/code-saturne/code_saturne.git code_saturne-trunk_src \
 && cd code_saturne-trunk_src \
 && ./sbin/bootstrap \
 && mkdir /opt/saturne_tmp /opt/code_saturne-trunk_build /opt/code_saturne-trunk_debug

#---------------------------------------------------------
# Code Saturne, build
#---------------------------------------------------------

WORKDIR /opt/saturne_tmp
RUN ../code_saturne-trunk_src/configure PYTHON=/usr/bin/python3 CC=mpicc FC=mpif90 CXX=mpic++ \
        --prefix=/opt/code_saturne-trunk_build --with-hdf5=/opt/hdf5-1.10.6 \
        --with-med=/opt/med-4.0.0 --with-cgns=/opt/cgns-4.1.1 \
 && make -j \
 && make install

#---------------------------------------------------------
# Code Saturne, debug build
#---------------------------------------------------------

WORKDIR /opt/saturne_tmp
RUN rm -rf * \
 && ../code_saturne-trunk_src/configure PYTHON=/usr/bin/python3 CC=mpicc FC=mpif90 CXX=mpic++ CFLAGS='-g' FCFLAGS='-g' \
        --enable-debug --prefix=/opt/code_saturne-trunk_debug --with-hdf5=/opt/hdf5-1.10.6 \
        --with-med=/opt/med-4.0.0 --with-cgns=/opt/cgns-4.1.1 \
 && make -j \
 && make install

#---------------------------------------------------------
#
# This is probably unsafe
#
# Use at your own risks
#
#---------------------------------------------------------

RUN chmod -R 777 /opt/hdf5-1.10.6/ /opt/med-4.0.0/ /opt/cgns-4.1.1 /opt/code_saturne-trunk_src /opt/code_saturne-trunk_build /opt/code_saturne-trunk_debug \
 && echo 'root:rootpwd' | chpasswd \
 && apt-get install -y sudo gnome-terminal gedit gitk \
 && apt-get autoremove \
 && apt-get clean \
 && useradd csuser \
 && mkdir /home/csuser \
 && chown csuser /home/csuser \
 && chgrp csuser /home/csuser \
 && echo 'csuser:userpwd' | chpasswd \
 && adduser csuser sudo
USER csuser
ENV HOME /home/csuser
WORKDIR /home/csuser
RUN echo "alias code_saturne=/opt/code_saturne-trunk_build/bin/code_saturne" >> /home/csuser/.bashrc \
 && echo "alias code_saturne_debug=/opt/code_saturne-trunk_debug/bin/code_saturne" >> /home/csuser/.bashrc

#---------------------------------------------------------
#
# This is probably unsafe.
#
# Use at your own risks.
#
# Build the image with:
#   docker build -t cs_v6 .
#
# Clean all the docker images with:
#   docker system prune --volumes
#
# [Linux] - Run the container with:
#   docker run -it --rm -e DISPLAY=:0 -v ${HOME}/.Xautority:/root/.Xauthority:rw --net=host --name gnome-terminal cs_v6
#
# [Linux] - To share the local folder /aaa/bbb/ccc with the container, run the container with:
#   WARNING: the container will be able to modify the corresponding folder
#   docker run -it --rm -e DISPLAY=:0 -v ${HOME}/.Xautority:/root/.Xauthority:rw -v /aaa/bbb/ccc:/home/csuser/ccc --net=host --name gnome-terminal cs_v6
#
# [Linux] - When the container is running, activate the GUI:
#   xhost +local:root
#
# [Linux] - When the container is stopped, undo:
#   xhost -local:root
#
#---------------------------------------------------------
Clone this wiki locally