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 Prochaine révision | Révision précédente | ||
docker [Le 04/05/2023, 13:49] bcag2 [Méthode conseillée par le site docker.com] màj (docker v23) |
docker [Le 05/07/2025, 22:52] (Version actuelle) krodelabestiole déplacement note doc officielle et anciennes versions / + note podman |
||
---|---|---|---|
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.\\ | ||
+ | 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. | ||
- | **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. | + | **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 niveau. Il 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. |
- | 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>À 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>À 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> | + | ===== Fonctionnement ===== |
- | ===== Pré-requis ===== | + | |
- | + | ==== Containers ==== | |
- | * Disposer des [[:sudo|droits d'administration]]. | + | |
- | * Disposer d'une connexion à Internet configurée et activée. | + | 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 ''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 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//).\\ | ||
+ | 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. | ||
+ | |||
+ | <note>Selon le paradigme Docker : **un processus = un conteneur**.\\ | ||
+ | C'est un facteur à prendre en compte pour choisir entre [[:LXC]] et Docker.</note> | ||
+ | |||
+ | ==== 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. | ||
+ | |||
+ | ==== 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 ''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 ===== | ||
- | ==== Méthode conseillée : installation depuis les dépôts officiels ==== | ||
- | **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]]. | ||
- | Il peut-être utile d'installer également [[:docker-compose]] pour travailler avec plusieurs conteneurs, comme illustré dans la page [[docker_lamp#methode_avancee|docker_lamp]] : | + | <note> |
- | <code bash>apt install docker-compose</code> | + | **[[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 par le site docker.com ==== | + | ==== Dépôts APT Ubuntu ==== |
- | 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. | + | |
- | (page d'origine en anglais : https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce) | + | **Docker** est disponible dans les [[:depots#dépôts officiels]] d'Ubuntu.\\ |
- | === Désinstaller les anciennes versions === | + | 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]]. |
- | Les anciennes versions de Docker étaient appelées docker, docker.io ou docker-engine. Si celles-ci sont installées, désinstallez-les : | + | |
+ | <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> | ||
+ | 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> | ||
+ | |||
+ | ==== Dépôts APT 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]]//)) | ||
+ | |||
+ | <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> | ||
+ | |||
+ | <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 : | ||
<code bash> | <code bash> | ||
# pour vérifier ce qui est installé lié à docker : | # pour vérifier ce qui est installé lié à docker : | ||
Ligne 41: | Ligne 90: | ||
sudo apt autoremove docker.io docker-compose | 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). | + | 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//). |
+ | </note> | ||
- | === Configurer le dépôt === | + | Ajouter la clé GPG officielle de Docker : |
- | Les étapes ci-dessous ne font que reprendre les instructions officielles accessibles sur [[https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository]]\\ | + | <code> |
- | Mettre à jour APT : | + | sudo apt update |
- | <code bash>sudo apt update</code> | + | sudo apt install ca-certificates curl |
- | 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 : | + | |
- | <code bash> | + | |
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 /usr/share/keyrings/docker-archive-keyring.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=/usr/share/keyrings/docker-archive-keyring.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 : |
- | Mettre à jour l'index APT : | + | <code> |
- | <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> | ||
- | ==== Pour les versions précédentes ou pour obtenir les dernières versions de Docker ==== | ||
- | === En utilisant le script d'installation fourni par Docker === | + | ==== Snap ==== |
- | Le script est à [[https://get.docker.com|télécharger depuis le site officiel]] de Docker. | + | **Docker** est disponible en [[:snap]] depuis [[https://snapcraft.io/docker|Snapcraft]]. |
- | - Télécharger le script et executer le script<code> | + | 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 : |
- | wget https://get.docker.com/ -O script.sh | + | <code>snap install docker</code> |
- | chmod +x script.sh | + | |
- | ./script.sh | + | |
- | </code> | + | |
- | === Manuellement === | + | FIXME Docker Compose est-il inclus ? |
- | (testé avec succès sur Ubuntu 16.04 64Bits) | + | |
+ | ==== Docker Desktop ==== | ||
- | - 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> | + | Il existe aussi [[https://docs.docker.com/desktop/|Docker Desktop]] qui inclut beaucoup de chose donc [[#Docker Compose]], [[https://kubernetes.io/|Kubernetes]]… |
- | - Télécharger la clé GPG et installer le package avec les [[commande_shell|commandes]] suivantes saisies dans un [[:terminal]] :<code> | + | 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 ! |
- | sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 | + | |
- | sudo apt-get update | + | <note tip> |
- | sudo apt-get install lxc-docker | + | 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 ! |
- | </code> | + | </note> |
- | ==== Docker Desktop ==== | ||
- | Il existe aussi docker-desktop qui inclue beaucoup de chose donc //compose//, //kubernetes//… [[https://docs.docker.com/desktop/]] (EN)\\ | ||
- | 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 ! | ||
===== Configuration ===== | ===== 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 159: | Ligne 185: | ||
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 184: | Ligne 211: | ||
==== Manipulation de volumes ==== | ==== Manipulation de volumes ==== | ||
+ | |||
Créer un volume | Créer un volume | ||
Ligne 281: | Ligne 309: | ||
===== 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). | ||
Ligne 303: | Ligne 333: | ||
* Dans le Dockerfile : ajouter la ligne <code>ENV TZ Europe/Amsterdam </code> ou encore : <code>ENV TZ=America/Los_Angeles | * 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> | RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone </code> | ||
- | |||
===== Désinstallation ===== | ===== Désinstallation ===== | ||
Ligne 317: | Ligne 346: | ||
* [[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 | ||
---- | ---- | ||
- | //Contributeur principal : [[:utilisateurs:chacmool|Chacmool]]// | + | //Contributeurs : [[:utilisateurs:Chacmool]], [[:utilisateurs:chamblard]], [[:utilisateurs:krodelabestiole]]// |
- | + | ||
- | //Contributeurs : // | + | |
- | * //[[:utilisateurs:chamblard|chamblard]]// | + |