Dockerfile 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. # Base : Debian Bookworm avec Julia 1.10 pré-installé
  2. FROM julia:1.10-bookworm
  3. # Métadonnées
  4. LABEL maintainer="CodeBuddy"
  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=1000
  8. ARG GROUP_ID=1000
  9. ARG USER_NAME=engineer
  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. cmake \
  16. git \
  17. libhdf5-dev \
  18. libz-dev \
  19. pkg-config \
  20. gdb \
  21. valgrind \
  22. clang-format \
  23. libx11-6 \
  24. libxext6 \
  25. libxrender1 \
  26. libxtst6 \
  27. xauth \
  28. ca-certificates \
  29. && rm -rf /var/lib/apt/lists/*
  30. # 2. Installation de PDI (Build from source pour exclure MPI et garantir HDF5)
  31. # Nous clonons, configurons et installons PDI dans /usr/local
  32. WORKDIR /tmp/pdi-build
  33. RUN git clone https://github.com/pdidev/pdi.git . && \
  34. mkdir build && cd build && \
  35. cmake \
  36. -DBUILD_MPI=OFF \
  37. -DBUILD_DECL_HDF5_PLUGIN=ON \
  38. -DBUILD_SHARED_LIBS=ON \
  39. -DCMAKE_INSTALL_PREFIX=/usr/local \
  40. .. && \
  41. make -j$(nproc) && \
  42. make install && \
  43. ldconfig && \
  44. cd / && rm -rf /tmp/pdi-build
  45. # 3. Pré-installation des packages Julia essentiels pour le portage
  46. # HDF5.jl pour lire/écrire ce que PDI manipule
  47. # Plots.jl pour la visualisation
  48. RUN julia -e 'import Pkg; Pkg.add(["HDF5", "Plots", "DataFrames"]); Pkg.precompile()'
  49. # 4. Création de l'utilisateur non-root
  50. RUN groupadd -g ${GROUP_ID} ${USER_NAME} && \
  51. useradd -m -u ${USER_ID} -g ${USER_NAME} -s /bin/bash ${USER_NAME}
  52. # Configuration de l'environnement pour PDI
  53. ENV PDI_DIR=/usr/local
  54. ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
  55. ENV CPATH=/usr/local/include:$CPATH
  56. # Passage à l'utilisateur
  57. USER ${USER_NAME}
  58. WORKDIR /home/${USER_NAME}/project
  59. # Point d'entrée par défaut : un shell bash prêt à l'emploi
  60. CMD ["/bin/bash"]