# Controlador de almacenamiento VFS


El controlador de almacenamiento VFS no es un sistema de archivos de unión. Cada capa es un directorio en el disco y no hay soporte para copy-on-write. Para crear una nueva capa, se realiza una "copia profunda" (deep copy) de la capa anterior. Esto conlleva un menor rendimiento y un mayor uso de espacio en disco en comparación con otros controladores de almacenamiento. Sin embargo, es robusto, estable y funciona en todos los entornos. También se puede utilizar como un mecanismo de referencia para verificar otros backends de almacenamiento en un entorno de pruebas.

## Configurar Docker con el controlador de almacenamiento `vfs`

1. Detén Docker.

   ```console
   $ sudo systemctl stop docker
   ```

2.  Edita `/etc/docker/daemon.json`. Si aún no existe, créalo. Suponiendo que el archivo estuviera vacío, añade el siguiente contenido.

    ```json
    {
      "storage-driver": "vfs"
    }
    ```

    Si deseas establecer una cuota para controlar el tamaño máximo que puede utilizar el controlador de almacenamiento VFS, establece la opción `size` en la clave `storage-opts`.

    ```json
    {
      "storage-driver": "vfs",
      "storage-opts": ["size=256M"]
    }
    ```

    Docker no se iniciará si el archivo `daemon.json` contiene un JSON no válido.

3.  Inicia Docker.

    ```console
    $ sudo systemctl start docker
    ```

4.  Verifica que el demonio esté utilizando el controlador de almacenamiento `vfs`.
    Usa el comando `docker info` y busca `Storage Driver`.

    ```console
    $ docker info

    Storage Driver: vfs
    ...
    ```

Docker ahora está utilizando el controlador de almacenamiento `vfs`. Docker ha creado automáticamente el directorio `/var/lib/docker/vfs/`, que contiene todas las capas utilizadas por los contenedores en ejecución.

## Cómo funciona el controlador de almacenamiento `vfs`

Cada capa de imagen y la capa de escritura del contenedor se representan en el host de Docker como subdirectorios dentro de `/var/lib/docker/`. El montaje de unión proporciona la vista unificada de todas las capas. Los nombres de los directorios no se corresponden directamente con los IDs de las propias capas.

VFS no admite copy-on-write (COW). Cada vez que se crea una nueva capa, se realiza una copia profunda de su capa padre. Todas estas capas se encuentran bajo `/var/lib/docker/vfs/dir/`.

### Ejemplo: Estructuras en disco de imágenes y contenedores

El siguiente comando `docker pull` muestra un host Docker descargando una imagen de Docker que consta de cinco capas.

```console
$ 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
```

Después de descargar la imagen, cada una de estas capas se representa como un subdirectorio de `/var/lib/docker/vfs/dir/`. Los nombres de los directorios no se correlacionan con los IDs de las capas de imagen que se muestran en el comando `docker pull`. Para ver el espacio en disco que ocupa cada capa, puedes usar el comando `du -sh`, el cual proporciona el tamaño como un valor legible por humanos.

```console
$ 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
```

```console
$ 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
```

La salida anterior muestra que tres capas ocupan 104 MB cada una y dos ocupan 125 MB. Estos directorios tienen únicamente pequeñas diferencias entre sí, pero todos consumen la misma cantidad de espacio en disco. Esta es una de las desventajas de utilizar el controlador de almacenamiento `vfs`.

## Información relacionada

- [Entender las imágenes, contenedores y controladores de almacenamiento](/engine/storage/drivers/vfs-driver/)
- [Seleccionar un controlador de almacenamiento](/engine/storage/drivers/vfs-driver/select-storage-driver/)

