Saltar a contenido

PRÁCTICA NFS DOCKER-COMPOSE SOLUCIÓN

Creación contenedor a través del docker-compose:

  1. 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
  1. se utilizan los siguientes comandos:
apt-get install docker-compose
nano docker-compose.yml
Figura 1: Instalación de Docker Compose y creación del archivo yml
  1. El siguiente paso es la comprobación que se ha creado correctamente el .yml y ejecutar el comando de docker-compose para que realice todas las instrucciones que indica el .yml.
docker-compose up -d
Figura 2: Ejecutar el Docker Compose
  • 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.
Figura 3: Comprobación del contenedor NFS con la carpeta compartida.

Montaje carpeta compartida en cliente

  1. En el cliente primero se instala el NFS client.
sudo apt install nfs-client -y
Figura 4: Instalación NFS client.
  1. 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.

Figura 5: Montaje de carpeta y creación de archivos.
  • 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 el fsid 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 con fsid=root o fsid=0, los cuales significan exactamente lo mismo.
  1. 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
Figura 6: Montaje de automático de carpeta compartida.
  1. Comprobación tras el reinicio la carpeta compartida se debe montar automáticamente. Se puede comprobar con df -h.
Figura 7: Comprobación montaje de automático de carpeta compartida.

Comprobación del volumen

  1. 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
Figura 8: Comprobación ficheros en carpeta compartida del contenedor.
  1. 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
Figura 9: Creación de un nuevo contenedor y comprobación de ficheros.
  1. 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.
Figura 10: ejecutado nuevo yml se comprueba creación volumen.