Introduction¶
Support de présentation : https://soleil-docker.jrobert-orleans.fr/01-Intro_docker
(et en pdf : Intro)
Lien vers le QCM de début et de fin de formation : https://forms.office.com/e/YF2tNwfjJB
Lien vers le questionnaire de satisfaction (à remplir en fin de formation): https://forms.office.com/e/TFmN6k7uDV
Ce document est téléchargeable en PDF : formationdocker.pdf.
Présentation¶
Les points qui vous ont été présentés :
La problématique de la mise en production
Virtualisation
Conteneurisation
Ce qu’apporte Docker
Démo
Docker, premiers pas¶
Installation¶
La documentation pour l’installation est disponible ici : https://docs.docker.com/engine/install/
Si vous êtes sous ubuntu, choisissez la méthode décrite ici : https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository
Si vous êtes sous debian, choisissez la méthode décrite ici : https://docs.docker.com/engine/install/debian/#install-using-the-repository
Vous pouvez aussi installer docker-desktop en suivant la documentation décrite ici : https://docs.docker.com/desktop/ <https://docs.docker.com/desktop/>`_
Vérification de l’installation¶
Après l’installation, vérifiez que tout fonctionne correctement (si vous utilisez docker desktop, ne mettez pas sudo):
sudo docker version
sudo docker info
sudo docker run --rm hello-world
Post-installation (si vous ne passez pas par docker-desktop)¶
Pour pouvoir lancer la commande docker sans avoir à utiliser sudo, suivez les instructions Manage Docker as a non-root user du lien suivant, résumées ci-dessous : https://docs.docker.com/engine/install/linux-postinstall/
sudo groupadd docker
sudo usermod -aG docker $USER
Attention : cela donne des droits élevés à votre utilisateur. Un utilisateur qui appartient au groupe docker a les mêmes possibilités que le superutilisateur.
A l’issue de cette étape, vous pouvez lancer la commande docker sans sudo :
docker run --rm hello-world
Premier conteneur¶
Ouvrez deux terminaux, l’un pour lancer un conteneur, et l’autre pour observer le système.
Dans le premier terminal, lancez un conteneur ubuntu en exécutant : docker run -it ubuntu bash
Dans l’autre terminal, listez les conteneurs actifs avec : docker ps.
Vous pouvez agrémenter cette commande de l’option --size pour observer l’espace disque pris par les conteneurs : docker ps --size.
Cela affiche 2 valeurs : la taille prise par l’image et la taille prise par les données que vous avez ajoutées.
Faites un tour à l’intérieur du conteneur dans votre premier terminal :
constatez que l’utilisateur est root (avec la commande
whoami).constatez que le système de fichiers n’est pas celui de la machine hote (par exemple avec
ls /home/).constatez que vous pouvez installer des logiciels (
apt updatepuisapt install vim). Remarquez l’augmentation de l’espace utilisé par votre conteneur.constatez que vous ne pouvez pas rebooter la machine, ni tuer de processus qui ne sont pas dans le conteneur, etc.
Interaction avec le processus du conteneur¶
Par défaut la sortie standard d’un conteneur est « branchée » dans votre terminal. Par contre, l’entrée standard ne l’est pas, il faut pour cela utiliser l’option -i de docker run. Pour le constater, on va utiliser la commande cat qui recopie sur la sortie standard ce qu’elle reçoit sur l’entrée standard.
Essayez de lancer
docker run ubuntu cat. Remarquez que la commande s’arrête immédiatement : cat n’arrive pas à lire quoi que ce soit sur l’entrée standard et termine.Essayez de lancer
docker run -i ubuntu cat. Cette fois ci on peut envoyer du texte à cat.
Mais ce n’est pas toujours suffisant, pour avoir une interaction complète avec notre conteneur, on ajoutera l’option « -t » qui permet
d’émuler un terminal. C’est ce qu’on a fait précédemment avec : docker run -it ubuntu bash
On peut choisir de ne pas attacher un conteneur à notre terminal avec l’option -d docker run -it -d ubuntu bash et on peut rattacher le terminal
avec docker attach puis se détacher avec la séquence ctrl-pq.
Cycle de vie d’un conteneur¶
Un conteneur peut être dans l’un des états suivants :
Created (docker create) : vient d’être créé mais n’est pas lancé.
Running (docker run).
Restarting (docker restart).
Exited (docker kill/stop) : les processus du conteneur sont tous « morts ».
Paused (docker pause / docker unpause) : les processus sont tous en pause, prend des ressources mémoire.
Dead : en cours de suppression.
À vous¶
Dans quel état se trouve votre conteneur actuel (pour l’observer, utilisez
docker ps) ?Tuez votre conteneur avec
docker kill PREFIXE_ID_CONTENEURoù PREFIXE_ID_CONTENEUR est le début de l’ID de votre conteneur.Pour constater que ça a fonctionné, vous ne devez plus le voir apparaître lorsque vous faites
docker ps.Pourtant il existe encore, mais est dans l’état « exited ». Observez son existence avec
docker ps -aoudocker ps --all.Relancez le avec
docker start. Constatez que votre conteneur a été relancé.Pour terminer, essayez de supprimer votre conteneur avec
docker rm.
Récapitulatif¶
commandes à retenir
docker ps -adocker run -it -d IMAGE COMMANDEdocker killdocker rm
À vous¶
Lancez la commande
sleep 2ddans un conteneur ubuntu.Quelle est la taille prise par l’image « alpine » ?
L’image alpine contient-elle un exécutable pour bash ? Quel shell peut y être utilisé ?
Que fait le code suivant ?
id=$(docker container create -it ubuntu sleep 2d) docker container start $id
Quelques autres petites options de docker run¶
En vous aidant du man de docker-run, essayez les options suivantes:
--restart--rm-h,--hostname-m,--memory(pour le tester, inspirez vous de la commande suivantebash -c "cat /dev/zero | head -c 100M | tail: elle crée un processus qui consomme environ 100M de mémoire)--name-u,--user
Nettoyage¶
Pour supprimer tous les conteneurs terminés, vous pouvez utiliser docker container prune
Dockerhub¶
Présentation¶
DockerHub est le « registry public » officiel de Docker. Il permet de :
Stocker et partager des images Docker
Automatiser la construction d’images
Intégrer avec des outils CI/CD
Collaborer en équipe
Types d’images¶
Sur DockerHub, on trouve différents types d’images (cf : https://docs.docker.com/docker-hub/repos/manage/trusted-content/):
Images officielles : Maintenues par Docker ou les éditeurs officiels
Images vérifiées : Créées par des Docker Verified Publishers
Images communautaires : Créées par la communauté
Lorsque vous avez fait docker run ubuntu, l’image ubuntu:latest a été téléchargée à partir de docker hub.
Pour en savoir plus sur le contenu de cette image, on a la documentation ici : https://hub.docker.com/_/ubuntu .
On remarque par exemple que cette image propose le tag « 24.04 », probablement la mouture de 2024 de ubuntu. On peut la lancer en faisant :
docker run -it ubuntu:24.04. Regardez le contenu de /etc/os-release.
Sur le site dockerhub : https://hub.docker.com/ dans l’onglet « Explore », on y trouvera tout un tas d’images.
Pouvez vous trouver une image avec un interpréteur python ?
Pouvez vous trouver une image avec un interpréteur python en version 2.7 ?
Est-ce qu’il y a une image pour postgresql ? openjdk ? nextcloud ? nginx ? docker ? D’autres choses que vous aimeriez y trouver ?
Limites et alternatives¶
- Limites de DockerHub gratuit (cfhttps://docs.docker.com/docker-hub/usage/):
100 pulls anonymes / 6h
200 pulls authentifiés / 6h
Un seul build concurrent
- Alternatives à DockerHub :
GitHub Container Registry
Google Container Registry
Amazon Elastic Container Registry
Azure Container Registry