Si vous ne l'avez pas encore fait, il est conseillé d'avoir fait ce TP
Pour rappel, docker permet de faire tourner des conteneurs, construits à partir d'images. Ces images peuvent-être déjà existantes, habituellement trouvées sur Docker hub ou sur le GitHub container registry
Il est aussi possible de génerer ses propres images pour automatiser complètement le déploiment d'une application, nous allons faire un exemple de ceci.
Pour commencer, clonez le repo git https://gitlab.minet.net/notCamelCaseName/tp-dockerfiles :
git clone https://gitlab.minet.net/notCamelCaseName/tp-dockerfiles
cd tp-dockerfiles
Vous pouvez observer dans ce dossier un fichier Dockerfile
et un dossier src
. Ce dernier contient un code python très simple utilisant le framework Flask pour créer un serveur HTTP. Le plus important est dans le fichier Dockerfile
, c'est lui qui définit comment créer la nouvelle image.
Pour générer l'image, vérifiez que vous êtes dans le même dossier que le Dockerfile
et lancez la commande
sudo docker build -t tp-dockerfiles .
Cette commande sert à "compiler" le Dockerfile en une image Docker
Puis vous pouvez créer un conteneur avec cette nouvelle image en éxecutant
sudo docker run -p 5000:5000 tp-dockerfiles
Cette commande sert à créer et lancer un conteneur utilisant l'image
Si tout s'est bien passé, vous pouvez désormais ouvrir l'url http://localhost:5000 et observer le résultat de vos manipulations.
FROM python:3
WORKDIR /app
COPY src /app
RUN pip install flask
EXPOSE 5000
CMD ["python", "-m", "flask", "run", "--host=0.0.0.0"]
Un dockerfile est un script qui donne des instructions ligne par ligne des opérations à effectuer pour construire l'image, il commence toujours par l'instruction FROM
qui définit sur quel image (publique ou non) on se base pour construire la notre.
COPY
sert à copier des fichiers du système de fichiers de l'ordinateur dans celui de l'image, ici on copie les fichiers du dossier src
dans le dossier /app
de l'image. Cette instruction est très utile pour utiliser ses propres fichiers, par exemple son propre code, dans un conteneur.
RUN
et CMD
servent à éxecuter des commandes shell dans le conteneur, la différence entre les deux est que RUN
éxecute la commande à la création de l'image (docker build
) alors que CMD
l'éxecute au lancement du conteneur (docker run/start
).
L'instruction
RUN
est souvent utilisée pour installer des dépendances etCMD
pour éxecuter le programme contenu dans le conteneur.
Comme exemple, vous pouvez tenter de déployer un serveur Minecraft sur docker, pour cela vous devrez télécharger le .jar
d'un serveur minecraft à l'adresse https://www.minecraft.net/fr-fr/download/server et le lancer avec la commande
java -Xmx1024M -Xms1024M -jar nom_du.jar nogui
Pensez à ouvrir le port
25565
pour acceder au serveur depuis l'exterieur du conteneur.
Pensez à écrire
eula=true
dans un fichiereula.txt
pour que le serveur démarre
Vous pouvez éssayer d'ajouter une map (par exemple Terra Swoop Force) en la mettant dans le dossier world
FROM eclipse-temurin:latest
WORKDIR /srv
COPY server.jar /srv/server.jar
COPY map /srv/world
RUN echo "eula=true" > /srv/eula.txt
EXPOSE 25565
CMD [ "java", "-Xmx1024M", "-Xms1024M", "-jar", "server.jar", "nogui" ]