-
Notifications
You must be signed in to change notification settings - Fork 83
Code_Saturne in a Docker container
- 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.
Create a file named Dockerfile
with the following content:
FROM ubuntu:18.04 as builder
RUN apt-get update -y
RUN apt-get upgrade -y
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata
RUN apt-get install -y \
wget zlib1g-dev \
vim gedit git gitk \
gfortran g++ gcc make cmake \
python3 python3-pyqt5 \
pyqt5-dev pyqt5-dev-tools \
openmpi-bin libopenmpi2 libopenmpi-dev
RUN apt-get autoremove
RUN 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
RUN 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
RUN 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
RUN 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
RUN 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
RUN 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
RUN 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
RUN mv /opt/code_saturne-6.0.2 /opt/code_saturne-6.0.2_src
#---------------------------------------------------------
# Code Saturne, build
#---------------------------------------------------------
RUN mkdir /opt/code_saturne-6.0.2_bld /opt/saturne_tmp
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_bld --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
#---------------------------------------------------------
RUN mkdir /opt/code_saturne-6.0.2_bld_debug
WORKDIR /opt/saturne_tmp
RUN rm -rf *
RUN ../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_bld_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_bld /opt/code_saturne-6.0.2_bld_debug
RUN echo 'root:rootpwd' | chpasswd
RUN apt-get install -y sudo gnome-terminal
RUN useradd csuser
RUN mkdir /home/csuser
RUN chown csuser /home/csuser
RUN chgrp csuser /home/csuser
RUN echo 'csuser:userpwd' | chpasswd
RUN adduser csuser sudo
USER csuser
ENV HOME /home/csuser
WORKDIR /home/csuser
RUN echo "alias code_saturne=/opt/code_saturne-6.0.2_bld/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
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.
This link could help: https://cuneyt.aliustaoglu.biz/en/running-gui-applications-in-docker-on-windows-linux-mac-hosts/
This link could help: https://cuneyt.aliustaoglu.biz/en/running-gui-applications-in-docker-on-windows-linux-mac-hosts/