Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
docker [Le 03/07/2025, 23:28]
krodelabestiole + fonctionnement / suppr infos obsolètes / mise en forme
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|}}
 ====== docker ====== ====== docker ======
  
-**[[wpfr>​Docker]]** est un logiciel libre (sous [[wpfr>​Licence_Apache|licence Apache 2.0]]) à mi-chemin entre la virtualisation applicative et l'​automatisation. Il permet de manipuler des conteneurs de logiciels. Il isole les processus les uns des autres pour créer une virtualisation de haut niveau. +**[[wpfr>​Docker]]** est un logiciel libre (sous [[wpfr>​Licence_Apache|licence Apache 2.0]]) à mi-chemin entre la virtualisation applicative et l'​automatisation. Il permet de manipuler des conteneurs de logiciels. Il isole les processus les uns des autres pour créer une [[wpfr>​Conteneur_(virtualisation)|virtualisation de haut niveau]].\\ 
-<note info>​Dans l'​esprit docker: **un processus = un conteneur**.\\ +Contrairement aux systèmes de [[:virtualisation]], ​**Docker** n'​embarque pas tout le système d'​exploitation invité (tel que le [[:​kernel|noyau]]) mais ne s'​occupe que de la partie haut niveauIl utilise le noyau de l'​hôte et ne fait fonctionner que le strict nécessaire sur les invités. Ceci allège grandement les images invitées et les ressources nécessaires ​à leur fonctionnement tout en assouplissant la distribution de celles-ci.
-Facteur ​à prendre ​en compte dans le choix LXC vs DOCKER.</​note>​+
  
-Contrairement aux autres systèmes de (para)virtualisation, ​**Docker** ​n'​embarque pas un système d’exploitation invité mais ne s'​occupe que de la partie haut niveau. Il utilise le noyau de l'hôte et ne fait fonctionner que le strict nécessaire sur les invités.+**Docker** ​permet ainsi de décrire ​un environnement complet ​de développement ou de production pour en faciliter ​la portabilité. Il est théoriquement spécifiquement orienté [[:​serveur]] ([[:LAMP]], [[:​NodeJS]],​ [[:CMS]], [[:​cms#​generateurs_de_sites_statiques|SSG]],​ etc.) mais fonctionne en pratique aussi pour n'importe quel service, utilitaire, ou application en ligne de commande.
  
-Docker permet ​aussi de partager, télécharger ​et installer facilement ​des applications ​depuis un dépôt d'​images,​ [[https://​hub.docker.com/​|Docker Hub]].+Plus simplement, **Docker** permet de distribuer ​et donc télécharger, ​installer ​et faire fonctionner ​facilement ​une application ou un ensemble de services sur n'​importe quelle [[:​distributions|distribution Linux]] ​depuis un dépôt d'​images ​standard**[[https://​hub.docker.com/​|Docker Hub]]**. Ceci le rend extrêmement pertinent pour monter un [[:​hebergement#​auto-hebergement|serveur auto-hébergé]],​ dans le but général de déployer rapidement divers outils à usage privé ou semi-privé,​ pour éventuellement les découvrir en les essayant.((Voir le sujet //​[[https://​forum.ubuntu-fr.org/​viewtopic.php?​id=2082878|Docker : pour ou contre ?]]// sur le forum)) En fonction des images choisies et de leurs configurations,​ sa souplesse et sa fiabilité le rendent tout aussi apte à fournir des services en production, même lorsque ceux-ci sont basés sur des technologies disparates.
  
 <note tip>Pour mettre en place un serveur [[:LAMP]] grâce à Docker, n'​hésitez pas à consulter [[:​docker_lamp|ce tutoriel]].</​note>​ <note tip>Pour mettre en place un serveur [[:LAMP]] grâce à Docker, n'​hésitez pas à consulter [[:​docker_lamp|ce tutoriel]].</​note>​
  
