Obtenga más información sobre las imágenes y los contenedores de Docker.
De izquierda a derecha, vemos múltiples capas de solo lectura, que se superponen. Excepto la capa inferior, otras capas tendrán punteros a la siguiente capa. Estas capas son detalles de implementación dentro de Docker y se puede acceder a ellas en archivos en la máquina host (la máquina donde se ejecuta Docker). La tecnología del sistema de archivos de unión puede fusionar diferentes capas en un solo sistema de archivos, proporcionando una vista unificada de estas capas y ocultando así la existencia de múltiples capas. Podemos ver la forma de esta perspectiva en el lado derecho del diagrama.
Puede encontrar documentación para estas capas en el sistema de archivos de su host. Estas capas no son visibles dentro del contenedor en ejecución. En mi host los encontré presentes en el directorio /var/lib/docker/image.
La definición de contenedor es casi la misma que la de una imagen, y también es una visión unificada de un montón de capas. La única diferencia es que el nivel superior del contenedor se puede leer y escribir.
Puntos clave: contenedor = imagen + capa de lectura/escritura
Definición de contenedor en ejecución
Contenedor en ejecución se define como la lectura y escritura de un sistema de archivos unificado más un sistema de archivos aislado espacio de procesos y los procesos contenidos en él. La siguiente imagen muestra el contenedor en acción.
Podemos verificar lo que estamos diciendo con el siguiente comando.
find/-name happy . txt
Para integrar datos dispersos, propusimos el concepto de capa de imagen. La siguiente imagen muestra una capa de espejo. En la imagen, podemos encontrar que una capa no solo contiene cambios de archivos, sino que también contiene otra información importante.
Los metadatos son información adicional sobre esta capa, que no solo permite a Docker obtener información en tiempo de ejecución y tiempo de compilación, sino que también incluye información jerárquica sobre la capa principal. Cabe señalar que tanto la capa de solo lectura como la de lectura y escritura contienen metadatos.
/var/lib/docker/image/overlay2: Directorio donde se almacenan los datos de gestión de imágenes.
Los metadatos de un contenedor parecen estar divididos en muchos archivos, pero se pueden encontrar en /var/lib/docker/containers/
Ahora, combinemos los detalles de implementación mencionados anteriormente para comprender Comandos acoplables.
El comando de creación de Docker agrega una capa legible a la imagen especificada para formar un nuevo contenedor. Tenga en cuenta que el contenedor no se está ejecutando.
El comando docker start crea un espacio de aislamiento de procesos para el sistema de archivos del contenedor. Tenga en cuenta que cada contenedor solo puede tener un espacio de aislamiento de procesos.
Al ver este comando, los lectores suelen tener una pregunta: ¿Cuál es la diferencia entre Docker Start y Docker Run?
El comando docker run crea un contenedor a partir de una imagen y luego ejecuta el contenedor. Este comando es muy conveniente y oculta los detalles de ambos comandos.
El comando docker ps enumera todos los contenedores en ejecución. Esto oculta la presencia de contenedores que no están en funcionamiento. Si queremos encontrar estos contenedores necesitamos usar el siguiente comando.
El comando docker PS –a enumera todos los contenedores, ya sea que estén en ejecución o detenidos.
El comando Docker Images enumera todas las imágenes de nivel superior. De hecho, no hay forma de distinguir entre capas reflejadas y de solo lectura, por lo que propusimos una duplicación de nivel superior. Solo la imagen utilizada al crear un contenedor o la imagen directamente desplegable se puede llamar imagen de nivel superior. Hay varias capas de imágenes ocultas debajo de cada imagen de nivel superior.
imágenes acoplables: un comando para enumerar todas las imágenes o todas las capas legibles. Si desea ver todas las capas bajo una identificación de imagen, puede usar el historial de la ventana acoplable para verlas.
El comando docker stop envía una señal SIGTERM al contenedor en ejecución y luego detiene todos los procesos.
El comando docker kill envía una señal SIGKILL hostil a todos los procesos que se ejecutan en el contenedor.
Los comandos Docker stop y docker kill envían señales UNIX a los procesos en ejecución, pero el comando docker pause es diferente. Utiliza la función cgroups para pausar el espacio del proceso en ejecución. Sin embargo, la desventaja de este enfoque es que enviar la señal SIGTSTP no es lo suficientemente simple como para provocar que el proceso suspenda todos los procesos.
El comando docker rm elimina las capas legibles y escribibles que componen el contenedor. Tenga en cuenta que este comando solo se puede ejecutar en contenedores que no están en ejecución.
El comando docker rmi elimina la capa de solo lectura que conforma la imagen. Solo puede usar docker rmi para eliminar la capa superior (o imagen), o puede usar el parámetro -f para forzar la eliminación de la capa intermedia de solo lectura.
El comando docker commit convierte la capa legible del contenedor en una capa de solo lectura, convirtiendo así el contenedor en una imagen inmutable.
El comando de compilación de Docker es muy interesante, ejecutará múltiples comandos repetidamente.
Como se puede ver en la figura anterior, el comando de compilación obtiene la imagen de acuerdo con la instrucción FROM en el archivo Dockerfile y luego repite 1) ejecutar (crear e iniciar), 2) modificar y 3 ) comprometerse. Cada paso del bucle crea una nueva capa, por lo que hay muchas capas nuevas.
El comando Dockereexec ejecuta un nuevo proceso en un contenedor en ejecución.
El comando docker inspect extraerá los metadatos de nivel superior del contenedor o imagen.
El comando docker save crea un archivo de imagen comprimido que se puede utilizar en Docker en otro host. A diferencia del comando de exportación, este comando guarda los metadatos de cada capa. Este comando solo funciona con imágenes.
El comando de exportación de Docker crea un archivo tar, elimina metadatos y capas innecesarias, integra varias capas en una sola capa y guarda solo el contenido visto desde la perspectiva unificada actual (Nota del traductor). El contenedor después de :expoxt es importado a Docker, y solo se puede ver una imagen a través del comando Docker Images -tree (la imagen guardada es diferente y puede ver la imagen histórica de esta imagen).
El comando Docker History genera de forma recursiva la imagen histórica de la imagen especificada.