Créer une image docker avec un Dockerfile
Introduction
Le but de ce wiki est de vous expliquer comment créer une image docker
Remarques préalables
Grâce au Dockerfile on peut créer une image de toute pièce avec notre application. Il faut cependant faire attention car chaque instruction représente une couche. Pour optimiser le build de notre image il vaut mieux mettre les installations en premier car à chaque build le cache de docker fera que le build sera plus rapide.
On peut réduire le nombre de couche en faisant ce qu'on appelle du multistaging
Exemple avec une image Minecraft sans optimisation
FROM debian:stable-slim
# install des dépendances nécessaires
RUN dpkg --add-architecture i386 && \
apt-get update -y && \
apt-get upgrade -y && \
apt-get install -y cpio distro-info lib32gcc-s1 lib32stdc++6 libsdl2-2.0-0 uuid-runtime xz-utils nano sudo curl wget file tar bzip2 gzip unzip bsdmainutils python3 util-linux ca-certificates binutils bc jq tmux netcat* openjdk-17-jre
RUN useradd -m -d /home/minecraft -s /bin/bash minecraft
RUN usermod -aG sudo minecraft
USER minecraft
WORKDIR /home/minecraft
RUN wget -O linuxgsm.sh https://linuxgsm.sh && \
chmod +x linuxgsm.sh && \
bash linuxgsm.sh mcserver
# Acceptation du contrat de licence utilisateur final (EULA)
RUN echo "eula=true" > eula.txt
# Install du serveur Minecraft
RUN ./mcserver auto-install
EXPOSE 25565
# Démarrage le serveur Minecraft
CMD ./mcserver start && tail -f /dev/null
Exemple avec une image Minecraft avec optimisation (Multi staging)
FROM debian:stable-slim as build-system-image
# install des dépendances nécessaires
RUN dpkg --add-architecture i386 && \
apt-get update -y && \
apt-get upgrade -y && \
apt-get install -y cpio distro-info lib32gcc-s1 lib32stdc++6 libsdl2-2.0-0 uuid-runtime xz-utils nano sudo curl wget file tar bzip2 gzip unzip bsdmainutils python3 util-linux ca-certificates binutils bc jq tmux netcat* openjdk-17-jre
RUN useradd -m -d /home/minecraft -s /bin/bash minecraft
RUN usermod -aG sudo minecraft
USER minecraft
WORKDIR /home/minecraft
FROM build-system-image as build-app-image
# Téléchargement et install de linux lgsm
RUN wget -O linuxgsm.sh https://linuxgsm.sh && \
chmod +x linuxgsm.sh && \
bash linuxgsm.sh mcserver
# Acceptation du contrat de licence utilisateur final (EULA)
RUN echo "eula=true" > eula.txt
# Install du serveur Minecraft
RUN ./mcserver auto-install
FROM build-system-image as final
COPY --from=build-app-image /home/minecraft /home/minecraft
EXPOSE 25565
# Démarrage le serveur Minecraft
CMD ./mcserver start && tail -f /dev/null
Dans ce cas le build peut être un peu plus long mais l'image sera moins lourde et plus rapide à l'exécution
Builder l'image
docker build -t Minecraft:latest .