Comparto este artículo que me ayudó a entender volumes en docker. Pareciera difícil de recordar como configurar los espacios compartidos entre el host y el container pero este artículo te mostrará lo fácil que es.
Me era difícil recordar qué significaba cada valor luego de VOLUME en Docker hasta que entendí que la expresión VOLUME se utiliza en diferentes contextos y significa distintas cosa.
Podemos ver a los espacios declarados como VOLUME como un estilo filesystem que podamos tener disponible o utilizar más allá de la vida del container. Es decir ponemos a correr un container, ese container usa VOLUMES y esos volumes los podemos acceder desde el host o desde otro container áun cuando no haya corriendo ningún container que estemos utilizando.
Usar una carpeta de host como VOLUME en Docker
¿Para qué nos serviría? Por ejemplo si en un container tenemos la base de datos podríamos definir un VOLUME donde los datos sean guardados. Podríamos hacer que ese VOLUME sea un folder en nuestro host y hacer backups o copiar el volume. Los datos guardados en ese VOLUME no estarían disponibles en la imagen. Pero esa carpeta en nuestro host podría estar siendo usada por otros containers o por el propio host.
Crear un VOLUME desde docker
Hay otra alternativa que es declarar el VOLUME desde docker con la instrucción «docker volume create «. En ese caso Docker se encgargaría de crear ese espacio, pero lo haría en un lugar o en las carpetas que docker maneja. Este VOLUME también seguiría disponible independientemente de los containers que lo usan. Y podemos efectuar operaciones sobre ese VOLUME como hacer un inspect o borrarlo. Pero lo más importante es que si creamos el VOLUME con un nombre podemos usarlo en diferentes containers haciendo referencia a ese nombre.
Significado de VOLUME de Docker en diferentes contextos
La confusión a veces surge porque la palabra VOLUME se utiliza en diferentes contextos
VOLUME en Dockerfile
Cuando utilizamos VOLUME en Dockerfile representa «la lista de entry points en base a los cuales podemos declarar volumes». Es decir, cuando vemos la palabra VOLUME en un Docker file, viene seguida de una lista , ya sea JSON o separada por espacios. Esa lista se refiere a los espacios internos que el container tiene disponibles para que al momento de correrlos los podamos asociar a espacios externos, ya sean carpetas específicas accesibles por nuestro host, o «VOLUMES» previamente declarados mediante docker
VOLUME en el comando docker run -v
Recién cuando ejecutamos «docker run» es que se asocia el volume a la carpeta del host, Entonces los dos valores que se pasan luego del comando run -v son el source y el target del VOLUME. El source sería la carpeta de nuestro host y el target es el endpoint declarado en el Dockerfile correspondiente.
VOLUMES en docker-compose
Nuevamente aparece la palabra volume en docker-compose , pero en este caso el significado está asociado al mismo significado que tiene en docker run -v y no al significado del Dockerfile
Conclusión
Espero que esta breve aclaración te allane el camino para conocer algo más del mundo de los containers. La reflexión que hago, al igual que cuando me divierto con «Big Bang Theory» serie, es que muchas veces nos reimos de las ambiguedades del lenguaje coloquial. Hay muchos chistes y bromas que tienen que ver con usar dos palabras que son iguales pero tienen distinto significado. Y nos parece muy pobre la definición de ese lenguaje tan humano que permite esas ambiguedades.
No obstante, vemos que, aún en entornos técnicos, y estando conscientes de la necesidad de armar lenguajes formales, cometemos los mismos errores, o al menos no semos lo suficientemente cuidadosos para que todo tenga un único significado y sea fácil de entender para todos.
En muchos casos llego a la conclusión de que muchas veces el lenguaje puede llegar a ser un medio de exclusión para alimentar el ego de los que lo crearon, y mirar con superioridad a los que no entienden las ambiguedades.
Un ejemplo, en una entrevista de empleo puede ser preguntar :
- 1, 2 ¿Cuál es el número que sigue?
- Respuesta: 3
- No…. es 4… porque siempre el número siguiente es el doble del anterior.
Nos podemos sentir más smart que el que contestó 3 pero a veces no nos percatamos de que lo que lo llevó a «confundirse» fue que nuestro planteo fue ambiguo o estuvo mal planteado.