MaDoVi - Le wiki

Machines - Données - Virtualisation

Outils pour utilisateurs

Outils du site


services:virtu:tuto:docker_tuto1

Table des matières

Virtualisation - Containers Docker

En cours... 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.

1. Installation

On ne «réinvente» évidemment pas la roue ici: on s'appuie sur la doc d'installation pour Debian, accessible .

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

2. Stockage

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:

  • La copie des données doit se faire avec Docker arrêté:
# systemctl stop docker
  • Il faut s'assurer que plus rien ne tourne, c'est important! Aucun retour de la commande suivante:
# ps aux | grep -i docker | grep -v grep
  • Copier les données dans la cible (synchroniser les répertoires plus exactement):
# rsync -aqxP /var/lib/docker/ /mnt/env-docker
  • Relancer
# 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

3. ...

services/virtu/tuto/docker_tuto1.txt · Dernière modification: 02/02/2020 23:45 de Cram28