PRÁCTICA NFS DOCKER-COMPOSE SOLUCIÓN¶
Creación contenedor a través del docker-compose:¶
- A partir del Docker compose dado se genera el contenedor.
version: "2.1"
services:
# https://hub.docker.com/r/itsthenetwork/nfs-server-alpine
nfs:
image: itsthenetwork/nfs-server-alpine:12
container_name: nfs
restart: unless-stopped
privileged: true
environment:
- SHARED_DIRECTORY=/data
volumes:
- /data/nfs-storage:/data
ports:
- 2049:2049
- se utilizan los siguientes comandos:
apt-get install docker-compose
nano docker-compose.yml
- El siguiente paso es la comprobación que se ha creado correctamente el
.yml
y ejecutar el comando dedocker-compose
para que realice todas las instrucciones que indica el.yml
.
docker-compose up -d
- Por último se comprueba que el contenedor está en ejecución, que podemos entrar por CLI a él y comprobar la carpeta compartida de
/etc/exports
.
Montaje carpeta compartida en cliente¶
- En el cliente primero se instala el NFS client.
sudo apt install nfs-client -y
- Se monta la carpeta y se comprueba que está montada, además se comprueba que se pueden crear archivos en la carpeta compartida.
mount -v -o vers=4,loud 192.168.2.4:/ /mnt
df -h
cd /mnt
touch file1.txt
Nota
La IP corresponde a la IP del servidor.
- La razón por la que se puede montar la carpeta desde el raíz del NFS server a cualquier carpeta es debida a uno de los parámetros de la configuración en el
/etc/exports
en concreto es elfsid
según se explica en las notas de la imagen de NFS
Cita
- Due to the fsid=0 parameter set in the /etc/exports file, there's no need to specify the folder name when mounting from a client. For example, this works fine even though the folder being mounted and shared is /nfsshare:
sudo mount -v 10.11.12.101:/ /some/where/here
- To be a little more explicit:
sudo mount -v -o vers=4,loud 10.11.12.101:/ /some/where/here
Nota
- Según La página de man para las exportaciones dice sobre el parámetro
fsid
: - NFS debe ser capaz de identificar cada sistema de archivos que exporta, como no todos los sistemas de archivos se almacenan en los dispositivos,a veces es necesario decirle explícitamente a NFS cómo identificar un sistema de archivos. Esto se hace con la opción
fsid=
. - Para
NFSv4
, hay una forma de distinguir los sistemas de archivos mediante la raíz de todos los sistemas de archivos exportados. Esto se especifica confsid=root
ofsid=0
, los cuales significan exactamente lo mismo.
- Para montar la carpeta de forma automática se debe editar el
/etc/fstab
con el siguiente comando
192.168.2.4:/ /mnt nfs4 _netdev,auto 0 0
- Comprobación tras el reinicio la carpeta compartida se debe montar automáticamente. Se puede comprobar con
df -h
.
Comprobación del volumen¶
- Se puede comprobar que los archivos han sido creado en el contenedor, entrando por CLI bash con el siguiente comando y comprobando la carpeta compartida
/data
docker exec -it CONTAINER bash
- Si se para el contenedor, se destruye y se vuelve a crear otro con el compose, ¿habrán desaparecido los archivos?
docker stop CONTAINER
docker system prune -a
docker-compose up -d
- Se comprueba que los ficheros si que existen, por lo tanto el contenedor es persistente.
Consejo
La única pega es que si se realiza una comprobación de los volúmenes no existe ninguno, la imagen crea un volumen temporal, se aconseja añadir una línea al compose para generar un volumen con un nombre determinado para una mejor gestión.
- Siguiendo las indicaciones de escritura de los docker compose en la versión 2 ENLACE, el nuevo
.yml
quedaría de la siguiente forma:
version: "2.1"
services:
# https://hub.docker.com/r/itsthenetwork/nfs-server-alpine
nfs:
image: itsthenetwork/nfs-server-alpine:12
container_name: nfs
restart: unless-stopped
privileged: true
environment:
- SHARED_DIRECTORY=/data
volumes:
- "/data/nfs-storage:/data"
ports:
- 2049:2049
volumes:
NFS: {}
- Si se ejecuta este nuevo .yml se comprueba que se crea el volumen.