Aller au contenu principal

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 .