NextCloud en una aplicación escrita en PHP que nos posibilita construir una nube privada para guardar nuestros archivos, además de tener otros servicios como agenda, calendario, …

Vamos a desplegar un contenedor con NextCloud, para simplificar la instalación vamos hacer uso de una base de datos SQLite. Si estudiamos la documentación de la imagen nextcloud en Docker Hub, la forma más sencilla de no perder la información es crear un volumen para guardar el directorio /var/www/html del contenedor. Vamos a realizar el ejercicio usando volúmenes Docker y bind mount.

Ejemplo con volúmenes

Creamos un volumen:

$ docker volume create nextcloud
nextcloud

Y creamos el contenedor, guardando el directorio /var/www/html del contenedor en el volumen creado, con el parámetro -v:

$ docker run -d -p 80:80  -v nextcloud:/var/www/html --name contenedor_nextcloud nextcloud:28.0.1

Comprobamos que podemos acceder, terminamos de configurar la aplicación y una vez operativa subimos un ficheros a la aplicación.

A continuación eliminamos el contenedor y creamos uno nuevo con el mismo volumen, ahora usando el parámetro --mount::

$ docker rm -f contenedor_nextcloud

$ docker run -d -p 80:80  --mount type=volume,src=nextcloud,dst=/var/www/html --name contenedor_nextcloud nextcloud:28.0.1

Accediendo de nuevo a la aplicación podemos comprobar que la aplicación sigue configurada y que los ficheros subidos no se han perdido.

Ejemplo con bind mount

En este caso, vamos a crear un directorio en nuestro ordenador, que es el que vamos a montar en el contenedor:

mkdir /opt/datos_nextcloud

Y creamos el contenedor usando el parámetro -v:

$ docker run -d -p 80:80 -v /opt/datos_nextcloud:/var/www/html --name contenedor_nextcloud nextcloud:28.0.1

También podríamos usar el parámetro --mount:

$ docker run -d -p 80:80 --mount type=bind,src=/opt/datos_nextcloud,dst=/var/www/html --name contenedor_nextcloud nextcloud:28.0.1

Volvemos a acceder, configuramos la aplicación y subimos algún fichero.

Usando bind mount tenemos acceso al directorio:

$ cd datos_nextcloud/
~/datos_nextcloud$ ls
3rdparty  COPYING  config       core      custom_apps  index.html  lib  ocm-provider  ocs-provider  remote.php  robots.txt  themes
AUTHORS   apps     console.php  cron.php  data         index.php   occ  ocs           public.php    resources   status.php  version.php

Podemos comprobar que al eliminar el contenedor y crearlo de nuevo usando el mismo directorio bind mount, toda la configuración y los ficheros subidos no se han perdido.

Actualizado: