Docker est un logiciel libre (sous 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.
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 un dépôt d'images à partir duquel vous pouvez télécharger et partager des applications sans avoir à réinventer la roue.
wsl.exe --set-version ubuntu 2
)
Docker fait partie des dépôts officiels à partir d’Ubuntu 14.04 LTS. Il suffit donc d'installer le paquet docker.io.
Il peut-être utile d'installer également docker-compose pour travailler avec plusieurs conteneurs, comme illustré dans la page docker_lamp :
apt install docker-compose
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)
Les anciennes versions de Docker é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 : dpkg -l |grep -E "^ii.+docker" # 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és. Si vous n'avez pas besoin de sauvegarder vos données existantes et que vous souhaitez commencer par une installation propre, reportez-vous à uninstall Docker Engine(en).
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 :
sudo apt update
Installer les paquets permettant à APT d'utiliser un serveur HTTPS de dépôt :
sudo apt install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
Puis ajouter la clé GPG du site de Docker :
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
Pointer vers le dépôt de la version "stable" de Docker CE :
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
Mettre à jour l'index APT :
sudo apt update
Installer la dernière version de Docker Engine et containerd :
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
Le script est à télécharger depuis le site officiel de Docker.
- Télécharger le script et executer le script
wget https://get.docker.com/ -O script.sh chmod +x script.sh ./script.sh
(testé avec succès sur Ubuntu 16.04 64Bits)
deb http://get.docker.io/ubuntu docker main
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 !
Dans un environnement privé, vous pouvez éventuellement ajouter votre utilisateur au groupe docker afin de manipuler les containers sans avoir à utiliser sudo systématiquement :
sudo usermod -aG docker $USER
Une fois Docker installé, vous pouvez lancer le service :
sudo service docker start
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.
Prendre une Debian sur le dépôt officiel de Docker et se connecter dessus :
docker pull debian docker run -i -t debian /bin/bash
Faire tout ce qu’on veut sur la nouvelle image
root@xxxxxx# …
Et sauvegarder les changements
root@xxxxxx# exit docker commit xxxxxx le_nom_de_l_image
Supprimer une image :
docker image rm id_ou_nom_de_l_image
ou:
docker rmi id_ou_nom_de_l_image
JOB1=$(docker run -d conteneur) docker logs $JOB1 docker stop $JOB1
Voir les conteneurs actifs ou les lister tous ou lister id des actifs :
docker container ps docker container ps -a docker container ps -q
Supprimer un conteneur ou supprimer tous les conteneurs :
docker container rm $JOB1 docker container rm id_du_conteneur docker container rm $(docker container ps -a -q)
Créer un volume
docker volume create le_nom_du_volume
Lister les volumes
docker volume ls
Supprimer un ou plusieurs volumes (-f pour forcer la suppression)
docker volume rm le_nom_du_volume1 le_nom_du_volume2
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
docker volume rm $(docker volume ls -qf dangling=true)
Une des grandes forces de Docker est de pouvoir exporter et importer très facilement les images.
Exporter un container en tar.gz :
docker export 419eed6ff306 > nginx.tgz
Importer un tar.gz :
docker import - nginx < nginx.tgz
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 :
# Apache et PHP dans un container # # VERSION 0.0.1 # FROM debian:wheezy MAINTAINER Adminrezo "admin@adminrezo.fr" ENV DEBIAN_FRONTEND noninteractive # Depots, mises a jour et installs RUN (apt-get update && apt-get upgrade -y -q && apt-get dist-upgrade -y -q && apt-get -y -q autoclean && apt-get -y -q autoremove) RUN apt-get install -y -q apache2 libapache2-mod-php5 php5 supervisor RUN rm /var/www/index.html ADD index.php /var/www/index.php # Config de Apache ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 EXPOSE 80 # Demarrage des services RUN mkdir -p /var/log/supervisor ADD apache.conf /etc/supervisor/conf.d/apache.conf CMD source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND
Construire un conteneur :
docker build -t nom_du_conteneur .
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 cat /etc/timezone
sudo docker attach CONTENEUR date cat /etc/timezone
ou :
docker exec CONTENEUR bash -c "date ; cat /etc/timezone"
sudo docker attach CONTENEUR sudo dpkg-reconfigure tzdata
(se détacher du conteneur : CTRL-p CTRL-q)
docker run -e TZ=Europe/Amsterdam debian:jessie date
ENV TZ Europe/Amsterdam
ou encore :
ENV TZ=America/Los_Angeles RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
Pour supprimer cette application, il suffit de 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.
Contributeur principal : Chacmool
Contributeurs :