Estoy tratando de profundizar en mi comprensión del volumen de Docker y me está costando descubrir las diferencias / caso de uso de:
- El
docker volume create
comando - los
docker run -v /path:/host_path
- La
VOLUME
entrada en elDockerfile
archivo
Particularmente, no entiendo qué sucede si combinas la VOLUME
entrada con la -v
bandera.
Respuestas:
Un volumen es un dato persistente almacenado en
/var/lib/docker/volumes/...
Puede declararlo en un Dockerfile, lo que significa que cada vez que se inicia un contenedor desde la imagen, el volumen se crea ( vacío ), incluso si no tiene ninguna
-v
opción.Puede declararlo en tiempo de ejecución
docker run -v [host-dir:]container-dir
.La combinación de los dos (
VOLUME
+docker run -v
) significa que puede montar el contenido de una carpeta de host en su volumen persistente por el contenedor en/var/lib/docker/volumes/...
docker volume create crea un volumen sin tener que definir un Dockerfile y crear una imagen y ejecutar un contenedor. Se utiliza para permitir rápidamente que otros contenedores monten dicho volumen.
Si había persistido algún contenido en un volumen, pero desde entonces eliminó el contenedor (que por defecto no elimina su volumen asociado, a menos que esté usando docker rm -v), puede volver a adjuntar dicho volumen a un nuevo contenedor (declarando el mismo volumen).
Consulte " Docker: ¿cómo acceder a un volumen no adjunto a un contenedor? ".
Con la creación de volumen de Docker, es fácil volver a adjuntar un volumen con nombre a un contenedor.
fuente
Dockerfile
conVOLUME
y la-v /path:/host_path/
bandera. El contenido deVOLUME
será reemplazado por el contenido de/host_path/
?docker volume create --name my_volume
seguida de adocker run --volume-from my_volume
, ¿cómo sabes dónde estará el punto de montaje?docker run ...
, ¿cómo puedo escribir en un archivo almacenado en elmy_volume
volumen? No conozco el ... camino? del volumen dentro de mi contenedor en ejecución porque no definí nada? Espero ser lo suficientemente claro, porque definitivamente no estoy seguro de mi vocabulario: - /docker volume create --name aname
crea un volumen con nombre : usted asigna una ruta de contenedor en tiempo de ejecucióndocker run -v aname:/apath
:: ese contenedor ahora tiene un volumen adjunto, montado en su carpeta / apath. He reescrito la respuesta para que quede claro.VOLUME
La instrucción se vuelve interesante cuando la combina con elvolumes-from
parámetro de tiempo de ejecución.Dado el siguiente Dockerfile:
Construye una imagen con:
Y gira un recipiente con:
Lo primero que debe notar es que tendrá una carpeta en esta imagen llamada
myvolume
. Pero no es particularmente interesante ya que al salir del contenedor también se eliminará el volumen.Cree un archivo vacío en esta carpeta, así que ejecute lo siguiente en el contenedor:
Ahora encienda un nuevo contenedor, pero comparta el mismo volumen con
my-first-bb
:Verá que
my-second-bb
contiene el archivohello.txt
en lamyvolume
carpeta.Una vez que salga de ambos contenedores, su volumen también se eliminará.
fuente
--rm
opción. Creo que podría funcionar mencionarlo. Si no inició un contenedor con--rm
, aún puede eliminar el contenedor y sus volúmenes anónimos condocker rm -v my-container
.