Docker - TP 2 : Dockerfile

Thomas S.

2018-2024

Docker - TP 2 : Dockerfile

Sommaire

  • Une image basique
  • Très personnalisable

Une image basique

Dockerf... quoi ?

  • Nom du fichier : Dockerfile
  • Ou si particulier : particular.Dockerfile
  • Fichier permettant de build un image
  • Script de définition propre à Docker

Une image basique

Tips, le .dockerignore

Fonctionne comme le .gitignore, permet d'éviter de prendre en compte des fichiers au build.
Par exemple, un .git contenant des informations !

Très personnalisable

Instructions

  • FROM: Base de l'image
  • RUN: Commandes requises pour mettre en place
  • CMD: Ce qui doit être éxécuté

Une image basique

Dockerfile

FROM debian

RUN apt-get update -y && \
    apt-get install -y cowsay

CMD /usr/games/cowsay "Hello World !"
docker build -t test .
docker run -ti --rm test

Très personnalisable

Instructions

  • ENTRYPOINT : Commande d'entrée par défaut (image Debian:/bin/bash -c).
  • (CMD contient en réalité les arguments de l'entrypoint !)

Très personnalisable

TP1

Utiliser l'application figlet en entrypoint .
Testez si vous avez réussi :
docker run -ti --rm mon-figlet Hello figlet world

Très personnalisable

Un registry ?

Un registry est une plateforme pour stocker/télécharger les images

Exemple: Docker Hub, Gitlab, AWS ECR, ...

Docker Hub: Partie library (officielle) et les autres

Très personnalisable

Docker Hub

  • docker login (Inscription ici)
  • docker push NOM_DE_L_IMAGE
  • Le nom de l'image devra être sous la forme : pseudo/image_name:version
  • Seules les images officielles sont sous la forme : image_name:version

Envoyez votre Cowsay et/ou Figlet.

Très personnalisable

Instructions

  • VOLUME : Lié volume entre container et host
  • EXPOSE : Ports ouverts du container vers l'host
  • COPY ADD : Copier des fichiers dans l'image (Diff. )
  • WORKDIR : Définit le chemin d'éxécution

Très personnalisable

TP2

Faire une image Ubuntu permettant de donner le checksum MD5 du fichier suivant (directement présent dans l'image).
Solution : d5eefcccdb834958512bed157d01f3a7
Faire 4 variantes :
  • Avec wget (Dans un RUN du Dockerfile)
  • Avec wget (Dans un CMD du Dockerfile)
  • Avec ADD/COPY (dans le Dockerfile)
  • Avec volume

Très personnalisable

TP3

Faire une image php:7.1-apache permettant d'afficher ce projet Hello World ! du framework Slim sur le port 9876 de l'host
(Attention, ça ne sert à rien d'utiliser -v, pas besoin d'utiliser composer).

Très personnalisable

Images multi-stages

  • Images séparées par FROM
  • Utilité : Créé des images légères
  • Seule la dernière image est conservée
  • TL;DR : Idéal dans la mise en place/compilation logiciel, livraison d'applis

Très personnalisable

Images multi-stages : exemple

FROM ubuntu AS build-env
RUN npm install && node build
FROM debian
COPY --from=build-env /path/on/build-env/ /app/

CMD ........

Très personnalisable

TP4

1ère étape

Faire une image affichant ce projet React (base node ?).
Petite aide : -- --host 0.0.0.0

2nde étape

Faire une image multi-stages, avec Apache (httpd), affichant le projet précédent buildé pour la production.
Lisez bien la documentation de l'image sur Docker Hub !

Très personnalisable

TP5 - À préparer - Pour Docker Compose !!!

Faire une image avec un serveur web (PHP, Node, ...). Cette application web doit être modifiable en live. L'objectif est de changer le temps de réponse/le status HTTP d'une page pour mettre en avant le HEALTHCHECK.
À l'exécution, il faudra choisir la bonne politique de redémarrage --restart.
Dans le cas d'un docker-compose, il faudra utiliser un outil du type AutoHeal.

Très personnalisable

TP6 - Bonus

Faire une image Linux du projet Tetris , compilée à partir d'une autre image Linux. Pour l'éxécuter, il faudra la lancer en ENTRYPOINT dans l'image debian:buster-slim.
Pour les plus forts, faire une compilation statique et mettre l'exécutable dans une image busybox.

Très personnalisable

Gitlab et intégration continue

Dernière maj : Voir Github 🐻 1 /
Précédent
Suivant