⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Pilote de stockage VFS

Le pilote de stockage vfs n'est PAS un système de fichiers unionisé. Au lieu de cela, chaque couche est stockée dans son propre répertoire. Cela signifie que lors du provisionnement d'une nouvelle couche, une "copie profonde" de la couche parent est effectuée. Cela nécessite beaucoup plus d'espace disque et de temps que les autres pilotes de stockage. Cependant, il a l'avantage de garantir qu'aucune erreur ENOSPC (no space left on device) ne sera jamais rencontrée comme effet de bord d'autres couches remplissant l'espace disque.

De plus, vfs peut fonctionner sur tout système de fichiers de support sans nécessiter d'installation de pilote supplémentaire. Pour ces raisons, c'est le pilote de stockage recommandé pour tester Docker ou dans les situations où vous devez déployer Docker dans des environnements où il est impossible d'utiliser d'autres pilotes de stockage.

Configurer Docker avec le pilote de stockage VFS

  1. Arrêtez Docker.

    $ sudo systemctl stop docker
    
  2. Copiez le contenu de /var/lib/docker vers un emplacement de sauvegarde.

    $ sudo cp -au /var/lib/docker /var/lib/docker.bk
    
  3. Si vous voulez utiliser un système de fichiers de support séparé, formatez-le et montez-le dans /var/lib/docker. Assurez-vous d'ajouter ce montage à /etc/fstab pour le rendre permanent.

  4. Modifiez /etc/docker/daemon.json. S'il n'existe pas encore, créez-le. En supposant que le fichier était vide, ajoutez le contenu suivant.

    {
      "storage-driver": "vfs"
    }

    Si le fichier était déjà présent, ajoutez la clé "storage-driver" et sa valeur dans l'objet JSON existant.

  5. Démarrez Docker.

    $ sudo systemctl start docker
    
  6. Vérifiez que le démon utilise le pilote de stockage vfs. Utilisez la commande docker info et recherchez Storage Driver.

    $ docker info
    
    Containers: 0
    Images: 0
    Storage Driver: vfs
    <...>
    

Docker est maintenant utilisant le pilote de stockage vfs. Docker a automatiquement créé le répertoire /var/lib/docker/vfs/, qui contient tous les layers utilisés par les conteneurs en cours d'exécution.

Comment le pilote de stockage VFS fonctionne

Chaque image layer et le layer writable container sont représentés sur le Docker host comme sous-répertoires dans /var/lib/docker/. Le montage union fournit la vue unifiée de tous les layers. Les noms de répertoire ne correspondent pas directement aux IDs des layers eux-mêmes.

VFS ne supporte pas la copie sur écriture (COW). Chaque fois qu'une nouvelle couche est créée, c'est une copie profonde de sa couche parent. Ces layers sont tous situés sous /var/lib/docker/vfs/dir/.

Exemple : structures de disque d'image et de conteneur

La commande docker pull suivante montre un Docker host téléchargeant une Docker image composée de cinq layers.

$ docker pull ubuntu

Using default tag: latest
latest: Pulling from library/ubuntu
e0a742c2abfd: Pull complete
486cb8339a27: Pull complete
dc6f0d824617: Pull complete
4f7a5649a30e: Pull complete
672363445ad2: Pull complete
Digest: sha256:84c334414e2bfdcae99509a6add166bbb4fa4041dc3fa6af08046a66fed3005f
Status: Downloaded newer image for ubuntu:latest

After pulling, each of these layers is represented as a subdirectory of /var/lib/docker/vfs/dir/. The directory names do not correlate with the image layer IDs shown in the docker pull command. To see the size taken up on disk by each layer, you can use the du -sh command, which gives the size as a human-readable value.

$ ls -l /var/lib/docker/vfs/dir/

total 0
drwxr-xr-x.  2 root root  19 Aug  2 18:19 3262dfbe53dac3e1ab7dcc8ad5d8c4d586a11d2ac3c4234892e34bff7f6b821e
drwxr-xr-x. 21 root root 224 Aug  2 18:23 6af21814449345f55d88c403e66564faad965d6afa84b294ae6e740c9ded2561
drwxr-xr-x. 21 root root 224 Aug  2 18:23 6d3be4585ba32f9f5cbff0110e8d07aea5f5b9fbb1439677c27e7dfee263171c
drwxr-xr-x. 21 root root 224 Aug  2 18:23 9ecd2d88ca177413ab89f987e1507325285a7418fc76d0dcb4bc021447ba2bab
drwxr-xr-x. 21 root root 224 Aug  2 18:23 a292ac6341a65bf3a5da7b7c251e19de1294bd2ec32828de621d41c7ad31f895
drwxr-xr-x. 21 root root 224 Aug  2 18:23 e92be7a4a4e3ccbb7dd87695bca1a0ea373d4f673f455491b1342b33ed91446b
$ du -sh /var/lib/docker/vfs/dir/*

4.0K	/var/lib/docker/vfs/dir/3262dfbe53dac3e1ab7dcc8ad5d8c4d586a11d2ac3c4234892e34bff7f6b821e
125M	/var/lib/docker/vfs/dir/6af21814449345f55d88c403e66564faad965d6afa84b294ae6e740c9ded2561
104M	/var/lib/docker/vfs/dir/6d3be4585ba32f9f5cbff0110e8d07aea5f5b9fbb1439677c27e7dfee263171c
125M	/var/lib/docker/vfs/dir/9ecd2d88ca177413ab89f987e1507325285a7418fc76d0dcb4bc021447ba2bab
104M	/var/lib/docker/vfs/dir/a292ac6341a65bf3a5da7b7c251e19de1294bd2ec32828de621d41c7ad31f895
104M	/var/lib/docker/vfs/dir/e92be7a4a4e3ccbb7dd87695bca1a0ea373d4f673f455491b1342b33ed91446b

The above output shows that three layers each take 104M and two take 125M. These directories have only small differences from each other, but they all consume the same amount of disk space. This is one of the disadvantages of using the vfs storage driver.