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 13/12/2018, 14:59]
pdemong [Installation]
docker [Le 04/07/2025, 06:46] (Version actuelle)
krodelabestiole corrections
Ligne 1: Ligne 1:
-{{tag>​Trusty Xenial virtualisation}} +{{tag>​Trusty Xenial ​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.
-**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 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.+
 <note info>​Dans l'​esprit docker: **un processus = un conteneur**.\\ <note info>​Dans l'​esprit docker: **un processus = un conteneur**.\\
 Facteur à prendre en compte dans le choix LXC vs DOCKER.</​note>​ Facteur à prendre en compte dans le choix LXC vs DOCKER.</​note>​
  
-Contrairement aux autres systèmes de (para) virtualisation,​ **Docker** nembarque pas un système d’exploitation invité mais ne soccupe 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.+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 ​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.+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]].
  
-<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]]. ​Donc ne tentez pas cette installation si vous utilisez Ubuntu on Windows. (voir [[https://forum.ubuntu-fr.org/viewtopic.php?​id=2023871|ce sujet]] sur le forum)</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>​ 
-===== Pré-requis ​ ===== + 
-  +===== Fonctionnement ===== 
-  * Disposer des [[:sudo|droits d'administration]]. + 
-  * Disposer ​d'​une ​connexion ​à Internet configurée ​et activée.+==== 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é. 
 + 
 +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 configurerCela 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).\\ 
 +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.\\ 
 +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. 
 + 
 +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//​).\\ 
 +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. 
 + 
 +==== 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 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. 
 + 
 +==== Non-persistance ==== 
 + 
 +Un autre niveau de complexité vient du 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 ''​hôte:​container''​ (c'est la syntaxe utilisée) décrites au paragraphe précédent. On ne conserve jamais rien d'​utile seulement dans un container !
  
 ===== Installation ===== ===== Installation =====
-==== Installation du paquet maintenu pour 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 [[#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ôts APT Docker|dépôt APT]]. 
 +  * Il existe aussi un paquet ​[[#snap]] maintenu par [[:Canonical]].
  
-==== Méthode conseillée par le site docker.com ==== +<note tip> 
-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ès, et qui utilise le dépôt officiel mis à disposition par le site Docker+Vous trouverez des informations ​en anglais concernant ​l'​installation de **Docker** sur Ubuntu sur son [[https://​docs.docker.com/engine/​install/​ubuntu/​|site officiel]]. 
-(page d'​origine en anglais : https://​docs.docker.com/​install/​linux/​docker-ce/ubuntu/#​install-docker-ce) +</note>
-=== Configurer le dépôt === +
-Mettre à jour APT : +
-<​code>​$ sudo apt-get update</​code>​ +
-Installer les paquets permettant à APT d'​utiliser un serveur HTTPS de dépôt : +
-<​code>​$ sudo apt-get install \ +
-        apt-transport-https \ +
-        ca-certificates \ +
-        curl \ +
-        software-properties-common</​code>​ +
-Puis ajouter la clé GPG du site de Docker : +
-<code>$ curl -fsSL https://​download.docker.com/​linux/​ubuntu/​gpg | sudo apt-key add -</​code>​ +
-Vérifiez que vous avez bien installé cette clé en comparant avec les 8 derniers caractères de l'​empreinte ci-dessous : +
-9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 +
-Pour cela, taper : +
-<code>$ sudo apt-key fingerprint 0EBFCD88+
  
-    pub   ​4096R/​0EBFCD88 2017-02-22 +==== Dépôts APT Ubuntu ====
-          Key fingerprint ​9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88 +
-    uid                  Docker Release (CE deb) <​docker@docker.com>​ +
-    sub   ​4096R/​F273FCD8 2017-02-22</​code>​+
  
-Pointer vers le dépôt de la version "​stable"​ de Docker ​CE : +**Docker** est disponible dans les [[:depots#​dépôts officiels]] d'​Ubuntu.\\  
-<​code>​$ sudo add-apt-repository ​+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]].
-       "​deb ​[arch=amd64] https://download.docker.com/​linux/​ubuntu \ +
-       ​$(lsb_release -cs) \ +
-       ​stable"</​code>+
  
-=== Installer Docker CE === +<note
-Mettre à jour l'​index APT : +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. 
-<code>$ sudo apt-get update</​code+</note>
-Installer la dernière ​version ​de Docker CE : +
-<code>$ sudo apt-get install ​docker-ce</​code> +
-==== Pour les versions précédentes ou pour obtenir les dernières versions de Docker ====+
  
-=== En utilisant le script ​d'installation fourni par Docker ===+<note tip> 
 +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>​
  
-Le script est à [[https://​get.docker.com|télécharger depuis le site officiel]] de Docker.+==== Dépôts APT Docker ​====
  
-Télécharger le script et executer le script<​code>​ +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]]//​)) 
-wget https://get.docker.com/​ -O script.sh + 
-chmod +x script.sh +Ajouter la clé GPG officielle de Docker : 
-./script.sh+<​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+/etc/​apt/​keyrings/​docker.asc
 </​code>​ </​code>​
  
-=== Manuellement ===  +Ajouter le dépôt aux sources APT : 
-(testé avec succès sur Ubuntu 16.04 64Bits)+<​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>​
  
-  - Tout d'​abord,​ [[:​tutoriel:​comment_modifier_un_fichier|ouvrez le fichier]] ​**/​etc/​apt/​sources.list.d/​docker.list** en modification,​ puis collez-y la ligne suivante ​<​file>​deb http://get.docker.io/ubuntu ​docker ​main</​file>​ +==== Snap ==== 
-  - Télécharger la clé GPG et installer le package avec les [[commande_shell|commandes]] suivantes saisies dans un [[:terminal]] :<​code>​ + 
-sudo apt-key adv --keyserver keyserver.ubuntu.com ​--recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 +**Docker** est disponible ​en [[:snap]] depuis [[https://snapcraft.io/docker|Snapcraft]]. 
-sudo apt-get update + 
-sudo apt-get install lxc-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> 
 + 
 +FIXME Docker Compose est-il inclus ? 
 + 
 +=== Désinstaller les anciennes versions === 
 + 
 +Les anciennes versions de Docker étaient appelées ''​docker'',​ ''​docker.io''​ (si vous lui préférez la version officielle) ou ''​docker-engine''​Si celles-ci sont installées,​ désinstallez-les : 
 +<code bash> 
 +# 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>​ </​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//​).
  
-===== Configuration =====+==== 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 137: Ligne 177:
 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 161: Ligne 202:
 </​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 181: Ligne 246:
 ==== 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 236: Ligne 301:
  
 ===== 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 263: Ligne 332:
 ===== 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://​xataz.developpez.com/​tutoriels/​utilisation-docker/​|Tutoriel sur developpez.com (mis à jour en mai 2017)]] +  * [[https://​linuxfr.org/​news/​docker-tutoriel-pour-manipuler-les-conteneurs|Tutoriels et articles en français sur Docker]] 
-  * [[http://​www.it-connect.fr/​debuter-avec-docker-et-les-containers-sous-debian-8/​|Docker et les containers sous Debian 8 (oct 2014)]]+  * [[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.1544709559.txt.gz
  • Dernière modification: Le 13/12/2018, 14:59
  • par pdemong