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 08/02/2016, 15:15]
cafecho Mise en forme wiki
docker [Le 08/01/2024, 14:40] (Version actuelle)
maragatain Changement du chemin et du nom du fichier
Ligne 1: Ligne 1:
-{{tag>​Trusty ​Wily virtualisation}}+{{tag>​Trusty ​Xenial ​virtualisation}}
 ---- ----
  
Ligne 6: Ligne 6:
  
  
-**Docker** est un logiciel libre ([[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** 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>​
Ligne 14: Ligne 14:
 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 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.
  
-===== Pré-requis =====+<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>​ 
 +===== Pré-requis ​ =====
    
   * Disposer des [[:​sudo|droits d'​administration]].   * Disposer des [[:​sudo|droits d'​administration]].
Ligne 20: Ligne 23:
  
 ===== Installation ===== ===== Installation =====
 +==== Méthode conseillée : installation depuis les dépôts officiels ====
  
-==== Pour Trusty ​14.04 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** fait partie des [[:depots|dépôts officiels]] à partir de [[:trusty|Trusty 14.04]]. Il suffit d'[[:tutoriel:​comment_installer_un_paquet|installer le paquet]] **[[apt>docker.io]]**.+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]] : 
 +<code bash>apt install docker-compose</​code>
  
-==== Pour les versions ​précédentes ou si vous souhaitez obtenir ​les dernières versions ​de Docker ====+==== Méthode conseillée par le site docker.com ==== 
 +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) 
 +=== Désinstaller les anciennes versions ​=== 
 +Les anciennes versions de Docker é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 : 
 +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).
  
-=== En utilisant ​le script d'​installation fourni par docker ​===+=== Configurer ​le dépôt ​=== 
 +Les étapes ci-dessous ne font que reprendre les instructions officielles accessibles sur [[https://​docs.docker.com/​engine/​install/​ubuntu/#​install-using-the-repository]]\\ 
 +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>​
  
-[[https://​get.docker.com|Script à télécharger]]+Puis ajouter la clé GPG du site de Docker : 
 +<code bash> 
 +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 chmod a+r /​etc/​apt/​keyrings/​docker.gpg 
 +</​code>​ 
 + 
 +Pointer vers le dépôt de la version "​stable"​ de Docker CE : 
 +<code bash> 
 +echo \ 
 +"deb [arch=amd64 signed-by=/​etc/​apt/​keyrings/​docker.gpg] https://​download.docker.com/​linux/​ubuntu \ 
 +$(lsb_release -cs) stable"​ | \ 
 +sudo tee /​etc/​apt/​sources.list.d/​docker.list > /dev/null 
 +</​code>​ 
 + 
 +=== Installer Docker CE === 
 +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 
 +# 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>​ 
 +==== Pour les versions précédentes ou pour obtenir les dernières versions de Docker ==== 
 + 
 +=== En utilisant le script d'​installation fourni par Docker === 
 + 
 +Le script est à [[https://​get.docker.com|télécharger ​depuis le site officiel]] de Docker. 
 + 
 +- Télécharger le script et executer le script<​code>​ 
 +wget https://​get.docker.com/​ -O script.sh 
 +chmod +x script.sh 
 +./​script.sh 
 +</​code>​
  
 === Manuellement === === Manuellement ===
 +(testé avec succès sur Ubuntu 16.04 64Bits)
  
-  ​- Tout d'​abord,​ [[:​tutoriel:​comment_modifier_un_fichier|ouvrez le fichier]] **/​etc/​apt/​sources.list.d/​docker.list** en modification,​\\ puis y coller ​la ligne suivante: <​file>​deb http://​get.docker.io/​ubuntu docker main</​file>​. + 
-  - Télécharger la clé GPG et installer le package avec les [[commande_shell|commande]] suivantes saisies dans un [[:​terminal]] :<​code>​sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9+  ​- 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>​ 
 +  - 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
 sudo apt-get update sudo apt-get update
-sudo apt-get install lxc-docker</​code>​+sudo apt-get install lxc-docker 
 +</​code>​
  
 +==== 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 =====
  
-<note important>​Vous devez fermer et rouvrir votre session pour que les changements prennent effet, sinon vous risquez de rencontrer des erreurs de permissions.</​note>​ 
  
-<note tip>​Si ​vous voulez vous éviter ​de taper //sudo// devant chaque commande Docker, ​ajoutez votre utilisateur au groupe ​Docker: <​code>​sudo ​addgroup [utilisateur] ​docker</​code></​note>​+Dans un environnement privé, ​vous pouvez éventuellement ajouter votre utilisateur au groupe **docker** afin de manipuler les containers sans avoir à utiliser **sudo** systématiquement : 
 +<note important>​N'​ajoutez ​pas votre utilisateur au groupe ​docker sur un serveur accessible publiquement ​cette méthode pose un problème de sécurité. Il devient en effet possible d'​élever les privilèges de l'​utilisateur sans entrer à nouveau de mot de passe. Si vous êtes sur un serveur en production n'​entrez pas cette commande et utilisez la commande **sudo docker** au lieu de **docker** pour l'​ensemble des opérations.</​note>​ 
 +<​code>​sudo ​usermod -aG docker ​$USER</​code>​ 
 +<​note>​Vous devez fermer et rouvrir votre session pour que les changements prennent effet.</​note>​
  
-Une fois Docker installé, vous pouvez lancer le service: +Une fois Docker installé, vous pouvez lancer le service : 
-<​code>​sudo service docker start</​code>​ + 
-et vérifier s'il fonctionne correctement (n'​oubliez pas le //sudo// devant la commande docker si vous n'avez pas ajouté votre utilisateur au groupe ​Docker+  ​sudo service docker start 
-<​code>​docker run hello-world</​code>​ + 
-À la première exécution, ​docker ​ne doit pas trouver l'​image de l'​application //​hello-word//​ en local. Il va alors tenter de télécharger la dernière version. En cas de réussite, il exécute l'​application qui affiche une simple page d'​explication sur la sortie standard et s'​arrête.+et vérifier s'il fonctionne correctement (n'​oubliez pas le //sudo// devant la commande docker si vous n'avez pas ajouté votre utilisateur au groupe ​//docker//: 
 + 
 +  ​docker run hello-world 
 + 
 +À la première exécution, ​Docker ​ne doit pas trouver l'​image de l'​application //​hello-word//​ en local. Il va alors tenter de télécharger la dernière version. En cas de réussite, il exécute l'​application qui affiche une simple page d'​explication sur la sortie standard et s'​arrête.
  
 ===== Utilisation ===== ===== Utilisation =====
Ligne 54: Ligne 129:
 ==== Manipulation d’images ==== ==== Manipulation d’images ====
  
-Prendre une Debian sur le dépôt officiel de Docker et se connecter dessus+Prendre une Debian sur le dépôt officiel de Docker et se connecter dessus ​:
  
-<​code>​docker pull debian +<​code>​ 
-docker run -i -t debian /​bin/​bash</​code>​+docker pull debian 
 +docker run -i -t debian /bin/bash 
 +</​code>​
  
 Faire tout ce qu’on veut sur la nouvelle image Faire tout ce qu’on veut sur la nouvelle image
  
-<​code>​root@xxxxxx#​ …</​code>​+<​code>​ 
 +root@xxxxxx#​ … 
 +</​code>​
  
 Et sauvegarder les changements Et sauvegarder les changements
  
-<​code>​root@xxxxxx#​ exit +<​code>​ 
-docker commit xxxxxx le_nom_de_l_image</​code>​+root@xxxxxx#​ exit 
 +docker commit xxxxxx le_nom_de_l_image 
 +</​code>​
  
 +Supprimer une image :
 +
 +<​code>​
 +docker image rm id_ou_nom_de_l_image
 +</​code>​
 +ou:
 +
 +<​code>​
 +docker rmi id_ou_nom_de_l_image
 +</​code>​
 ==== Manipulation de conteneurs ==== ==== Manipulation de conteneurs ====
  
-<​code>​JOB1=$(docker run -d conteneur)+<​code>​ 
 +JOB1=$(docker run -d conteneur)
 docker logs $JOB1 docker logs $JOB1
-docker stop $JOB1</​code>​+docker stop $JOB1 
 +</​code>​
  
-Voir les conteneurs ​qui tournent ​:+Voir les conteneurs ​actifs ou les lister tous ou lister id des actifs ​:
  
-<​code>​docker ps +<​code>​ 
-docker ps -a</​code>​+docker ​container ​ps 
 +docker ​container ​ps -a 
 +docker container ps -q 
 +</​code>​
  
-Supprimer un conteneur ​supprimer tous les conteneurs :+Supprimer un conteneur ​ou supprimer tous les conteneurs :
  
-<​code>​docker rm $JOB1 +<​code>​ 
-docker rm id_du_conteneur +docker ​container ​rm $JOB1 
-docker rm `docker ps -a -q`</​code>​+docker ​container ​rm id_du_conteneur 
 +docker ​container ​rm $(docker ​container ​ps -a -q
 +</​code>​
  
-Supprimer une images :+==== Manipulation de volumes ==== 
 +Créer un volume
  
-<​code>​docker ​rmi id_ou_nom_de_l_image</​code>​+<​code>​ 
 +docker ​volume create le_nom_du_volume 
 +</​code>​
  
-==== Import / Export ====+Lister les volumes
  
-Une des grandes forces de Docker ​c'est de pouvoir exporter et importer très facilement les images. ​+<​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>​ 
 + 
 + 
 +==== Import, export ==== 
 + 
 +Une des grandes forces de Docker est de pouvoir exporter et importer très facilement les images.
  
 Exporter un container en tar.gz : Exporter un container en tar.gz :
  
-<​code>​docker export 419eed6ff306 > nginx.tgz</​code>​+<​code>​ 
 +docker export 419eed6ff306 > nginx.tgz 
 +</​code>​
  
 Importer un tar.gz : Importer un tar.gz :
  
-<​code>​cat nginx.tgz | docker import - nginx</​code>​+<​code>​ 
 +docker import - nginx < nginx.tgz 
 +</​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 :
  
-<code>+<file>
 # Apache et PHP dans un container # Apache et PHP dans un container
 # #
Ligne 114: Ligne 237:
  
 FROM     ​debian:​wheezy FROM     ​debian:​wheezy
-MAINTAINER Adminrezo "nico@adminrezo.fr"​+MAINTAINER Adminrezo "admin@adminrezo.fr"​
  
 ENV DEBIAN_FRONTEND noninteractive ENV DEBIAN_FRONTEND noninteractive
Ligne 139: Ligne 262:
  
 CMD source /​etc/​apache2/​envvars && exec /​usr/​sbin/​apache2 -DFOREGROUND CMD source /​etc/​apache2/​envvars && exec /​usr/​sbin/​apache2 -DFOREGROUND
-</code>+</file>
  
   * MAINTAINER : nom et mail de mainteneur du conteneur   * MAINTAINER : nom et mail de mainteneur du conteneur
Ligne 153: Ligne 276:
 Construire un conteneur : Construire un conteneur :
  
-<​code>​docker build -t nom_du_conteneur .</​code>​+<​code>​ 
 +docker build -t nom_du_conteneur . 
 +</​code>​ 
 + 
 +===== Divers ===== 
 +==== 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). 
 + 
 +  * Date de votre système et fuseau : <​code>​ 
 +date 
 +cat /​etc/​timezone</​code>​ 
 +  * Date du conteneur et fuseau : <​code>​ 
 +sudo docker attach CONTENEUR 
 +date 
 +cat /​etc/​timezone </​code>​ ou : <​code>​ 
 +docker exec CONTENEUR bash -c "date ;  cat /​etc/​timezone"​ 
 +</​code>​ 
 +  * Réglage du fuseau depuis le conteneur <​code>​ 
 +sudo docker attach CONTENEUR  
 +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>​ 
 +  * 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 =====
    
-Pour supprimer cette application,​ il suffit de [[:​tutoriel:​comment_supprimer_un_paquet|supprimer son paquet]]. Selon la méthode choisie, la configuration globale de l'​application est conservée ​<​code>​sudo apt-get autoremove docker.io</​code>​ +Pour supprimer cette application,​ il suffit de [[:​tutoriel:​comment_supprimer_un_paquet|supprimer son paquet]]. Selon la méthode choisie, la configuration globale de l'​application est conservée ou supprimée. Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés.
-ou supprimée. ​<​code>​sudo apt-get autoremove --purge docker.io</​code> ​Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés. +
- +
-===== Aller plus loin =====+
  
-  * [[http://​linuxfr.org/​news/​docker-tutoriel-pour-manipuler-les-conteneurs|Tutoriels et articles en français sur Docker]] +===== Voir aussi =====
-  * [[http://​docker.com/​|Documentation officielle]] +
-  * [[http://​www.it-connect.fr/​debuter-avec-docker-et-les-containers-sous-debian-8/​|Docker et les containers sous Debian 8]]+
  
 +  * [[:​docker_lamp]] Mettre en place un serveur web (LAMP) à base de conteneurs docker
 +  * [[tutoriel:​comment_installer_gitlab-ce_avec_docker_pour_son_poste_de_travail|Comment installer Gitlab-ce avec Docker pour son poste de travail]]
 +  * [[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)]]
  
 ---- ----
  
-//​Contributeur principal: ​??//+//​Contributeur principal : [[:​utilisateurs:​chacmool|Chacmool]]//
  
-//​Contributeurs : [[utilisateur:Chacmool|Chacmool]]//+//​Contributeurs : // 
 +  * //[[:utilisateurs:​chamblard|chamblard]]//
  • docker.1454940910.txt.gz
  • Dernière modification: Le 08/02/2016, 15:15
  • par cafecho