‫En esta conferencia, vamos a hablar sobre el montaje de enlaces y los datos persistentes en esos montajes. Los requisitos son realmente que usted solo
‫sabe sobre la administración de contenedores y cómo ejecutar contenedores.
‫Vamos a entrar Hablemos de monturas de unión. En realidad son bastante geniales.
‫Cuando supe por primera vez sobre ellos, me dio una idea de cómo podría usar Docker fácilmente para el
‫desarrollo local.
‫Realmente, un montaje de enlace es solo una asignación de los archivos de host, o directorios, en un archivo o
‫directorio contenedor. Puedes hacer exactamente eso.
‫Puede especificar un directorio o un solo archivo. En el fondo, básicamente se
‫trata de que las dos ubicaciones apunten a las mismas ubicaciones físicas en el disco.
‫Nuevamente, esto realmente omite el UFS como lo hacen los otros volúmenes para que no borre su
‫ubicación de host cuando elimine el contenedor.
‫Si hay archivos en el contenedor al que asigna los archivos de host, los archivos de host ganan. En realidad, no elimina los archivos
‫en el contenedor que sobrescribió porque realmente no está sobrescribiendo nada en
‫el contenedor.
‫Está justo allí mientras existe el montaje de unión.
‫En el momento en que ya no necesite el montaje de enlace y vuelva a ejecutar el contenedor
‫sin él, en realidad verá los datos subyacentes que estaban allí antes. Debido a que los montajes de enlace generalmente son específicos
‫del host, necesitan datos específicos para estar en el disco duro del host para poder funcionar.
‫No puede especificarlos en un Dockerfile.
‫Debe usarlos en tiempo de ejecución cuando usa el comando de ejecución del contenedor docker. Puedes ver el formato aquí.
‫Es realmente el -v que usamos antes, solo en el lado izquierdo del colon, en
‫realidad estamos colocando un camino completo en lugar de solo un nombre.
‫Y la forma en que Docker realmente puede notar la diferencia entre el volumen con nombre, como lo
‫hicimos hace un tiempo, y el montaje de enlace, es que el montaje de enlace comienza con una barra diagonal.
‫En Windows, notará que se trata de dos barras diagonales y luego la letra de la unidad, y luego
‫su ruta.
‫Siempre que tenga los dos puntos izquierdos y derechos, realmente puede asignar todo lo que desee
‫del host al contenedor, y también puede especificar cosas como solo lectura.
‫Donde esto realmente brilla es con los servicios de desarrollo y ejecución dentro de su contenedor que están
‫accediendo a los archivos que está utilizando en su host o que está cambiando.
‫Hagamos eso con Nginx.
‫Si va a la raíz de nuestro repositorio para este curso, y luego vamos al directorio Dockerfile
‫sample 2. Ahora estábamos aquí antes.
‫Si recuerdas, hay dos archivos. Esto es para Nginx, ¿verdad?
‫Si miramos el Dockerfile muy rápido, es bastante simple. Simplemente especifica un directorio de trabajo y luego copia un
‫archivo de índice en ese directorio.
‫No hay volúmenes aquí.
‫Un montaje de enlace no requiere un volumen para funcionar, aunque ciertamente uno podría estar allí.
‫El anfitrión siempre gana, ¿recuerdas? Entonces, cuando estamos ejecutando un contenedor Docker, entonces
‫hacemos un -d ... vamos a llamarlo nginx.
‫Vamos a darle el puerto 8080 como antes.
‫Entonces le daremos el volumen esta vez. Y necesito decirle que mi directorio de trabajo actual se
‫montará en ese directorio de trabajo en el contenedor. Debido a que mi archivo de índice está aquí
‫en esta carpeta,
‫quiero que esté en el contenedor para poder editarlo aquí, y se ve en vivo en el contenedor.
‫Entonces tendrá sentido en un segundo.
‫Aquí hay un pequeño consejo rápido. En lugar de tener que
‫descubrir mi camino completo y escribir todo, puedes usar pwd aquí así.
‫Que es un acceso directo de shell que dice: 'imprime el directorio de trabajo y reemplaza este comando con esa ruta.
‫'Entonces solo vamos a usar el mismo directorio de trabajo del Dockerfile allí, y luego vamos a
‫especificar la imagen Nginx.
‫Lo que voy a hacer, muy rápido, es abrir otra ventana de terminal para que podamos hacer dos
‫cosas a la vez.
‫Realmente no necesitas hacer esto.
‫Básicamente, solo vamos a editar el archivo en nuestro host, y luego voy a estar en el contenedor y ver
‫qué está sucediendo.
‫Entonces, solo para asegurarnos de que
‫funciona, vamos a localhost.
‫OK, este no es el archivo HTML predeterminado de Nginx.
‫Y utilizamos la imagen regular de Nginx.
‫En realidad no utilizamos el personalizado de este directorio.
‫Acabamos de utilizar una imagen de stock. Para probar ese punto, podemos hacer el mismo
‫comando exacto de nuevo, pero elimine -v y lo ejecutaré en el puerto 8080. Y llamaré a este nginx2.
‫Si voy a mi navegador y voy al localhost 8080, ese es el índice nginx predeterminado. archivo html
‫Este es el personalizado que tenemos viviendo en este directorio.
‫Entonces, ya podemos ver que lo mapeó correctamente.
‫Si abro otra pestaña aquí y obtengo una línea de comando en el contenedor.
‫Luego ve a ese directorio.
‫Notarás que en realidad podemos ver el Dockerfile porque mapeamos todo el directorio.
‫Si está a la izquierda, si realmente creamos un nuevo archivo y puedo usar ese comando táctil de Linux aquí para
‫crear un nuevo archivo. Luego a la derecha ... Uy ... solo sigue olvidando que ... ls -al, y lo verás
‫en tu archivo.
‫Espero que entiendas lo que está sucediendo aquí, que ambas ubicaciones son la misma ubicación.
‫Y si hice eco de algo en ese archivo testme y
‫luego ...
‫ahí tienes
‫Nuestro nginx puede ver los cambios porque es solo una ruta de archivo normal en el contenedor,
‫y esos archivos están en el host.
‫Si tuviera que eliminarlos en el contenedor, se eliminarían en el host porque es el
‫mismo archivo.
‫Aquí es cuando generalmente hago que un desarrollador piense en todos sus entornos de desarrollo
‫que tienen, que son esta configuración complicada. Tal vez están usando Vagrant, o algún
‫otro método manual para configurar su entorno perfecto, y pueden comenzar a ver cómo esto podría simplificarlo mucho.
‫Como no tenía que hacer ninguna configuración complicada en mi Mac, simplemente ejecuté un contenedor.
‫Utilicé el comando -v con el montaje, y ahora mi código, en mi host, se puede editar en mi host.
‫Y realmente nunca necesito entrar en la carcasa del contenedor.
‫Por lo general, puede ejecutar el contenedor y mirar sus registros para ver si hay algún error mientras
‫está codificando.
‫Por supuesto, este es un ejemplo simple con Nginx. Más adelante, en realidad vamos a tener
‫ejemplos específicos de diferentes entornos de desarrollo para desarrollo local y contenedores.