Docker est un outil de virtualisation léger. Il permet de faire s'exécuter des services et des applications sur notre serveur, de façon isolée et sans ajout au système susceptible d'en perturber le fonctionnement.
Dans l'esprit docker: «un processus = un conteneur»: c'est un point à considérer dans le choix Containers LXC vs Containers Docker.
Dans le cadre du projet , on pourra utiliser cette technologie pour virtualiser des applications.
Pour toutes les manipulations à suivre, on se positionne en root
via:
$ sudo -i [sudo] Mot de passe de <moââ> : #
Le prompt en #
vous indique que vous avez des droits d'administrateur.
On ne «réinvente» évidemment pas la roue ici: on s'appuie sur la doc d'installation pour Debian, accessible là.
On se contente ici de lister en séquence les commandes d'installation mise en œuvre:
# apt-get update # apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common # curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - # ##Vérification clé dépôt # apt-key fingerprint 0EBFCD88 pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ inconnue] Docker Release (CE deb) <docker@docker.com> sub rsa4096 2017-02-22 [S] # add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) \ stable" # apt-get update # apt-get install docker-ce docker-ce-cli containerd.io
L'installation de Docker est achevée. Vous pouvez afficher les releases des composants de cette version communautaire avec:
# docker version Client: Docker Engine - Community Version: 19.03.5 API version: 1.40 Go version: go1.12.12 Git commit: 633a0ea838 Built: Wed Nov 13 07:25:38 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.5 API version: 1.40 (minimum version 1.12) Go version: go1.12.12 Git commit: 633a0ea838 Built: Wed Nov 13 07:24:09 2019 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.10 GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339 runc: Version: 1.0.0-rc8+dev GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657 docker-init: Version: 0.18.0 GitCommit: fec3683
Le problème de l'espace nécessaire à Docker est du même ordre que celui évoqué pour les containers LXC: Docker stocke ses données (images et containers, configuration, etc…) dans /var/lib/docker
, c'est à dire à la racine du système, et donc sur la clé USB de taille réduite dans le cas de «» :
# tree /var/lib/docker /var/lib/docker ├── builder │ └── fscache.db ├── buildkit │ ├── cache.db │ ├── content │ │ └── ingest │ ├── executor │ ├── metadata.db │ └── snapshots.db ├── containers ├── image │ └── overlay2 │ ├── distribution │ ├── imagedb │ │ ├── content │ │ │ └── sha256 │ │ └── metadata │ │ └── sha256 │ ├── layerdb │ └── repositories.json ├── network │ └── files │ └── local-kv.db ├── overlay2 │ └── l ├── plugins │ ├── storage │ │ └── blobs │ │ └── tmp │ └── tmp ├── runtimes ├── swarm ├── tmp ├── trust └── volumes └── metadata.db 29 directories, 7 files
On va changer cela; si vous n'êtes pas concernés (assez d'espace sur votre HDD système par exemple), vous pouvez ignorer les propositions ci-dessous.
Définition de l'espace cible pour Docker:
On commence par définir, comme pour LXC encore, un volume logique LVM dédié sur notre disque de virtualisation, et un montage dans fstab
:
# lvcreate -n env-docker -L 10g VGVirtu # mkfs -t ext4 /dev/VGVirtu/env-docker # ## montage # mkdir /mnt/env-docker # mount /dev/VGVirtu/env-docker /mnt/env-docker
Pour la persistance de ce montage, ajoutez la ligne suivante au fichier /etc/fstab
# Ajout par <machin> - ssaa.mm.jj - montage config environnement docker /dev/VGVirtu/env-docker /mnt/env-docker ext4 defaults,nofail,discard 0 0
Configuration Docker:
On va éditer le fichier de définition du service / démon Docker, pour ajouter notre nouveau chemin en paramètre de son lancement:
# systemctl edit --full docker
Localisez la ligne suivante :
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Editez cette ligne pour ajouter l'option –data-root
avec le chemin du nouveau répertoire cible:
ExecStart=/usr/bin/dockerd --data-root="/mnt/env-docker" -H fd:// --containerd=/run/containerd/containerd.sock
Sauvegarder et quitter.
Copie et relance:
# systemctl stop docker
# ps aux | grep -i docker | grep -v grep
# rsync -aqxP /var/lib/docker/ /mnt/env-docker
# systemctl start docker
Petites vérifications:
# docker info | grep 'Docker Root Dir' # tree /mnt/env-docker/
Vous pouvez faire de la place sur la clé:
# rm -r /var/lib/docker