Dockerfile 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. # Base : Debian Bookworm avec Julia 1.10 pré-installé
  2. FROM julia:1.10-bookworm
  3. # Métadonnées
  4. LABEL maintainer="jmbatto"
  5. LABEL description="Environnement de portage Julia -> C avec PDI/HDF5 et Outils graphiques"
  6. # Arguments pour gérer l'utilisateur (évite les fichiers root sur le host)
  7. ARG USER_ID=1001
  8. ARG GROUP_ID=1001
  9. ARG USER_NAME=coder
  10. # 1. Installation des dépendances système (C/C++, HDF5, Outils graphiques, Build tools)
  11. # Nous incluons gdb et valgrind pour la rigueur du C.
  12. # Nous incluons les libs X11 pour l'affichage des plots.
  13. RUN apt-get update && apt-get install -y --no-install-recommends \
  14. build-essential \
  15. nano \
  16. sudo \
  17. lsof \
  18. gawk \
  19. emacs \
  20. jq \
  21. neofetch \
  22. cmake \
  23. git \
  24. libhdf5-dev \
  25. libz-dev \
  26. pkg-config \
  27. gdb \
  28. valgrind \
  29. clang-format \
  30. libx11-6 \
  31. libxext6 \
  32. libxrender1 \
  33. libxtst6 \
  34. xauth \
  35. ca-certificates \
  36. iputils-ping \
  37. pkg-config \
  38. colordiff \
  39. mpi-default-dev \
  40. && rm -rf /var/lib/apt/lists/*
  41. # Configuration de l'environnement pour PDI
  42. ENV PDI_DIR=/usr/local
  43. ENV LD_LIBRARY_PATH=/usr/local/lib
  44. ENV CPATH=/usr/local/include
  45. ENV PREFIX=/usr/local
  46. # 2. Installation de PDI (Build from source pour exclure MPI et garantir HDF5)
  47. # Nous clonons, configurons et installons PDI dans /usr/local
  48. WORKDIR /tmp/pdi-build
  49. RUN git clone https://github.com/pdidev/pdi.git . && \
  50. mkdir build && cd build && \
  51. cmake \
  52. -DBUILD_MPI=OFF \
  53. -DBUILD_DECL_HDF5_PLUGIN=ON \
  54. -DBUILD_SHARED_LIBS=ON \
  55. -DBUILD_FORTRAN=OFF \
  56. -DBUILD_HDF5_PARALLEL=OFF \
  57. -DBUILD_NETCDF_PARALLEL=OFF \
  58. -DCMAKE_INSTALL_PREFIX=/usr/local \
  59. .. && \
  60. make -j$(nproc) && \
  61. make install && \
  62. ldconfig && \
  63. cd / && rm -rf /tmp/pdi-build
  64. # 3. Pré-installation des packages Julia essentiels pour le portage
  65. # HDF5.jl pour lire/écrire ce que PDI manipule
  66. # Plots.jl pour la visualisation
  67. RUN julia -e 'import Pkg; Pkg.add(["HDF5", "Plots", "DataFrames"]); Pkg.precompile()'
  68. # 4. Création de l'utilisateur non-root
  69. RUN groupadd -g ${GROUP_ID} ${USER_NAME} && \
  70. useradd -m -u ${USER_ID} -g ${USER_NAME} -s /bin/bash ${USER_NAME}
  71. # Passage à l'utilisateur
  72. USER ${USER_NAME}
  73. WORKDIR /home/${USER_NAME}/project
  74. # Point d'entrée par défaut : un shell bash prêt à l'emploi
  75. CMD ["/bin/bash"]