[Docker] Installer Docker et apprendre les bases (Debian)
-
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.
– 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 lancedocker 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