Para poder almacenar los datos de nuestro container en repositorios externos, podremos utilizar diferentes metodos y tipos de volumen, vamos a ver un resumen de las posibilidades que tenemos.
Manage data in Docker | Docker Documentation
Montar NFS container
Para arrancar una máquina montando un volumen de NFS, usaremos el comando mount con las configuraciones necesarias.
- type, introducimos “volume” (volumes,Bind o tmpfs)
- source, nombre para el volumen
- target, ruta montaje en el container
- volume-driver, local
- volume-opt
- type, nfs (cifs)
- device, path nfs
- addr, IP o FQDN del host nfs
- rw, lectura/escritura
- nfsvers, version de nfs
docker run -t -i --rm --mount 'type=volume,source=NFS-Demo,target=/app,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/volume1/Dockers/Demo,"volume-opt=o=addr=192.168.60.10,rw,nfsvers=4"' ubuntu bash

CREATE
Para dejar creado un volumen y disponer de el usaremos el comando create.
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=192.168.60.10,rw \
--opt device=:/volume1/Dockers/Demo \
NFS-Demo

Para montar el volumen en el container.
docker run -ti --rm -v NFS-Demo:/app ubuntu bash
LS
Para listar nuestro volumenes.
docker volume ls
INSPECT
Para ver la configuración del volumen usarmos la opción inspect.
docker volume inspect NFS-NAS
[
{
"CreatedAt": "2022-02-25T10:13:10Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/NFS-NAS/_data",
"Name": "NFS-NAS",
"Options": {
"device": ":/volume1/Dockers",
"o": "nfsvers=4,addr=192.168.60.10,rw",
"type": "nfs"
},
"Scope": "local"
}
]
RM
Para eliminar el volumen
docker volume rm NFS-NAS
Configurar Compose YAML
services:
<Nombre Stack>:
container_name: <Nombre-Container>
image: <Imagen>
ports:
- "80:80/tcp"
- <Mas puertos>
volumes:
- 'NFS-NAS:/nfs'
volumes:
NFS-NAS:
driver: local
driver_opts:
type: nfs
o: nfsvers=4,addr=IP o FQDN,rw
device: ":/volumen/folder"
En el siguiente ejemplo configuro el volumen de dos maneras distintas.
services:
pihole:
container_name: pihole-vol
image: pihole/pihole:latest
ports:
- "8080:80/tcp"
environment:
TZ: 'Europe/Madrid'
WEBPASSWORD: 'MordorWorld'
# Volumes store your data between container upgrades
volumes:
- type: volume
source: NFS-NAS-etcpi
target: /etc/pihole/
volume:
nocopy: true
- 'NFS-NAS-etcdns:/etc/dnsmasq.d/'
cap_add:
- NET_ADMIN
restart: unless-stopped
volumes:
NFS-NAS-etcpi:
driver: local
driver_opts:
type: nfs
o: nfsvers=4,addr=192.168.60.10,rw
device: ":/volume1/Dockers/Pi-Hole/etcpi"
NFS-NAS-etcdns:
driver: local
driver_opts:
type: nfs
o: nfsvers=4,addr=192.168.60.10,rw
device: ":/volume1/Dockers/Pi-Hole/etcdns"
Montaje con CIFS
Os dejo también como montar una unidad Cifs. Use volumes | Docker Documentation
docker volume create \
--driver local \
--opt type=cifs \
--opt device=//192.168.60.10/Logs \
--opt o=addr=192.168.60.10,username=admin,password=******,file_mode=0777,dir_mode=0777 \
--name cif-volume
Tambien existen plugins para conectar a otros storage AWS, Azure,… Use Docker Engine plugins | Docker Documentation
Mordor Blog – Parte 1 – Instalar Dockers en Raspberry-Pi
Mordor Blog – Parte 2 – Instalar Docker Compose
Mordor Blog – Parte 3 – Desplegar Pi-Hole con DoH y Docker Compose