Docker
Volúmenes de datos y contenedores de datos
Buscar..
Contenedores de solo datos
¡Los contenedores de solo datos están obsoletos y ahora se consideran un anti-patrón!
En los días de antaño, antes del subcomando de volume
de Docker, y antes de que fuera posible crear volúmenes con nombre, Docker eliminaba los volúmenes cuando no había más referencias a ellos en ningún contenedor. Los contenedores de solo datos están obsoletos porque Docker ahora ofrece la capacidad de crear volúmenes con nombre, así como muchas más utilidades a través de varios subcomandos de docker volume
ventana docker volume
. Los contenedores de solo datos ahora se consideran un anti-patrón por esta razón.
Muchos recursos en la web de los últimos años mencionan el uso de un patrón llamado "contenedor de datos solamente", que es simplemente un contenedor de Docker que existe solo para mantener una referencia a un volumen de datos.
Recuerde que en este contexto, un "volumen de datos" es un volumen de Docker que no se monta desde el host. Para aclarar, un "volumen de datos" es un volumen que se crea con la directiva VOLUME
Dockerfile, o usando el interruptor -v
en la línea de comandos en un comando de docker run
, específicamente con el formato -v /path/on/container
. Por lo tanto, un "contenedor de solo datos" es un contenedor cuyo único propósito es tener un volumen de datos adjunto, que es usado por el --volumes-from
en un comando de docker run
de la --volumes-from
docker run
. Por ejemplo:
docker run -d --name "mysql-data" -v "/var/lib/mysql" alpine /bin/true
Cuando se ejecuta el comando anterior, se crea un "contenedor de solo datos". Es simplemente un contenedor vacío que tiene un volumen de datos adjunto. Entonces fue posible usar este volumen en otro contenedor así:
docker run -d --name="mysql" --volumes-from="mysql-data" mysql
El contenedor mysql
ahora tiene el mismo volumen que también está en mysql-data
.
Dado que Docker ahora proporciona el subcomando de volume
y los volúmenes con nombre, este patrón ahora está obsoleto y no se recomienda.
Para comenzar con el subcomando de volume
y los volúmenes con nombre, consulte Creación de un volumen con nombre
Creando un volumen de datos
docker run -d --name "mysql-1" -v "/var/lib/mysql" mysql
Este comando crea un nuevo contenedor desde la imagen mysql
. También crea un nuevo volumen de datos, que luego se monta en el contenedor en /var/lib/mysql
. Este volumen ayuda a cualquier dato dentro de él a persistir más allá de la vida útil del contenedor. Es decir, cuando se elimina un contenedor, también se eliminan los cambios del sistema de archivos. Si una base de datos almacenaba datos en el contenedor y el contenedor se elimina, todos esos datos también se eliminan. Los volúmenes persistirán en una ubicación particular incluso más allá cuando se retire su contenedor.
Es posible usar el mismo volumen en varios contenedores con la --volumes-from
línea de comandos --volumes-from
:
docker run -d --name="mysql-2" --volumes-from="mysql-1" mysql
El contenedor mysql-2
ahora tiene adjunto el volumen de datos de mysql-1
, también utilizando la ruta /var/lib/mysql
.