‫Muy bien, en esta conferencia vamos a hablar sobre capas de imágenes.
‫Entonces este es un concepto fundamental de cómo funciona Docker. Utiliza algo llamado el sistema de archivos de unión
‫para presentar una serie de cambios en el sistema de archivos como un sistema de archivos real.
‫Vamos a sumergirnos en la historia e inspeccionar los comandos y ver cómo podemos usarlos
‫para entender de qué está hecha una imagen. Vamos a aprender un poco sobre el concepto de copia
‫sobre escritura de cómo un contenedor se ejecuta como una capa adicional sobre una imagen.
‫¿Qué quiero decir con capas de imágenes?
‫que una imagen no es una gran cantidad de datos que viene y va en una gran parte.
‫En realidad, es completamente transparente para usted cuando usa Docker, pero cuando comienza a indagar en
‫ciertos comandos, como el comando history, el inspeccionar y el commit, comienza a tener la sensación de
‫¿Derecha?
‫Si observas cuándo extrajimos realmente Docker, en determinadas ocasiones podrías ver palabras que indican que hay
‫algo que ya tienes, como que ya hayas guardado parte de la memoria caché, y todo Hace un tiempo, estábamos ¿Derecha? Recordamos que el ID de imagen de Nginx es el
‫se reduce al hecho de que las imágenes se diseñan utilizando el concepto de sistema de archivos de unión de en las imágenes de jugando con las etiquetas con Nginx. mismo y que teníamos etiquetas diferentes para el mismo nombre de imagen.
‫hacer capas sobre los cambios. Así que vamos a hacer un rápido historial de portales en nginx más reciente.
‫Si pudiéramos mirar rápidamente lo que tenemos en Docker. Docker en realidad. ¿Qué estoy mirando aquí?
‫Esta no es una lista de cosas que realmente sucedieron en el contenedor porque se trata de una imagen.
‫Esto es en realidad un historial de las capas de la imagen.
‫Cada imagen comienza desde el principio con una capa en blanco conocida como scratch.
‫Luego, cada conjunto de cambios que ocurre después de eso en el sistema de archivos, en la imagen, es otra capa.
‫Puede tener una capa, puede tener docenas de capas y algunas capas quizás no
‫cambien en términos del tamaño del archivo.
‫Notarán aquí que realmente tenemos un cambio aquí que fue
‫simplemente un cambio de metadatos sobre qué comando realmente vamos a ejecutar. cuando revisemos el archivo Docker.
‫Cubriremos eso un poco
‫Pero, por ahora, puede ver que este agregó una gran cantidad de archivos de 123 MB.
‫Luego hicimos un cambio aquí y un cambio aquí y sé por Dockerfiles que estos son solo
‫información de metadatos de Dockerfile.
‫A medida que avanzas, tenemos algunos cambios de datos más.
‫Verás que esto es bastante diferente en otra imagen.
‫Entonces, si vamos a la historia de la ventana de búsqueda, mysql, tiene un conjunto completamente diferente de capas de imagen.
‫Déjame dibujar esto un poco para ti y tal vez esto ayude.
‫Cuando comenzamos una imagen, cuando estábamos creando una nueva imagen,
‫comenzamos con una capa. Cada capa tiene su propio
‫SHA único que ayuda al sistema a identificar si esa capa es de hecho igual a otra capa.
‫Digamos que al comienzo de uno de los tuyos, podrías tener Ubuntu en la parte inferior.
‫Esa es la primera capa en tu imagen.
‫Luego creas un Dockerfile, que agrega algunos archivos más y esa es otra
‫capa en la parte superior de esa imagen. Tal vez usemos Apt para eso.
‫Luego, en su archivo Docker, hace que cambie la variable de entorno. Eso juntos es tu imagen.
‫¿OKAY?
‫Puede que tengas una imagen diferente que empiece desde debian: jessie y
‫luego en esa
‫imagen también puedes usar Apt para instalar algunas cosas, digamos MySQL. Puede copiar algunos archivos, puede abrir un puerto.
‫Por lo
‫tanto, cada uno de estos cambios que suele hacer en el archivo Docker, pero también puede hacerlo con el comando commit docker que revisaremos en un minuto.
‫Esta es también otra imagen y todos están agrupados.
‫¿Qué sucede si tengo otra imagen que también usa la misma versión de jessie?
‫Bueno, esa imagen puede tener sus propios cambios en la parte superior
‫de la misma capa que tengo en mi caché. Aquí es donde el concepto fundamental de la caché
‫de capas de imágenes nos ahorra un montón de tiempo y espacio. Porque no necesitamos descargar las capas que ya tenemos, y recordamos
‫que utiliza un SHA único para cada capa, por lo que se
‫garantiza que será la capa exacta que necesita. Sabe cómo unirlos entre Docker Hub y nuestro caché local. A medida que hacemos cambios en
‫nuestras imágenes, crean más capas.
‫Si decidimos que queremos que la misma imagen
‫sea la imagen base para más capas, solo se almacenará una copia de cada capa.
‫En este sistema, en realidad, uno de los mayores
‫beneficios es que nunca almacenamos los mismos datos de imágenes más de una vez en nuestro sistema de archivos.
‫También significa que cuando estamos cargando y descargando no necesitamos cargar
‫y descargar las mismas
‫capas que ya tenemos en el otro lado. Si tuvieras tu propia imagen y fue personalizada, y luego agregaste, digamos, un
‫servidor Apache además de otra
‫capa en tu archivo Docker, y luego deberías abrir el puerto 80. el sitio web. A en la imagen y luego en el sitio web B,
‫terminarías con dos imágenes.
‫Luego, al final, realmente le pediste que copiara el código fuente, pero en
‫realidad terminaste teniendo dos archivos Docker diferentes para dos sitios web diferentes, y cada línea en los archivos Docker era la misma excepto por el último bit donde copiabas Lo mostraremos en un minuto. Esto constituye una imagen y esta conforma una imagen, pero los únicos archivos que realmente
‫se almacenan son esta, esta, esta capa y
‫luego esta pequeña capa y luego esta pequeña capa.
‫Por lo tanto, nunca almacenaremos toda la pila de capas de imágenes más de una vez si son realmente las mismas capas.
‫¿Cómo funciona esto con los contenedores?
‫contenedor fuera de ella, todo lo que Docker hace es crear una nueva
‫capa de lectura / escritura para ese contenedor sobre esa imagen Apache.
‫Si tiene su imagen, digamos que tenemos nuestra imagen Apache, y decidimos ejecutar un Cuando estamos examinando el sistema de archivos y estas cosas, todos los contenedores y las
‫imágenes parecen un
‫sistema de archivos normal, pero debajo del controlador de almacenamiento que Docker usa es en realidad
‫capas, como una pila de panqueques, todos estos cambios en uno encima del otro.
‫Entonces, si ejecutara dos contenedores al mismo tiempo fuera de la misma
‫imagen de Apache, el contenedor 1 y el contenedor 2 solo mostrarían, en términos del espacio de archivos, solo serían la diferencia entre lo que sucedió
‫en ese contenedor activo y qué está sucediendo en la imagen base, que es de solo lectura. la capa del contenedor.
‫en el contenedor en ejecución. en la imagen de Apache.
‫Cuando está ejecutando Contenedores y está cambiando los archivos que venían a través de la imagen, digamos que inicié el esto se conoce aquí y almacena una copia de ese archivo en Así que ahora el contenedor es realmente solo el proceso en ejecución y esos archivos que son diferentes de lo que eran
‫contenedor 3, y de hecho entré y cambié un archivo que estaba en esta imagen como copy-on-write. Lo que hace es que el sistema de archivos saque ese archivo de la imagen y lo copie en esta diferenciación. arriba. Si volvemos a nuestra lista de imágenes, volvemos a mirar estos
‫comandos, y miramos hacia abajo y vemos cómo las fechas son diferentes. De hecho, podemos ver cómo se modificó esta imagen en Docker Hub y se actualizó
‫con el tiempo, que estos cambios no se han modificado
‫en la capa inferior en cuatro semanas y que los últimos cambios se han producido en las
‫últimas dos semanas.
‫Ah, por cierto, no te preocupes por la parte faltante.
‫Eso es realmente un nombre inapropiado dentro de la interfaz de Docker.
‫No significa que algo anda mal o está mal configurado. Lo que significa es que
‫realmente, esta imagen mysql aquí es esta ID de imagen. Son solo capas dentro de esta imagen, por lo que
‫Las otras capas en la imagen no son en realidad imágenes en sí mismas. no necesariamente obtendrían su propia identificación de imagen allí.
‫Personalmente, creo que es un poco engañoso en la interfaz decir eso, pero así es como lo escribieron.
‫Entonces, ahora que tenemos una idea del comando history para
‫mostrarnos de qué se puede formar una imagen, usemos el comando inspeccionar.
‫Lo que esto hace es que esto nos da todos los detalles sobre la imagen.
‫Esto es básicamente los metadatos. sobre esa imagen?
‫¿Recuerdas cuando hablamos de que una imagen se compone de dos
‫partes, los binarios y sus dependencias, y luego los metadatos Bueno, inspeccionar te devuelve los metadatos.
‫Además de solo la información básica, como la identificación de la imagen y sus
‫etiquetas, se obtiene todo tipo de detalles sobre cómo se ejecutará esta imagen.
‫En realidad, tiene la opción de exponer estos dos puertos dentro de la imagen para que sepa cuándo desea iniciarla, qué puertos
‫debe abrir dentro de su host Docker si desea que acepte conexiones.
‫De hecho, puede ver que se pasaron las variables de entorno,
‫incluida la versión de Nginx que se está ejecutando y la ruta. inicie la imagen de manera predeterminada.
‫En realidad, puede ver el comando que ejecutará cuando
‫De nuevo, muchas de estas cosas en realidad se pueden cambiar como lo
‫hicimos anteriormente con el comando de ejecución del contenedor docker.
‫Pero estos nos muestran todos los valores predeterminados y alguna otra información interesante
‫como el autor, y aquí abajo, que es una arquitectura de AMD64, que es más
‫o menos lo que todas las PC y Mac normales ejecutan hoy en día.
‫Realmente no tenemos demasiadas máquinas de 32 bits, por lo que esta es solo una arquitectura Intel estándar de 64 bits y está diseñada para
‫ejecutarse en el sistema operativo Linux.
‫Ok, una revisión rápida.
‫Así que hemos aprendido mucho sobre las imágenes y cómo están hechas,
‫y descubrimos que en realidad no son tan complejas. En realidad, son solo una serie de cambios en el sistema de archivos y metadatos sobre esos cambios.
‫Aprendió que cada capa tiene su propia identidad única como SHA.
‫Solo se almacenan una vez
‫en cada sistema, por lo que en cada daemon de Docker, cada capa solo se representa una vez en el sistema de archivos.
‫Eso nos da
‫una gran cantidad de ahorros en espacio, así como también tiempo de transferencia al enviar y recibir imágenes entre registros, como Docker Hub. sola capa de cambios sobre una imagen existente.
‫Y, realmente, cuando comienzas un contenedor, es solo una
‫Por lo general, en general es muy pequeño. Aprendimos sobre la historia e inspeccionamos
‫los comandos y cómo pueden enseñarnos qué está sucediendo dentro de una imagen y cómo se hizo.
‫