Docker

De InfoXelec
Aller à la navigation Aller à la recherche

Présentation

Docker permet de gérer des conteneurs qui sont plus léger que les machines virtuelles.

Les images Docker permettent de gérer une configuration. Le conteneur Docker est une instance d'une image Docker.
On peut créer des images Docker avec le fichier dockerfile et la commande docker build -t nomimage .
On peut trouver des images Docker sur le DockerHub.

Il est possible de faire des environnements utilisant plusieurs conteneurs. Pour se faire, on va utiliser docker compose liée à un fichier de configuration docker-compose.yml.
Si docker est déjà installé, il faut le supprimer

Installation

sudo apt remove docker docker-engine docker.io containerd runc

Il faut dans un premier temps mettre à jour les dépôts
sudo apt update

Puis il faut installer les pré requis nécessaires
sudo apt install ca-certificates curl gnupg lsb-release

Il faut ensuite installer les certificats avec les commandes suivantes :
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Ensuite on installe le dépôt Docker dans le /etc/apt/sources.list/d pour Debian :
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Dans le cas de Ubuntu, il faut remplacer Debian par Ubuntu. La liste complète des distros dispo se trouve sur https://download.docker.com/linux/

On installe ensuite les paquets nécessaires à Docker proprement dit
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

On crée le groupe qui utilisera le service docker, si ce dernier n'existe pas et l'ajouter à l'utilisateur courant.
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker #pour activer le nouveau changement aux groupes

On active le service docker et containerd
sudo systemctl enable docker.service
sudo systemctl enable containerd.service

Utilisation :

Commandes utiles :

Lister les contextes : docker context list
Changer de context : docker context use nom_context
Lister les images : docker images
Lister les conteneurs qui sont exécutés : docker ps
Lancer un conteneur Debian : docker run debian:latest
Lancer un conteneur en le nommant : docker run --name nom image
Lister les images disponibles en local sur la machine : docker image ls
Lister les volumes : docker volume ls
Exécuter un shell bash dans un container : docker exec -it nom_container bash

Gestion des fichiers (volumes)

Les volumes sont utiles pour persister de la donnée et faire des sauvegardes.
Il existe 3 types de montages.

  • volume : géré par Docker volume. Les données sont stockées dans /var/lib/docker/volumes ;
  • bind : dossier de l'hôte ;
  • tmpfs : Les données ne sont pas persistées.

Pour utiliser le bind mount, on pourra utiliser la commande docker run -d --name c1 --mount type=bind,source=/home/user/dossier/,destination=/var/www/html/ ubuntu/apache2:latest

Sécurisation

Si on lance un conteneur Docker en mode root, les applications auront alors ces même droits sur le système hôte.

FAQ

En cas d'erreur de lancement de Docker via un profil utilisateur

Cannot connect to the Docker daemon at unix:///home/parrot/.docker/desktop/docker.sock. Is the docker daemon running?
Cette erreur viens du fait que le context utilisé n'est pas le bon ou que Docker-Desktop n'est pas lancé.
Car Docker-Desktop crée un context default-linux pour lancer ses conteneurs.
Il faut lancer la commande docker context ls afin de voir les différents contextes.
A ce moment il y a deux solutions :

  • Utiliser le context par défaut en ligne de commande ;
  • Utiliser le context desktop-linux avec Docker-Desktop lancé.

Le changementde context se fait avec la commande docker context use default pour le context par défaut.

En cas d'erreur lors du docker build

En cas de l'erreru [internal] load metadata for lors de la création d'une image Docker, il faut lancer la commande rm ~/.docker/config.json

Bibliographie

Documentation officielle de Docker : https://docs.docker.com/
Vidéeo Youtube de Xavki : https://youtube.com/playlist?list=PLn6POgpklwWq0iz59-px2z-qjDdZKEvWd
Vidéo Youtube de Cocadmin : https://youtube.com/playlist?list=PL8SZiccjllt1jz9DsD4MPYbbiGOR_FYHu
GitHub de Noobosaurus-r3x qui parles de Docker : https://github.com/noobosaurus-r3x/Docker---Commandes-de-la-video/blob/main/Install%20Docker%20(Debian)