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/

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 update puis apt 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_CONTENEUR où 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 -a ou docker 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 -a

  • docker run -it -d IMAGE COMMANDE

  • docker kill

  • docker rm

À vous

  • Lancez la commande sleep 2d dans 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 suivante bash -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

Quiz

--- primary_color: orange secondary_color: lightgray text_color: black shuffle_questions: false --- ## Quelle(s) commande(s) permet de lister les images docker de votre système ? > Plusieurs réponses sont valides ! - [x] docker image ls - [x] docker images - [x] docker image list - [ ] docker images ls - [ ] docker images list - [ ] docker ls - [ ] docker list - [ ] docker container ls ## Quelle(s) commande(s) permet de lister les conteneurs actifs de votre système ? > Plusieurs réponses sont valides ! - [x] docker ps - [x] docker container ls - [x] docker container ps - [ ] docker ls - [x] docker container list - [ ] docker containers ## Quelle(s) commande(s) permet d'obtenir des informations sur la commande docker ps ? - [x] man docker-ps - [ ] man docker ps - [ ] man docker - [ ] docker --help - [x] docker ps --help - [x] docker ps -h ## Quelle(s) commande(s) permet de lister tous les containers (y compris ceux qui ne sont pas actifs ?) ? - [x] docker ps -a - [x] docker ps --all - [ ] docker - [x] docker container list -a - [ ] docker containers