-<note warning>À l'​heure actuelle, ​Docker n'est [[https://​github.com/​Microsoft/​WSL/​issues/​575|pas compatible]] avec [[:​wsl|Windows Subsystem for Linux 1]]. Pour l'​utiliser vous devez convertir votre subsystem en version 2 (''​wsl.exe %%--%%set-version ubuntu 2''​).</​note>​+<note warning>​Docker n'est [[https://​github.com/​Microsoft/​WSL/​issues/​575|pas compatible]] avec [[:​wsl|Windows Subsystem for Linux 1]]. Pour l'​utiliser vous devez convertir votre //subsystem// en version 2 (''​wsl.exe %%--%%set-version ubuntu 2''​).</​note>​
  
 ===== Fonctionnement ===== ===== Fonctionnement =====
Ligne 20: Ligne 19:
 ==== Containers ==== ==== Containers ====
  
-Docker fonctionne en différenciant ​les containers (qui hébergent chacun un service), ​de 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 commandespour installer des logiciels ou les configurer. ​Cala se fait dans un fichier ''​Dockerfile''​ (qui est donc une liste de commandes, ​un peu comme un [[:​bash|script bash]], qui décrit l'​image du container).\\ +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 ''​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 ​entre l'​intérieur du container ​et l'​hôte,​ ou avec un autre container, ajoute donc un niveau de complexité. 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 ​moyen 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**.\\ 
 +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 ====
  
 Tout ces paramètres peuvent évidemment rendre la ligne de commande assez longue !\\ Tout ces paramètres peuvent évidemment rendre la ligne de commande assez longue !\\
-C'est là l'​intérêt du fichier ''​[[https://​docs.docker.com/​compose/​intro/​compose-application-model/#​illustrative-example|docker-compose.yml]]''​ qui les décrit en [[wpfr>​YAML]],​ un format particulièrement lisible ​!+C'est là l'​intérêt du fichier ''​[[https://​docs.docker.com/​compose/​intro/​compose-application-model/#​illustrative-example|docker-compose.yml]]''​ qui les décrit en [[wpfr>​YAML]],​ un format particulièrement ​simple et lisible.
  
 Un seul fichier ''​docker-compose.yml''​ permet de décrire plusieurs containers (pour un serveur [[:LAMP]] par exemple [[:​apache2|Apache]],​ [[:​php|PHP-FPM]],​ [[:​MariaDB]],​ [[https://​github.com/​mailhog/​MailHog|MailHog]],​ etc.).\\ Un seul fichier ''​docker-compose.yml''​ permet de décrire plusieurs containers (pour un serveur [[:LAMP]] par exemple [[:​apache2|Apache]],​ [[:​php|PHP-FPM]],​ [[:​MariaDB]],​ [[https://​github.com/​mailhog/​MailHog|MailHog]],​ etc.).\\
Ligne 41: Ligne 50:
 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 ​====+===== Installation =====
  
-Un autre niveau de complexité vient du fait que pour permettre ce fonctionnement,​ tous les containers doivent être réinitialisés à chaque lancement.\\ +  * **Docker** est disponible dans les [[#Dépôts APT Ubuntu|dépôts officiels APT]] d'​Ubuntu
-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 est aussi distribué par ses développeurs ​dans des versions plus récentes sur leur propre ​[[#Dépôt APT Docker|dépôt APT]]. 
-D'où l'​intérêt primordial des correspondances ''​hôte:container''​ (c'est la syntaxe utilisée) décrites au paragraphe précédentOn ne conserve jamais rien d'​utile seulement dans un container !+  * Il existe aussi un paquet [[#snap]] maintenu par [[:Canonical]].
  
-===== Installation =====+<​note>​ 
 +**[[https://​podman.io/​|Podman]]** est une alternative à **Docker**, qui en reprend presque exactement le fonctionnement et les commandes. Il est moins répandu mais il se propose d'en améliorer la sécurité en permettant son utilisation sans [[:​sudo|privilège administrateur]].((Voir //​[[https://​www.ionos.fr/​digitalguide/​serveur/​know-how/​podman-vs-docker/​|Podman vs. Docker : quel moteur de conteneur choisir ?]]//)) 
 +</​note>​
  
-==== Méthode conseillée : installation depuis les dépôts officiels ​====+==== Dépôts APT Ubuntu ​====
  
-**Docker** ​fait partie des [[:depots|dépôts officiels]] ​à partir ​d’[[:​trusty|Ubuntu ​14.04 LTS]]Il suffit donc d'​[[:​tutoriel:​comment_installer_un_paquet|installer le paquet]] ​**[[apt>​docker.io]]**.+**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]].
  
-Il peut-être utile d'​installer également ​[[:docker-compose]] pour travailler avec plusieurs conteneurscomme illustré dans la page [[docker_lamp#​methode_avancee|docker_lamp]] +<note tip> 
-<code bash>apt install docker-compose</​code>+Si on préfère **[[https://​podman.io/​|Podman]]** à **Docker**il suffit d'​installer à la place les paquets ''​[[apt>​podman]]''​ et ''​[[apt>podman-compose]]''​. 
 +</note>
  
-==== Méthode conseillée par le site docker.com ​====+==== Dépôt APT Docker ​====
  
-Il existe 2 versions de Docker : Docker CE (Community Edition) et Docker EE (Enterprise Edition). La version CE est gratuite et open-source,​ et correspond à la version packagée ​par défaut dans les dépôts Ubuntu, mais en version plus récente. C'est donc l'​installation ​de cette version qui est décrite ci-aprèset qui utilise le dépôt officiel mis à disposition par le site Docker. +C'est la méthode officiellement recommandée ​par les développeurs ​de Docker,((//[[https://​docs.docker.com/engine/​install/​ubuntu/#​install-using-the-repository|Install using the apt repository]]//​)) et celle qui permet de disposer des versions les plus à jour.
-(page d'​origine en anglais : https://​docs.docker.com/​install/​linux/​docker-ce/​ubuntu/#​install-docker-ce)+
  
-=== Désinstaller les anciennes versions ===+<note tip> 
 +Vous trouverez ces informations concernant l'​installation de **Docker** sur Ubuntu en anglais sur son [[https://​docs.docker.com/​engine/​install/​ubuntu/​|site officiel]]. N'​hésitez pas à consulter cette page pour vérifier l'​actualité des informations traduites ci-dessous. 
 +</​note>​
  
-Les anciennes versions de Docker étaient appelées docker, docker.io ou docker-engine. Si celles-ci sont installées,​ désinstallez-les :​ +<note important
-<code bash+**Désinstaller ​les anciennes versions ​:**
-# pour vérifier ce qui est installé lié à docker : +
-dpkg -l |grep -E "​^ii.+docker"​ +
-# puis supprimer +
-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 à [[https://​docs.docker.com/​engine/​install/​ubuntu/#​uninstall-docker-engine|uninstall Docker Engine]](en).+
  
-=== Configurer le dépôt ===+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 !\\ 
 +Pour vérifier ce qui est installé lié à docker : 
 +  apt list -i ~ndocker 
 +puis supprimer : 
 +  sudo apt autoremove docker.io docker-compose
  
-Les étapes ci-dessous ne font que reprendre ​les instructions officielles accessibles sur [[https://​docs.docker.com/​engine/​install/​ubuntu/#​install-using-the-repository]]\\ +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]]//.
-Mettre à jour APT : +
-<code bash>​sudo apt update</code> +
-Installer les paquets permettant à APT d'​utiliser un serveur HTTPS de dépôt : +
-<code bash>​sudo apt install \ +
-apt-transport-https \ +
-ca-certificates \ +
-curl \ +
-software-properties-common<​/code>+
  
-Puis ajouter ​la clé GPG du site de Docker : +Voir aussi éventuellement : 
-<​code ​bash>+  snap list | grep docker 
 +</​note>​ 
 + 
 +Ajouter ​la clé GPG officielle ​de Docker : 
 +<​code>​ 
 +sudo apt update 
 +sudo apt install ca-certificates curl
 sudo install -m 0755 -d /​etc/​apt/​keyrings sudo install -m 0755 -d /​etc/​apt/​keyrings
-curl -fsSL https://​download.docker.com/​linux/​ubuntu/​gpg ​| sudo gpg --dearmor ​-o /​etc/​apt/​keyrings/​docker.gpg +sudo curl -fsSL https://​download.docker.com/​linux/​ubuntu/​gpg -o /​etc/​apt/​keyrings/​docker.asc 
-sudo chmod a+r /​etc/​apt/​keyrings/​docker.gpg+sudo chmod a+r /​etc/​apt/​keyrings/​docker.asc
 </​code>​ </​code>​
  
-Pointer vers le dépôt ​de la version "​stable"​ de Docker CE +Ajouter ​le dépôt ​aux sources APT 
-<​code ​bash>+<​code>​
 echo \ echo \
-"deb [arch=amd64 signed-by=/​etc/​apt/​keyrings/​docker.gpg] https://​download.docker.com/​linux/​ubuntu \ +  ​"deb [arch=$(dpkg --print-architecture) ​signed-by=/​etc/​apt/​keyrings/​docker.asc] https://​download.docker.com/​linux/​ubuntu \ 
-$(lsb_release ​-cs) stable"​ | \ +  $(. /etc/os-release && echo "​${UBUNTU_CODENAME:​-$VERSION_CODENAME}"​) stable"​ | \ 
-sudo tee /​etc/​apt/​sources.list.d/​docker.list > /dev/null+  sudo tee /​etc/​apt/​sources.list.d/​docker.list > /dev/null 
 +sudo apt update
 </​code>​ </​code>​
  
-=== Installer ​Docker CE === +Installer ​les paquets docker ​
- +<​code>​
-Mettre à jour l'​index APT : +
-<code bash>​sudo apt update</​code>​ +
-Installer la dernière version de Docker Engine et containerd ​+
-<​code ​bash>+
 sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
-# puis vérifier que c'est bien installé 
-docker --version 
-# et pour docker compose 
-docker compose 
-# qui doit vous afficher l'aide de compose 
 </​code>​ </​code>​
 +
 +==== Snap ====
 +
 +**Docker** est disponible en [[:snap]] depuis [[https://​snapcraft.io/​docker|Snapcraft]]. Ce [[:snap]] est généralement plus à jour que le paquet [[:deb]] des [[#dépôts APT Ubuntu]], mais un peu moins que celui du [[#dépôt APT Docker]].
 +
 +On peut simplement installer l'​application ''​Docker''​ depuis le [[:snap store|centre d'​applications (Snap Store)]], ou installer le paquet ''​docker''​ en ligne de commande :
 +<​code>​snap install docker</​code>​
 +[[#Docker Compose]] est inclus.
  
 ==== Docker Desktop ==== ==== Docker Desktop ====
  
-Il existe aussi docker-desktop qui inclue ​beaucoup de chose donc //compose////​kubernetes//​… ​[[https://docs.docker.com/​desktop/]] (EN)\\ +Il existe aussi [[https://​docs.docker.com/desktop/|Docker Desktop]] ​qui inclut ​beaucoup de chose donc [[#Docker Compose]], [[https://kubernetes.io/|Kubernetes]] 
-et une interface graphique… MAIS la page [[https://​docs.docker.com/​desktop/​install/​linux-install/​]] (EN) précise bien que sous linux, cela nécessite une VM pour fonctionner,​ ce qui est un peu dommage… libre à vous !+et une interface graphique… MAIS la page [[https://​docs.docker.com/​desktop/​install/​linux-install/​]] (EN) précise bien que sous Linux, cela nécessite une [[:​virtualisation|machine virtuelle]] ​pour fonctionner,​ ce qui est un peu dommage… libre à vous ! 
 + 
 +<note tip> 
 +Pour profiter d'une interface graphique il est probablement bien plus pratique d'​utiliser [[https://​www.portainer.io/​|Portainer]],​ lui-même étant distribué en image Docker ! 
 +</​note>​
  
 ===== Configuration ===== ===== Configuration =====
Ligne 330: Ligne 344:
   * [[https://​xataz.developpez.com/​tutoriels/​utilisation-docker/​|Tutoriel sur developpez.com (mis à jour en mai 2017)]]   * [[https://​xataz.developpez.com/​tutoriels/​utilisation-docker/​|Tutoriel sur developpez.com (mis à jour en mai 2017)]]
   * [[https://​www.it-connect.fr/​debuter-avec-docker-et-les-containers-sous-debian-8/​|Docker et les containers sous Debian 8 (oct 2014)]]   * [[https://​www.it-connect.fr/​debuter-avec-docker-et-les-containers-sous-debian-8/​|Docker et les containers sous Debian 8 (oct 2014)]]
 +  * [[https://​podman.io/​|Podman]],​ une alternative à Docker
  
 ---- ----
  
 //​Contributeurs : [[:​utilisateurs:​Chacmool]],​ [[:​utilisateurs:​chamblard]],​ [[:​utilisateurs:​krodelabestiole]]//​ //​Contributeurs : [[:​utilisateurs:​Chacmool]],​ [[:​utilisateurs:​chamblard]],​ [[:​utilisateurs:​krodelabestiole]]//​
  • docker.1751578080.txt.gz
  • Dernière modification: Le 03/07/2025, 23:28
  • par krodelabestiole