Docker conteneur

04 Conteneur Docker

Lorsque vous lancez une image Docker, elle génère un conteneur Docker. Ce conteneur sera un réplica de cette image au niveau des fichiers. Cependant, il intégrera son propre espace de stockage, ses processus distincts et un environnement d’exécution isolé. Par exemple, prenons l’image que nous avons précédemment récupérée du portail « Docker Hub ». Pour l’exécuter, nous utiliserons la commande « docker run », soit pour l’image Ubuntu..

[root@docker ~]# docker run ubuntu

Cette commande recherche l’image Ubuntu sur la machine locale. Si l’image n’est pas présente, elle la télécharge depuis Docker Hub. Ensuite, elle crée un conteneur basé sur cette image. Le conteneur exécute généralement la commande par défaut, souvent /bin/bash, pour permettre l’interaction. Pour lister les conteneurs en cours d’exécution, exécutez la commande « docker ps ».

[root@docker ~]# docker ps
Liste conteneur docker active

Comme nous pouvons le constater sur la capture d’écran ci-dessus, il n’y a aucun conteneur. Cela s’explique par le fait qu’après avoir exécuté la commande « /bin/bash », il n’exécute plus aucune autre commande. Un conteneur docjer qui n’éxecutre rien s’éteinds automatiquement d’où le statut « Exited ». Ce conteneur, même s’il est éteint, est tout de même présent dans la machine. Pour voir tous les conteneurs actifs ou inactifs (statut exited), nous exécuterons la commande « docker ps -a ».

[root@docker ~]# docker ps -a

Afin de pouvoir interagir avec une instance dès sa création, il nous faudra le précisier au lancement du conteneur Docker. Pour cela, nous spécifierons lnous ajouterons le mode interactif (-i)et d’un terminal (-t). Cela nous permettra d’engager une interaction avec le conteneur via notre propre terminal.

[root@docker ~]# docker run -it ubuntu

Dans notre invite de commande, sur prompt, nous sommes passé du nom de l’hôte « docker » à l’identifiant de l’instance « 7c85ed7d6261 ».

Dans ce conteneur, le seul processus en cours d’exécution est le shell Bash.

Pour revenir à l’invite de commande de l’hôte sans éteindre le conteneur, nous utiliserons la combinaison de touches [Ctrl]+[P] [Ctrl]+[Q].

Nous exécuterons la commande permettant de répertorier tous les conteneurs, et nous constaterons que notre conteneur affiche un statut « UP ».

L’utilisation de la combinaison de touches [Ctrl]+[P] et [Ctrl]+[Q] nous détache de l’invite de commande du terminal de notre conteneur. Pour revenir au terminal de notre conteneur, nous attacherons le terminale de l’hôte à celui du conteneur. Nous utiliserons son identifiant unique, soit « 7c85ed7d6261″ dans notre exemple, ou même en tronquant l’identifiant en indiquant « 7c ».

[root@docker ~]# docker attach 7c

Les modifications apportées à un conteneur n’affectent ni l’image d’origine, ni la machine où le moteur Docker est exécuté. Pour illustrer ce concept, prenons notre conteneur, nous allons créer un fichier nommé « panda » dans le répertoire /home/.

Après avoir créer et vérifier la présence du fichier « panda », nous détacherons l’invite de commande. Pour rappel le détachement de l’invite de commande se fait à l’aide de la combinaison de touche clavier [ctrl]+[P] et [ctrl]+[Q]. Nous vérifierons ensuite que le répertoire /home/ de notre machine n’héberge pas ce fichier.

Après avoir créé et vérifié la présence du fichier « panda », nous détacherons l’invite de commande de notre conteneur à l’aide de la combinaison de touches [Ctrl]+[P] et [Ctrl]+[Q], puis nous vérifierons que le répertoire /home/ de notre machine ne contient pas ce fichier. Pour récapituler ce qui a été expliqué précédemment, Docker crée une couche de données supplémentaire pour stocker ces nouvelles données. Cela s’appelle la couche de données différentielle. La couche de données différentielle est fusionnée avec les autres données de notre conteneur pour former un seul objet, qui est le conteneur lui-même. Les informations de cette couche de données différentielle sont stockées dans les bibliothèques de Docker. Il nous sera possible de lister les données différentielles et les données fusionner, c’est-à-dire notre fichier panda en le recherchant dans notre système.

Nous retournerons dans notre conteneur, puis nous ajouterons des données dans le fichier « panda ».

[root@docker ~]# docker attach 7c
root@7c85ed7d6261:/home# echo "Bonjour" > panda
root@7c85ed7d6261:/home# cat panda

Retournons sur l’invite de commande de notre machine et éditons le fichier de différencier.

[root@docker ~]# vi /var/lib/docker/overlay2/14401c86fa9a626c1d8b39a7c6ba94968a3d4c6e8a54fe745db8f97efb307e8e/diff/home/panda

Nous ajouterons des données dans ce fichier.

Après avoir enregistrer les modifications nous retournerons dans notre conteneur, puis nous éditerons le fichier que nous avons créée.

[root@docker ~]# docker attach 7c
root@7c85ed7d6261:/home# cat panda

Les données n’auront pas été altérer par la modification que nous avons apporté à notre fichier vu qu’elles n’ont pas été fusionner avec les autres éléments de notre conteneur, c’est dire les données stockées dans le fichier : « var/lib/docker/overlay2/14401c86f../merged/home/panda ».

Sortons une nouvelle fois de notre conteneur à l’aide des combinaisons de touche [ctrl]+[P] et [ctrl]+[Q], nous ajouterons des données dans le fichier :

« var/lib/docker/overlay2/14401c86f…/merged/home/panda».

👍🏻 Les … sont à remplacer par la suite alphanumérique complet.

[root@docker ~]# vi /var/lib/docker/overlay2/14401c.../merged/home/panda

Après avoir enregistrer cette modification, nous attacherons une nouvelle fois le conteneur à notre invite de commande puis nous afficherons le contenu du fichier « panda ».

Docker se concentre principalement sur la séparation des programmes, appelés processus, pour éviter qu’ils ne se perturbent mutuellement et sur la gestion équitable des ressources telles que la puissance de calcul (CPU) et la mémoire. Cependant, en ce qui concerne les données, Docker n’impose pas une séparation aussi stricte par défaut. Cela signifie que, si nous ne prenons pas de précautions, les programmes dans les conteneurs pourraient partager ou même accéder à des données que nous souhaitons garder privées. Il est donc essentiel d’être attentif à la manière dont nous gérons et partageons les données dans Docker pour garantir la sécurité et la confidentialité des informations sensibles.