# Base : Debian Bookworm avec Julia 1.10 pré-installé FROM julia:1.10-bookworm # Métadonnées LABEL maintainer="CodeBuddy" LABEL description="Environnement de portage Julia -> C avec PDI/HDF5 et Outils graphiques" # Arguments pour gérer l'utilisateur (évite les fichiers root sur le host) ARG USER_ID=1000 ARG GROUP_ID=1000 ARG USER_NAME=engineer # 1. Installation des dépendances système (C/C++, HDF5, Outils graphiques, Build tools) # Nous incluons gdb et valgrind pour la rigueur du C. # Nous incluons les libs X11 pour l'affichage des plots. RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ cmake \ git \ libhdf5-dev \ libz-dev \ pkg-config \ gdb \ valgrind \ clang-format \ libx11-6 \ libxext6 \ libxrender1 \ libxtst6 \ xauth \ ca-certificates \ && rm -rf /var/lib/apt/lists/* # 2. Installation de PDI (Build from source pour exclure MPI et garantir HDF5) # Nous clonons, configurons et installons PDI dans /usr/local WORKDIR /tmp/pdi-build RUN git clone https://github.com/pdidev/pdi.git . && \ mkdir build && cd build && \ cmake \ -DBUILD_MPI=OFF \ -DBUILD_DECL_HDF5_PLUGIN=ON \ -DBUILD_SHARED_LIBS=ON \ -DCMAKE_INSTALL_PREFIX=/usr/local \ .. && \ make -j$(nproc) && \ make install && \ ldconfig && \ cd / && rm -rf /tmp/pdi-build # 3. Pré-installation des packages Julia essentiels pour le portage # HDF5.jl pour lire/écrire ce que PDI manipule # Plots.jl pour la visualisation RUN julia -e 'import Pkg; Pkg.add(["HDF5", "Plots", "DataFrames"]); Pkg.precompile()' # 4. Création de l'utilisateur non-root RUN groupadd -g ${GROUP_ID} ${USER_NAME} && \ useradd -m -u ${USER_ID} -g ${USER_NAME} -s /bin/bash ${USER_NAME} # Configuration de l'environnement pour PDI ENV PDI_DIR=/usr/local ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH ENV CPATH=/usr/local/include:$CPATH # Passage à l'utilisateur USER ${USER_NAME} WORKDIR /home/${USER_NAME}/project # Point d'entrée par défaut : un shell bash prêt à l'emploi CMD ["/bin/bash"]