link to ceed
[dealii.wiki.git] / Docker-Images.md
1  Several docker images with full installations of deal.II and (almost) all its dependencies are
2 available on https://hub.docker.com/r/dealii/dealii/.
3
4 Under the section `tags`, you'll find all available configurations. 
5
6 All libraries and dealii are installed under `/home/dealii/libs`. The default user in the image is `dealii`.
7
8 These images can be used, for example, in the following way:
9 ~~~
10 # Pull desired tag
11 TAG=dealii/dealii:dealii:v8.5.0-gcc-mpi-fulldepsmanual-debugrelease
12 docker pull $TAG
13 docker tag $TAG dealii
14
15 # Now run inside the image, sharing the current directory
16 docker run --rm -t -i -v `pwd`:/home/dealii/app dealii
17 dealii@3c1bb6ff22b4:~$
18 ~~~
19 the prompt `dealii@3c1bb6ff22b4:~$` is inside the docker image. For example, if you type
20 ~~~
21 dealii@3c1bb6ff22b4:~$ export  | grep DIR
22 declare -x ARPACK_DIR="/home/dealii/libs/arpack-3.4.0"
23 declare -x DEAL_II_DIR="~/dealii-v8.5.pre.4"
24 declare -x HDF5_DIR="/home/dealii/libs/hdf5-1.10.0-patch1"
25 declare -x METIS_DIR="/home/dealii/libs/petsc-3.7.4"
26 declare -x MUMPS_DIR="/home/dealii/libs/petsc-3.7.4"
27 declare -x OCE_DIR="/home/dealii/libs/oce-0.17.2"
28 declare -x OPENCASCADE_DIR="/home/dealii/libs/oce-0.17.2"
29 declare -x P4EST_DIR="/home/dealii/libs/p4est-1.1"
30 declare -x PARMETIS_DIR="/home/dealii/libs/petsc-3.7.4"
31 declare -x PETSC_DIR="/home/dealii/libs/petsc-3.7.4"
32 declare -x SCALAPACK_DIR="/home/dealii/libs/petsc-3.7.4"
33 declare -x SLEPC_DIR="/home/dealii/libs/slepc-3.7.3"
34 declare -x SUPERLU_DIR="/home/dealii/libs/petsc-3.7.4"
35 declare -x SUPERLU_DIST_DIR="/home/dealii/libs/petsc-3.7.4"
36 declare -x TRILINOS_DIR="/home/dealii/libs/trilinos-12-8-1"
37 dealii@3c1bb6ff22b4:~$ 
38 ~~~
39 you will see what was installed where in the image.
40
41 These images are guaranteed to work identically on Mac OS, Linux, Windows, on Travis CI, and on gitlab CI. 
42
43 Here you can find an example `.travis.yml` that uses one of the available images to test a user application using a controlled environment:
44
45 ~~~
46 sudo: required
47
48 env:
49   - BUILD_TYPE=Release
50   - BUILD_TYPE=Debug
51
52 services:
53   - docker
54
55 notifications:
56   email: false
57
58 language: C++
59
60 before_install:
61 - docker pull dealii/dealii:v8.5.0-gcc-mpi-fulldepsmanual-debugrelease
62
63 script:
64 - export DOCKER_RUN="docker run -P -v `pwd`:/home/dealii/app:rw dealii/dealii:v8.5.0-gcc-mpi-fulldepsmanual-debugrelease  /bin/sh -c"
65 - $DOCKER_RUN "test -d app/build-travis && rm -rf app/build-travis; mkdir app/build-travis; cd app/build-travis; cmake -GNinja ../; ninja"
66 - $DOCKER_RUN "cd app/build-travis; ctest -N; ctest -V"
67 ~~~
68
69 Gitlab works differently, allowing you to directly run the tester inside your custom image. An example `.gitlab-ci.yml` to use with your own applications is here:
70
71 ~~~
72 image: dealii/dealii:v8.5.0-gcc-mpi-fulldepsmanual-debugrelease
73
74 before_script:
75   - ./scripts/check_indentation.sh
76
77 debug:
78   script:
79    - test -d build_linux_debug && rm -rf build_linux_debug
80    - mkdir build_linux_debug; cd build_linux_debug; cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug; ninja
81    - ctest -N; ctest -V; cd ..
82
83 release:
84   script:
85    - test -d build_linux_release && rm -rf build_linux_release
86    - mkdir build_linux_release; cd build_linux_release; cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release; ninja
87    - ctest -N; ctest -V; cd ..
88 ~~~
89
90 The above will create two `pipelines`, in gitlab terminology, and run a `Debug` and `Release` ctest.

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.