Skip to content
jwillems202415 edited this page Feb 23, 2025 · 11 revisions

Noms des auteurs : Nathan Colson, WILLEMS Julien Date de réalisation : 10/02/2025, 23 février 2025

1. Premier container

1.1. Hello World

Pouvez-vous expliquer avec vos mots ce qui s'est passé suite à l'exécution de cette commande?

En exécutant la commande, Docker a d'abord vérifier si je possédais déjà l'image qui allait permettre de créer le container hello-world. Puisque je ne l'avais pas, il l'a téléchargé et a lancer un container hello-world, qui nous explique les bases de Docker.

1.2. Observer un container

Retrouvez les informations suivantes sur le container lancé précédemment : 1. Quel est son identifiant ?
27374735499c

2. Quel est son nom ?
flamboyant_archimedes

3. Quel est son état ?
Exited (0) 5 minutes ago

4. Quel est le nom de son image? Avez-vous vu au point 1.1. d''où cette image provenait?
hello-world, il provient d'une librairie d'image pour créer des containers

5. Quelle commande le container a-t-il exécuté?
le container a lancé un ls -a pour avoir des informations sur lui même ⚠️ À VÉRIFIER

6. Si vous avez installer Docker Desktop, pouvez-vous retrouver ces mêmes informations dans l'interface graphique?
Oui je peux retrouver les mêmes informations qu'en ligne de commandes

1.3. Les images

1. Quelles informations voyez-vous? Quel est le lien avec ce que vous avez observé auparavant?
On a des informations sur l'image qui permet de créer plusieurs containers les mêmes, ici le hello-world

2. Comparez l'output de cette commande avec la vue correspondante de l'interface graphique.
C'est exactement les mêmes informations

3. Essayez de trouver la commande qui vous permettra de supprimer cette image C'est une bonne idée de ne pas conserver les images non utilisées sur votre système de fichiers : même avec la mutualisation de couches, elles prennent de l'espace sur le disque!
La commande c'est $ docker rm <nomDeImage>. Attention, il faut avoir au préalable supprimé tous les conteneurs référençant cette image via la commande $ docker container rm <nom du conteneur> sinon une erreur apparaîtra.

2. Utiliser un container

2.1. Interagir avec un container

1. A quoi servent les options i et tdans la commande ci-dessus?
Permet de créer un container interactif avec un terminal

2. Chaque container Docker est destiné à exécuter une commande unique.
Quelle est-elle dans ce cas-ci? Ici bash qui ouvre un terminal

3. Dans le container, quels sont les processus présents? Et leurs PIDs?
On a bash avec un PID 1 et ps aux avec un PID 2

4. Avec quel utilisateur êtes-vous loggé?
A Root

5. Votre container a-t'il accès à Internet? Qui est son résolveur?
192.168.65.7, Oui il a accès a internet

2.2. Inspecter un container

1. Chaque container dispose d'une interface réseau. Quelle est l'adresse IP de l'interface de votre container?
172.17.0.2

2. Votre container a-t'il des ports ouverts?
Non

2.3. Faire tourner un service dans un container

- Qu'avez-vous observé au niveau des "ports" ? Expliquez et illustrez votre réponse avec des screenshots.
On a donc dit au container qui est sur le port 80 de ce mettre sur notre port 80 avec la commande -p80:80

Capture d’écran 2025-02-03 162611

Capture d’écran 2025-02-03 162759

Capture d’écran 2025-02-03 162826

3. Construire des images

3.1. Figer un container

Attacher un terminal Bash à un conteneur en cours d'exécution : $ docker exec -it <nom du conteneur> /bin/bash

Création d'une image sur base d'un conteneur existant : $ docker container commit <nom du conteneur> <nom pour l'image>

3.2. Créer une image sur base d'un Dockerfile

Bien faire attention à ce que le fichier de création ("Dockerfile") soit bien appelé "Dockerfile", sans extension.

Construction d'une nouvelle image sur base d'un Dockerfile : $ docker build -t <nom pour l'image>

Exercices récapitulatifs

Documentez ici la réalisation des exercices, via des explications et des snapshots.

4.1. Démarrer un serveur Web Apache

L’image pour Apache sur Docker Hub est nommée “httpd”. Je démarre un virtualhost sur base de cette image avec $ docker run --name serveur_Apache -p80:80 httpd. Je confirme que cela fonctionne en accédant au port 80 de mon système hôte avec un navigateur. image

Ensuite, pour lancer un second virtualhost, il suffit d’effectuer la même commande, en prenant soin de choisir un nom de conteneur différent et bien entendu faire une redirection de port adaptée (dans ce cas, de 80 à 8080) : $ docker run --name serveur_Apache_2 -p8080:80 httpd. Comme pour le premier virtualhost, ouvrir un navigateur et se connecter à “localhost:8080” confirme le fonctionnement du serveur. image

Pour ce qui est de la personnalisation des pages d’accueil, il faut d’abord consulter la documentation de l’image utilisée (httpd) pour savoir où elle est stockée. Pour gagner du temps, j’ai fini par demander à une IA (iask.ai) où se trouvait cette page et il s’avère qu’elle est accessible via ce chemin : /usr/local/apache2/htdocs/index.html.

J’ai donc effectué la commande $ docker exec -it serveur_Apache /bin/bash pour ouvrir une session bash sur le virtualhost n°1, ensuite $ apt update && apt install vim pour pouvoir utiliser Vim pour l’édition de fichiers, et ai enfin exécuté $ vim /usr/local/apache2/htdocs/index.html pour modifier la page d’accueil. On voit que mes modifications fonctionnent lors d’une connexion par navigateur. image

La même opération peut être appliquée pour le virtualhost n°2. Voici finalement le contenu du Dockerfile :

FROM httpd:latest
RUN apt update && apt install -y vim
COPY index.html /usr/local/apache1/htdocs

4.2. Lancer un résolveur Bind dans un container Docker

1. Quelle configuration avez-vous effectuée au niveau des ports ? 2. Qu'avez-vous observé dans la trace Wireshark qui prouve que la configuration est correcte? Illustrez avec un screenshot de la capture.

4.3. Container avec script Python

Contenu du fichier Dockerfile :

FROM debian:latest
CMD date

Ensuite, pour construire l’image, il faut utiliser la commande $ docker build -t <nom image> .. Dans ce cas-ci, le nom de l'image sera “clock”. Voici le résultat :
image

Clone this wiki locally