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 10/12/2017, 17:35]
80.12.38.199 [Installation]
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 ​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 [[wpfr>​Conteneur_(virtualisation)|virtualisation de haut niveau]].\\
 +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 niveau. Il 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.
  
-**Docker** ​est un logiciel libre (sous [[wpfr>​Licence_Apache|licence Apache 2.0]]) à mi-chemin entre la virtualisation applicative et l'​automatisationIl permet de manipuler des conteneurs de logiciels. Il complète le conteneur Linux LXC (il n'​utilise plus LXC depuis peu) en isolant les processus les uns des autres ​pour créer une virtualisation de haut niveau. +**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.
-<note info>​Dans l'esprit docker: **un processus = un conteneur**.\\ +
-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 niveauIl utilise ​le noyau de l'​hôte ​et ne fait fonctionner que le strict nécessaire ​sur les invités.+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.
  
-Docker ​c'est aussi [[https://​registry.hub.docker.com/​|un dépôt d'​images]] à partir duquel vous pouvez télécharger et partager des applications sans avoir à réinventer la roue.+<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>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>​ 
-===== Pré-requis ​ ===== + 
-  +===== Fonctionnement ===== 
-  Disposer ​des [[:sudo|droits ​d'administration]]. + 
-  * Disposer ​d'​une ​connexion ​à Internet configurée ​et activée.+==== Containers ==== 
 + 
 +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 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 particulierce qui permet aux éditeurs et développeurs de distribuer leurs applications web.\\ 
 +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 ê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. : 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 ==== 
 + 
 +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 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.).\\ 
 +Le déploiement ​d'un environnement complet pour une, voire plusieurs application(s) web peut alors se résumer ​à la récupération d'un ''​docker-compose.yml''​ (parfois accompagné d'​autres fichiers : ''​Dockerfile'',​ fichiers de configuration destinés à être copiés dans le container, etc.) suivie de la commande : 
 + 
 +  docker compose up 
 + 
 +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.
  
 ===== Installation ===== ===== Installation =====
-Attention ces instructions sembles obsolètes. 
-==== Pour Ubuntu 14.04 LTS (« The Trusty Tahr ») et ultérieures ==== 
  
-**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 [[#Dépôts APT Ubuntu|dépôts officiels ​APT]] d'​Ubuntu. 
 +  * 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]]. 
 +  * Il existe aussi un paquet ​[[#snap]] maintenu par [[:Canonical]].
  
-==== Pour les versions précédentes ou pour obtenir les dernières versions de Docker ​====+<​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>​
  
-=== En utilisant le script d'​installation fourni par Docker ​===+==== Dépôts APT Ubuntu ====
  
-Le script ​est à [[https://get.docker.com|télécharger depuis ​le site officiel]] de Docker.+**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]].
  
-- Télécharger le script et executer le script<code+<note tip
-wget https://get.docker.com/ -O script.sh +Si on préfère **[[https://podman.io/|Podman]]** à **Docker**, il suffit d'​installer à la place les paquets ''​[[apt>​podman]]''​ et ''​[[apt>​podman-compose]]''​
-chmod +x script.sh +</note>
-./script.sh +
-</code>+
  
-=== Manuellement ​===  +==== Dépôt APT Docker ====
-(testé avec succès sur Ubuntu 16.04 64Bits)+
  
 +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.
  
-  - Tout d'abord, ​[[:tutoriel:​comment_modifier_un_fichier|ouvrez le fichier]] **/​etc/​apt/​sources.list.d/docker.list** en modificationpuis collez-y la ligne suivante : <​file>​deb http://get.docker.io/ubuntu docker ​main</file+<note tip> 
-  - Télécharger ​la clé GPG et installer le package avec les [[commande_shell|commandes]] suivantes saisies dans un [[:​terminal]] ​:<​code>​ +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. 
-sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 +</​note>​ 
-sudo apt-get update + 
-sudo apt-get install lxc-docker+<note important>​ 
 +**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 !\\ 
 +Pour vérifier ce qui est installé lié à docker : 
 +  apt list -i ~ndocker 
 +puis supprimer : 
 +  sudo apt autoremove docker.io docker-compose 
 + 
 +Le contenu de ''/​var/​lib/docker/'',​ y compris les images, les conteneurs, les volumes et les réseaux, sont préservésSi vous n'avez pas besoin de sauvegarder vos données existantes et que vous souhaitez commencer par une installation proprereportez-vous à (//en//) //[[https://docs.docker.com/​engine/​install/ubuntu/#​uninstall-docker-engine|uninstall Docker Engine]]//​. 
 + 
 +Voir aussi éventuellement : 
 +  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 curl -fsSL https://​download.docker.com/​linux/​ubuntu/​gpg ​-o /etc/apt/​keyrings/​docker.asc 
 +sudo chmod a+r /etc/apt/keyrings/docker.asc
 </​code>​ </​code>​
  
-===== Configuration =====+Ajouter le dépôt aux sources APT : 
 +<​code>​ 
 +echo \ 
 +  "deb [arch=$(dpkg --print-architecture) signed-by=/​etc/​apt/​keyrings/​docker.asc] https://​download.docker.com/​linux/​ubuntu \ 
 +  $(. /​etc/​os-release && echo "​${UBUNTU_CODENAME:​-$VERSION_CODENAME}"​) stable"​ | \ 
 +  sudo tee /​etc/​apt/​sources.list.d/​docker.list > /dev/null 
 +sudo apt update 
 +</​code>​
  
 +Installer les paquets docker :
 +<​code>​
 +sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
 +</​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 ====
 +
 +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 [[:​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 =====
  
 Dans un environnement privé, vous pouvez éventuellement ajouter votre utilisateur au groupe **docker** afin de manipuler les containers sans avoir à utiliser **sudo** systématiquement : Dans un environnement privé, vous pouvez éventuellement ajouter votre utilisateur au groupe **docker** afin de manipuler les containers sans avoir à utiliser **sudo** systématiquement :
Ligne 101: Ligne 183:
 docker rmi id_ou_nom_de_l_image docker rmi id_ou_nom_de_l_image
 </​code>​ </​code>​
 +
 ==== Manipulation de conteneurs ==== ==== Manipulation de conteneurs ====
  
Ligne 125: Ligne 208:
 </​code>​ </​code>​
  
 +==== Manipulation de volumes ====
 +
 +Créer un volume
 +
 +<​code>​
 +docker volume create le_nom_du_volume
 +</​code>​
 +
 +Lister les volumes
 +
 +<​code>​
 +docker volume ls
 +</​code>​
 +
 +Supprimer un ou plusieurs volumes (-f pour forcer la suppression)
 +<​code>​
 +docker volume rm le_nom_du_volume1 le_nom_du_volume2
 +</​code>​
 +
 +Supprimer les volumes orphelins vue que avec l'​utilisation progressive de docker il y'aura pas mal de volumes orphelins qui prendraient beaucoup d'​espace disque
 +
 +<​code>​
 +docker volume rm $(docker volume ls -qf dangling=true)
 +</​code>​
  
  
Ligne 140: Ligne 247:
  
 <​code>​ <​code>​
-cat nginx.tgz | docker import - nginx+docker import - nginx < nginx.tgz
 </​code>​ </​code>​
  
 ==== Automatisation avec un Dockerfile ==== ==== Automatisation avec un Dockerfile ====
  
-Le dockerfile est un fichier texte qui inclut une liste d'​actions à exécuter pour construire une image. ​+Le dockerfile est un fichier texte qui inclut une liste d'​actions à exécuter pour construire une image.
  
 Par exemple une image simpliste de Apache pourrait ressembler à ça : Par exemple une image simpliste de Apache pourrait ressembler à ça :
Ligne 200: Ligne 307:
  
 ===== Divers ===== ===== Divers =====
 +
 ==== Date et heure ==== ==== Date et heure ====
 +
 La date et l'​heure du conteneur est basée sur celle du système hôte. Cependant il est possible de constater un écart d'​heure entre le système et le conteneur. Ceci est dû au fait que  le conteneur peut-être configuré sur un autre fuseau horaire (timezone). La date et l'​heure du conteneur est basée sur celle du système hôte. Cependant il est possible de constater un écart d'​heure entre le système et le conteneur. Ceci est dû au fait que  le conteneur peut-être configuré sur un autre fuseau horaire (timezone).
  
-Date de votre système et fuseau : +  * Date de votre système et fuseau : <​code>​
-<​code>​+
 date date
-more /​etc/​timezone +cat /​etc/​timezone</​code>​ 
-</​code>​ +  ​* ​Date du conteneur et fuseau : <​code>​ 
-Date du conteneur et fuseau : +sudo docker attach CONTENEUR
-<​code>​ +
-sudo docker attach CONTENEUR ​  #valider par la touche ENTRÉE+
 date date
-more /​etc/​timezone+cat /​etc/​timezone ​</​code>​ ou : <​code>​ 
 +docker exec CONTENEUR bash -c "date ;  cat /​etc/​timezone"​
 </​code>​ </​code>​
-Réglage du fuseau ​dans le conteneur +  * Réglage du fuseau ​depuis ​le conteneur <​code>​ 
-<​code>​+sudo docker attach CONTENEUR ​
 sudo dpkg-reconfigure tzdata sudo dpkg-reconfigure tzdata
 +</​code>​ (se détacher du conteneur : CTRL-p CTRL-q)
 +<note important>​Cette technique ci-dessus n'est pas forcément pertinente/​persistante. Préférer ce qui suit : </​note>​
 +  * Créer un conteneur avec la time Zone configurée. Pour cela utiliser la variable d'​environnement "​TZ"​ (voir [[https://​serverfault.com/​questions/​683605/​docker-container-time-timezone-will-not-reflect-changes|ce post]] ) <​code>​
 +docker run -e TZ=Europe/​Amsterdam debian:​jessie date
 </​code>​ </​code>​
-( se détacher du conteneur ​CTRL-p CTRL-q ) +  * Dans le Dockerfile ​ajouter la ligne <​code>​ENV TZ Europe/​Amsterdam </​code>​ ou encore : <​code>​ENV TZ=America/​Los_Angeles 
 +RUN ln -snf /​usr/​share/​zoneinfo/​$TZ /​etc/​localtime && echo $TZ > /​etc/​timezone </​code>​
  
 ===== Désinstallation ===== ===== Désinstallation =====
Ligne 227: Ligne 338:
 ===== Voir aussi ===== ===== Voir aussi =====
  
-  * [[http://​linuxfr.org/​news/​docker-tutoriel-pour-manipuler-les-conteneurs|Tutoriels et articles en français sur Docker]] +  * [[:​docker_lamp]] Mettre en place un serveur web (LAMP) à base de conteneurs docker 
-  * [[http://​docker.com/​|Documentation officielle]] +  * [[tutoriel:​comment_installer_gitlab-ce_avec_docker_pour_son_poste_de_travail|Comment installer Gitlab-ce avec Docker pour son poste de travail]] 
-  * [[http://​www.it-connect.fr/​debuter-avec-docker-et-les-containers-sous-debian-8/​|Docker et les containers sous Debian 8]]+  * [[https://​linuxfr.org/​news/​docker-tutoriel-pour-manipuler-les-conteneurs|Tutoriels et articles en français sur Docker]] 
 +  * [[https://docs.docker.com/​|Documentation officielle]] 
 +  * [[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://​podman.io/​|Podman]],​ une alternative à Docker
  
 ---- ----
  
-//Contributeur principal ​: [[:utilisateur:chacmool|Chacmool]]// +//Contributeurs ​: [[:utilisateurs:Chacmool]][[:​utilisateurs:​chamblard]], [[:​utilisateurs:​krodelabestiole]]//
- +
-//​Contributeurs : // +
-  * //[[:​utilisateurs:​chamblard|chamblard]]//+
  • docker.1512923733.txt.gz
  • Dernière modification: Le 10/12/2017, 17:35
  • par 80.12.38.199