Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | |||
docker [Le 08/07/2025, 07:21] krodelabestiole détails |
docker [Le 22/07/2025, 11:32] (Version actuelle) krodelabestiole suppr note docker-ce erronée / détails divers |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{tag>Trusty Xenial serveur virtualisation}} | + | {{tag>Noble serveur virtualisation}} |
{{ :docker_container_engine_logo.png?200|}} | {{ :docker_container_engine_logo.png?200|}} | ||
Ligne 21: | Ligne 21: | ||
Docker fonctionne en compartimentant les containers (qui hébergent chacun un service), et l'hôte, la machine sur laquelle il est installé. | Docker fonctionne en compartimentant les containers (qui hébergent chacun un service), et l'hôte, la machine sur laquelle il est installé. | ||
- | Ces containers sont basés sur des [[:distributions]] Linux minimalistes (souvent Alpine ou Debian-slim, [[https://hub.docker.com/_/ubuntu|Ubuntu est aussi disponible]]), sur lesquelles on passe des commandes pour installer des logiciels ou les configurer. Cela se fait dans un fichier ''[[#Automatisation avec un Dockerfile|Dockerfile]]'' (qui est donc une liste de commandes qui décrit l'image du container, à la manière d'un [[:bash|script bash]]).\\ | + | Ces containers sont basés sur des [[:distributions]] Linux minimalistes (souvent Alpine ou Debian-slim, [[https://hub.docker.com/_/ubuntu|Ubuntu est aussi disponible]]), sur lesquelles on passe des commandes pour installer des logiciels ou les configurer. Cela se fait dans un fichier ''[[#Automatisation avec un Dockerfile|Dockerfile]]'' (qui est donc principalement une liste de commandes qui décrit l'image du container, à la manière d'un [[:bash|script bash]]).\\ |
On peut échanger ce fichier ''[[#Automatisation avec un Dockerfile|Dockerfile]]'' et les images générées sur [[https://hub.docker.com/|Docker Hub]] en particulier, ce qui permet aux éditeurs et développeurs de distribuer leurs applications web.\\ | On peut échanger ce fichier ''[[#Automatisation avec un Dockerfile|Dockerfile]]'' et les images générées sur [[https://hub.docker.com/|Docker Hub]] en particulier, ce qui permet aux éditeurs et développeurs de distribuer leurs applications web.\\ | ||
- | Ceci permet de télécharger des images pré-construites, qui embarquent donc toutes les dépendances (jusqu'au système) d'une application web ou autre (on trouve aussi des outils en [[:commande_shell|ligne de commande]], qui ne sont pas spécifiques aux [[:serveur|serveurs]]). Il suffit d'une ligne de commande pour les récupérer et les exécuter. | + | Ceci permet de télécharger des images pré-construites, qui embarquent absolument toutes les dépendances d'un service ou d'une application (on trouve aussi des outils en [[:commande_shell|ligne de commande]], qui ne sont pas spécifiques aux [[:serveur|serveurs]]). Une seule ligne de commande suffit à les récupérer (la première fois) et les exécuter (à chaque fois). |
- | La communication de l'intérieur du container avec un autre container ou avec l'hôte doit donc être paramétrée : les containers sont des bacs à sable, leur contenu est isolé comme derrière un [[:pare-feu]] global (c'est un principe qu'on retrouve avec [[:Flatpak]] par exemple, et cela assure une certaine sécurité //par design//).\\ | + | La communication de l'intérieur du container avec un autre container ou avec l'hôte doit être paramétrée : les containers sont des bacs à sable, leur contenu est isolé comme derrière un [[:pare-feu]] global (c'est un principe qu'on retrouve avec [[:Flatpak]] par exemple, et cela assure une certaine sécurité //par design//).\\ |
- | Pour utiliser un container on peut faire correspondre un port interne à un port externe, un répertoire interne à un répertoire externe, lui passer les [[:variables d'environnement]] de son choix, etc. : il faut définir chaque canal de communication. | + | Pour utiliser un container on peut faire correspondre un port interne à un port externe, un répertoire interne à un répertoire externe, lui passer les [[:variables d'environnement]] de son choix, etc. : chaque lien doit être défini par une relation (//binding//) ''hôte:container'' (c'est la syntaxe utilisée). |
<note>Selon le paradigme Docker : **un processus = un conteneur**.\\ | <note>Selon le paradigme Docker : **un processus = un conteneur**.\\ | ||
C'est un facteur à prendre en compte pour choisir entre [[:LXC]] et Docker.</note> | C'est un facteur à prendre en compte pour choisir entre [[:LXC]] et Docker.</note> | ||
+ | |||
+ | ==== Non-persistance ==== | ||
+ | |||
+ | Une autre particularité de **Docker** est le fait que pour permettre ce fonctionnement, tous les containers doivent être réinitialisés à chaque lancement.\\ | ||
+ | Toutes les données devant être persistées, fichiers et bases de données, doivent se trouver ailleurs, généralement sur l'hôte ou dans un [[https://docs.docker.com/engine/storage/volumes/|volume]] spécifique.\\ | ||
+ | Il s'agit d'une stricte séparation entre le logiciel générique et les fichiers utiles, propres à notre instance.\\ | ||
+ | D'où l'intérêt primordial des correspondances (//[[https://docs.docker.com/engine/storage/bind-mounts/|bindings]]//) ''hôte:container'' ou ''volume:container'' décrites [[#Containers|au-dessus]]. On ne conserve jamais rien d'utile seulement dans un container, il doit toujours pouvoir être considéré comme une sorte de moteur applicatif vierge, qu'il est inutile de [[:sauvegarde|sauvegarder]] ! | ||
==== Docker Compose ==== | ==== Docker Compose ==== | ||
Ligne 42: | Ligne 49: | ||
La définition complète de l'environnement pèse ainsi seulement quelques kilooctets, et son partage ou sa migration vers une nouvelle machine sont extrêmement rapides et faciles. | La définition complète de l'environnement pèse ainsi seulement quelques kilooctets, et son partage ou sa migration vers une nouvelle machine sont extrêmement rapides et faciles. | ||
- | |||
- | ==== Non-persistance ==== | ||
- | |||
- | Une autre particularité de **Docker** est le fait que pour permettre ce fonctionnement, tous les containers doivent être réinitialisés à chaque lancement.\\ | ||
- | Toutes les données devant être persistées, fichiers et bases de données, doivent se trouver ailleurs, généralement sur l'hôte ou dans un [[https://docs.docker.com/engine/storage/volumes/|volume]] spécifique.\\ | ||
- | D'où l'intérêt primordial des correspondances (//[[https://docs.docker.com/engine/storage/bind-mounts/|bindings]]//) ''hôte:container'' ou ''volume:container'' (c'est la syntaxe utilisée) décrites [[#Containers|au-dessus]]. On ne conserve jamais rien d'utile seulement dans un container, il doit toujours pouvoir être considéré comme une sorte de moteur applicatif vierge ! | ||
===== Installation ===== | ===== Installation ===== | ||
Ligne 63: | Ligne 64: | ||
**Docker** est disponible dans les [[:depots#dépôts officiels]] d'Ubuntu.\\ | **Docker** est disponible dans les [[:depots#dépôts officiels]] d'Ubuntu.\\ | ||
Pour l'installer il suffit donc d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] ''[[apt>docker.io]]'', et le paquet ''[[apt>docker-compose-v2]]'' pour profiter de [[#Docker Compose]]. | Pour l'installer il suffit donc d'[[:tutoriel:comment_installer_un_paquet|installer le paquet]] ''[[apt>docker.io]]'', et le paquet ''[[apt>docker-compose-v2]]'' pour profiter de [[#Docker Compose]]. | ||
- | |||
- | <note> | ||
- | Il existe aussi une version communautaire disponible sur les anciennes [[:versions]] d'Ubuntu depuis le paquet ''[[apt>docker-ce]]''. Cette version est cependant particulièrement ancienne, et aujourd'hui déconseillée. | ||
- | </note> | ||
<note tip> | <note tip> | ||
Ligne 83: | Ligne 80: | ||
**Désinstaller les anciennes versions :** | **Désinstaller les anciennes versions :** | ||
- | Les autre versions de Docker sont ou étaient appelées ''docker'', ''docker.io'' ou ''docker-engine''. Si celles-ci sont installées, désinstallez-les : | + | Les autre versions de Docker sont ou étaient appelées ''docker'', ''docker.io'' ou ''docker-engine''. Si celles-ci sont installées, désinstallez-les !\\ |
- | <code bash> | + | Pour vérifier ce qui est installé lié à docker : |
- | # pour vérifier ce qui est installé lié à docker : | + | apt list -i ~ndocker |
- | dpkg -l |grep -E "^ii.+docker" | + | puis supprimer : |
- | # puis supprimer | + | sudo apt autoremove docker.io docker-compose |
- | sudo apt autoremove docker.io docker-compose | + | |
- | </code> | + | Le contenu de ''/var/lib/docker/'', y compris les images, les conteneurs, les volumes et les réseaux, sont préservés. Si vous n'avez pas besoin de sauvegarder vos données existantes et que vous souhaitez commencer par une installation propre, reportez-vous à (//en//) //[[https://docs.docker.com/engine/install/ubuntu/#uninstall-docker-engine|uninstall Docker Engine]]//. |
- | Le contenu de ''/var/lib/docker/'', y compris les images, les conteneurs, les volumes et les réseaux, sont préservés. Si vous n'avez pas besoin de sauvegarder vos données existantes et que vous souhaitez commencer par une installation propre, reportez-vous à //[[https://docs.docker.com/engine/install/ubuntu/#uninstall-docker-engine|uninstall Docker Engine]]//(//en//). | + | |
+ | Voir aussi éventuellement : | ||
+ | snap list | grep docker | ||
</note> | </note> | ||