horizontal-logo-monochromatic-white.png
Bonjour à tous,
Voici un petit tutoriel pour vous présenter ce qu’est Docker, comment l’installer sur un système Debian et apprendre à l’utiliser à minima.
Table des matières
C’est quoi Docker
À quoi sert Docker ?
Comment fonctionne la technologie Docker ?
La technologie Docker est-elle la même que celle des conteneurs Linux traditionnels ?
Les avantages des conteneurs Docker
Modularité
Couches et contrôle des versions d’image
Restauration
Déploiement rapide
Installation de Docker
Utilisation basique de Docker
Désinstaller Docker
Travailler avec Docker
Sources
C’est quoi Docker
– Le logiciel « Docker » est une technologie de conteneurisation qui permet la création et l’utilisation de conteneurs Linux.
– La communauté Open Source Docker travaille à l’amélioration de cette technologie disponible gratuitement pour tout le monde.
– L’entreprise Docker Inc. s’appuie sur le travail de la communauté Docker, sécurise sa technologie et partage ses avancées avec tous les utilisateurs. Elle prend ensuite en charge les technologies améliorées et sécurisées pour ses clients professionnels.
À quoi sert Docker ?
– Avec la technologie Docker, vous pouvez traiter les conteneurs comme des machines virtuelles très légères et modulaires. En outre, ces conteneurs vous offrent une grande flexibilité : vous pouvez les créer, déployer, copier et déplacer d’un environnement à un autre, ce qui vous permet d’optimiser vos applications pour le cloud.
Comment fonctionne la technologie Docker ?
– La technologie Docker utilise le noyau Linux et des fonctions de ce noyau, telles que les groupes de contrôle cgroups et les espaces de noms, pour séparer les processus afin qu’ils puissent s’exécuter de façon indépendante.
– Cette indépendance reflète l’objectif des conteneurs : exécuter plusieurs processus et applications séparément les uns des autres afin d’optimiser l’utilisation de votre infrastructure tout en bénéficiant du même niveau de sécurité que celui des systèmes distincts.
– Les outils de conteneurs, y compris Docker, sont associés à un modèle de déploiement basé sur une image. Il est ainsi plus simple de partager une application ou un ensemble de services, avec toutes leurs dépendances, entre plusieurs environnements.
– Docker permet aussi d’automatiser le déploiement des applications (ou d’ensembles de processus combinés qui forment une application) au sein d’un environnement de conteneurs.
– Ces outils conçus sur des conteneurs Linux (d’où leur convivialité et leur singularité) offrent aux utilisateurs un accès sans précédent aux applications, la capacité d’accélérer le déploiement, ainsi qu’un contrôle des versions et de l’attribution des versions.
La technologie Docker est-elle la même que celle des conteneurs Linux traditionnels ?
– Non. À l’origine, la technologie Docker a été créée sur la base de la technologie LXC, que la plupart des utilisateurs associent aux conteneurs Linux « traditionnels », mais elle s’est depuis émancipée.
– LXC était un outil de virtualisation léger très utile, mais il n’offrait pas une expérience à la hauteur pour les utilisateurs ou les développeurs.
– La technologie Docker permet non seulement d’exécuter des conteneurs, mais aussi de simplifier leur conception et leur fabrication, l’envoi d’images, le contrôle des versions d’image, etc.
traditional-linux-containers-vs-docker_0.png
– Les conteneurs Linux traditionnels utilisent un système init capable de gérer plusieurs processus. Ainsi, des applications entières peuvent s’exécuter comme un bloc.
– La technologie Docker encourage la décomposition des applications en processus distincts et fournit les outils nécessaires pour y parvenir. Cette approche granulaire présente bien des avantages.
Les avantages des conteneurs Docker
Modularité
– L’approche de Docker en matière de conteneurisation repose sur la décomposition des applications : c’est-à-dire la capacité de réparer ou de mettre à jour une partie d’une application sans devoir désactiver l’ensemble de cette dernière.
– En plus de cette approche basée sur les microservices, Docker vous permet de partager des processus entre différentes applications quasiment comme vous le feriez avec une architecture orientée services (SOA).
Couches et contrôle des versions d’image
– Chaque fichier image Docker est composé d’une série de couches. Ces couches sont assemblées dans une image unique. Chaque modification de l’image engendre la création d’une couche. Chaque fois qu’un utilisateur exécute une commande, comme run ou copy, une nouvelle couche se crée.
– Docker réutilise ces couches pour la construction de nouveaux conteneurs, accélérant ainsi le processus de construction. Les modifications intermédiaires sont partagées entre les images, ce qui optimise la vitesse, la taille et l’efficacité.
– Qui dit superposition de couches, dit contrôle des versions. À chaque changement, un journal des modifications est mis à jour afin de vous offrir un contrôle total des images de votre conteneur.
Restauration
– La fonction la plus intéressante de la superposition de couches est sans doute la restauration. Chaque image est composée de couches. Aussi, si l’itération actuelle d’une image ne vous convient pas, vous pouvez restaurer la version précédente. —
– Cette fonction favorise le développement agile et vous aide à mettre en œuvre les pratiques d’intégration et de déploiement continus (CI/CD) au niveau des outils.
Déploiement rapide
– Avant, il fallait plusieurs jours pour mettre en place du nouveau matériel, le faire fonctionner, l’approvisionner et le rendre disponible. C’était un processus complexe et fastidieux.
– Aujourd’hui, avec les conteneurs Docker, vous pouvez effectuer tout cela en quelques secondes seulement. En créant un conteneur pour chaque processus, vous pouvez rapidement partager les processus similaires avec les nouvelles applications.
– De plus, comme vous n’avez pas besoin de redémarrer le système d’exploitation pour ajouter ou déplacer un conteneur, le délai de déploiement s’en trouve encore réduit.
– Et ce n’est pas tout. La vitesse du déploiement est telle que vous pouvez vous permettre de créer et de détruire facilement et à moindre coût les données de vos conteneurs, sans aucun problème.
– Pour résumer, la technologie Docker propose une approche plus granulaire, contrôlable et basée sur des microservices, qui place l’efficacité au cœur de ses objectifs.
Est-ce que vous êtes toujours là ? Toujours motivé? Alors c’est parti 🙂
Installation de Docker
– On update le système Debian:
apt update
– On installe des prérequis qui va permettre à apt d’utiliser les package en HTTPS:
apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common lsb-release
– On ajoute la clé GPG du dépôt Docker à APT:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
– On ajoute le dépôt stable à APT:
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
– On update apt
apt update
– On installe Docker:
sudo apt install docker-ce
sudo apt install docker-ce docker-ce-cli containerd.io
– On vérifie que le démon docker est bien lancé:
systemctl status docker
Utilisation basique de Docker
– La syntaxe est la suivante:
docker [option] [command] [arguments]
– Pour voir toutes les commandes disponibles, taper :
docker
attach Attach local standard input, output, and error streams to a running
container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by
default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
– Pour voir les options spécifiques à une commande, taper:
docker docker-subcommand --help
– Pour voir les informations système de Docker :
docker info
– Affichez l’ensemble des conteneurs existants:
Quand vous créez/lancez des conteneurs avec l’argument –detach, vous pouvez avoir besoin de savoir si les conteneurs sont toujours actifs, pour cela, vous devez utiliser la commande docker ps.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e2da0910758b nginx "nginx -g 'daemon of…" 5 seconds ago Up 4 seconds 0.0.0.0:8080->80/tcp awesome_vaughan
– Vous pouvez aussi voir l’ensemble des images présentes en local sur votre ordinateur, avec la commande docker images -a.
docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 6 weeks ago 13.3kB
– Nettoyer le système docker:
Après avoir fait de nombreux tests sur votre ordinateur, vous pouvez avoir besoin de faire un peu de ménage.
Pour cela, vous pouvez supprimer l’ensemble des ressources manuelles dans Docker.
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
Ou vous pouvez laisser faire Docker pour qu’il fasse lui-même le ménage :
docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
941b8955b4fd8988fefe2aa91c7eb501f2d4f8c56bf4718fea8ed50904104745
a96e73c623fb6530ab41db6a82aca7017d54a99590f0b45eb6bf934ef8e4d3ed
Deleted Images:
deleted: sha256:797a90d1aff81492851a11445989155ace5f87a05379a0fd7342da4c4516663e
deleted: sha256:c5c8911bd17751bd631ad7ed00203ba2dcb79a64316e14ea95a9edeb735ca3ea
Total reclaimed space: 21.08MB
– Celle-ci va supprimer les données suivantes :
L’ensemble des conteneurs Docker qui ne sont pas en status running ;
L’ensemble des réseaux créés par Docker qui ne sont pas utilisés par au moins un conteneur ;
L’ensemble des images Docker non utilisées ;
L’ensemble des caches utilisés pour la création d’images Docker.
Désinstaller Docker
apt-get purge docker-ce docker-ce-cli containerd.io
Images, containers, volumes, or customized configuration files on your host are not automatically removed. To delete all images, containers, and volumes:
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
You must delete any edited configuration files manually.
Travailler avec Docker
– On vérifie que l’installation est correcte en lançant l’image docker hello-world.
– Si elle est présente en locale, Docker la lance sinon il la télécharge puis la lance
docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:f2266cbfc127c960fd30e76b7c792dc23b588c0db76233517e1891a4e357d519
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be work**g correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
– On peux chercher un conteneur de la manière suivante:
docker search nomdupackage
docker search medusa
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
linuxserver/medusa A Medusa container, brought to you by LinuxS… 74
pymedusa/medusa Automatic Video Library Manager for TV Shows. 24 [OK]
lsioarmhf/medusa ARMHF based Linuxserver.io image of medusa 8
k8ssandra/medusa-operator 2
lsioarmhf/medusa-aarch64 ARM64 based Linuxserver.io image of medusa 1
k8ssandra/medusa 1
bobbysteel/medusa ** Please switch to pymedusa/medusa for auto… 1
misasa/medusa A stonegazer who keeps track specimen, box, … 0
....
– Pour télécharger un conteneur:
docker pull nomduconteneur
docker pull pymedusa/medusa
– Après le téléchargement, on peux lancer le conteneur avec la commande run comme:
docker run hello-world
– Lister les conteneurs téléchargés:
–> Ici, le conteneur hello-world qui se lance et qui s’arrête après un message de test.
docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 6 weeks ago 13.3kB
– Les conteneurs peuvent être plus utile que cela et peuvent être interactif
Cela veux dire qu’une fois lancé, ils sont similaires à une machine virtuelle.
– On peux lancer un conteneur de manière interactive de la manière suivante:
La combinaison de
-i et
-t donne l’acçès à un Shell interactif à l’intérieur du conteneur.
docker run -it ubuntu
– Le prompt change pour montrer le fait qu’on est à l’intérieur du conteneur et prends la forme suivante:
Output
root@d9b100f2f636:/#
– A noter que l’ID du conteneur est présent dans le prompt (d9b100f2f636).
Il sera important de le connaitre pour pouvoir le supprimer si besoin.
– On peux maintenant utiliser des commandes à l’intérieur de ce conteneur
– On peux aussi lancer un conteneur l’option -d
-d pour détacher le conteneur du processus principal de la console.
Il vous permet de continuer à utiliser la console pendant que votre conteneur tourne sur un autre processus
– On pourrait donc avoir besoin de “rentrer” dans votre conteneur Docker pour pouvoir y effectuer des actions.
–> Pour cela, on devra utiliser la commande :
docker exec -ti ID_RETOURNÉ_LORS_DU_DOCKER_RUN bash
Dans cette commande, l’argument -ti permet d’avoir un Shell bash pleinement opérationnel.
– Lister les conteneurs actifs:
docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED
– Lister les conteneurs actifs & inactifs:
docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d42d0bbfbd35 ubuntu "/bin/bash" About a minute ago Exited (0) 20 seconds ago friendly_volhard
0740844d024c hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago elegant_neumann
– Lister le dernier conteneur créé:
docker ps -l
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d42d0bbfbd35 ubuntu "/bin/bash" About a minute ago Exited (0) 34 se
– Démarrer un conteneur:
docker start CONTAINER ID
docker start d42d0bbfbd35
– Le conteneur démarrer et on peux vérifier sons statuts:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d42d0bbfbd35 ubuntu "/bin/bash" About a minute ago Up 8 seconds
– Arrêter un conteneur:
docker stop CONTAINER ID
docker stop NAMES
docker stop d42d0bbfbd35
docker stop friendly_volhard
– Supprimer un conteneur:
docker rm CONTAINER ID
docker rm NAMES
docker rm elegant_neumann
docker rm d42d0bbfbd35
– Redémarrer un conteneur:
docker container restart NAME ID
docker container restart CONTAINER ID
docker container restart medusa
– Supprimer une image:
docker rmi IMAGE ID
docker rmi NAMES
docker rmi elegant_neumann
docker rmi d42d0bbfbd35
– Copier un fichier d’un conteneur vers le host.
docker cp <containerId>:/file/path/within/container /host/path/target
$ sudo docker cp goofy_roentgen:/out_read.jpg .
Ici goofy_roentgen est le nom du conteneur container obtenu avec la commande suivante:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1b4ad9311e93 bamos/openface "/bin/bash" 33 minutes ago Up 33 minutes 0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp goofy_roentgen
– Vous pouvez aussi utiliser l’ID du conteneur:
docker cp 1b4a:/out_read.jpg .
Sources
– https://www.redhat.com/fr/topics/containers/what-is-docker