Laboratoire sur Docker
Exercice 3
Après cet exercice, vous pourrez créer une image à partir d’un fichier Dockerfile.
Système de fichiers partie 2
Dans l’exercice 1, nous avons appris qu’un changement dans le container existe seulement dans le container. Exécutez un container Debian en mode interactif avec un pseudo-terminal. Modifiez le contenu de “/home” comme vu précédemment puis sortez du container. Examinez les containers à l’arrêt. Parmi les différentes commandes listées par sudo docker --help
et sudo docker container --help
, vous trouverez start
et restart
pour démarrer un container à l’arrêt ou redémarrer un container en cours d’exécution. Démarrez le container Debian avec sudo docker start <container debian>
puis exécutez-y un shell bash. Vérifiez le contenu du répertoire “/home”. Le fichier est présent car le contenu persiste quand un container est arrêté ou redémarré.
Dockerfile
Pour qu’un certain contenu soit présent dans chaque nouveau container créé, il doit faire partie de l’image. Certains utilitaires étant pratiques pour nos tests, ajoutons les directement au départ plutôt que de les réinstaller dans chaque nouveau container. Le fichier Dockerfile contient la liste des commandes à exécuter pour construire le container.
À partir du système hôte, créez un répertoire avec mkdir dockertest
et entrez-y avec cd dockertest
. Nous allons utiliser un fichier Dockerfile pré-construit, téléchargez le avec wget https://raw.githubusercontent.com/matbilodeau/labos-cloud/main/exemples/laboDocker/Dockerfile
. cat Dockerfile
affichera le contenu du fichier.
- FROM
- Indique à partir de quelle image, locale ou dans un registre, on veut créer la nôtre. Si vous voulez créer vous même des images de base, vous pouvez le faire avec FROM scratch.
- RUN
- Exécute une commande dans une nouvelle couche.
En plus de pouvoir créer et démarrer des containers, Docker permet aussi de construire nos images à partir d’un fichier Dockerfile. sudo docker --help
. La commande dont nous avons besoin est donc build
, exécutez sudo docker build .
le “.” référant au répertoire courrant.
L’image créée n’a pas de nom, il faudra donc toujours y référer par son IMAGE ID ce qui n’est pas pratique. Pour “nommer:tagger” une image déja construite, la commande sudo docker tag --help
est très informative. Renommez votre image avec le nom “mondebian” et le tag “v1”. Le fichier Dockerfile utilise “debian:stable” comme image de base et celle-ci à été téléchargée car celle utilisée précédemment était “debian:latest”.
Il est aussi possible de choisir le nom et le tag à la construction de l’image. sudo docker build --help
. Pour donner un nom à l’image il faut utiliser l’option -t name:tag
. Si on utilise seulement -t name
le TAG “latest” sera appliqué par défaut.
Créez un nouveau container à partir de votre image “mondebian:v1” et lancez le en mode interactif avec pseudo-terminal. Vérifiez que l’utilitaire curl est bien installé.
Sur le système hôte, modifiez votre fichier Dockerfile, en respectant les bonnes pratiques, avec la commande nano Dockerfile
afin de pouvoir aussi utiliser les utilitaires ps, ifconfig et nano. Vous pouvez utiliser une notation “1.x” si vous construisez des images de test. sudo docker --help
indique que pour supprimer une image il faut utiliser la commande rmi
. Nommez votre image finale “mondebian:v2”.