Comprender el proceso que utiliza Docker para almacenar datos a través de imágenes y contenedores lo ayudará a diseñar mejor sus aplicaciones Docker. Las imágenes de Docker son como las plantillas, mientras que los contenedores Docker son las instancias de ejecución creadas a partir de esas plantillas. Docker utiliza un enfoque en capas para almacenar imágenes y contenedores.
Imágenes y capas
Se crea una imagen de Docker a partir de múltiples capas. Si tomamos un ejemplo de DockerFile, cada instrucción se convierte en una capa. Aquí hay un simple Dockerfile:
Cada línea en el Dockerfile anterior creará una capa. La declaración de la declaración buscará el nodo: 6.9.2 imagen en el registro local. Si no lo encuentra allí, lo descargará desde Docker Hub. Entonces Docker creará la primera capa. La siguiente declaración de copia agrega el servidor.archivo js a la imagen como una segunda capa. La última capa ejecuta un nodo.aplicación JS. Todas estas capas se apilan una encima de la otra. Cada capa adicional se agrega como una diferencia de la capa antes.
Contenedores y capas
Los contenedores se crean a partir de imágenes. Cuando se crea un contenedor a partir de una imagen, se coloca una capa delgada de lectura/escritura en la parte superior de la imagen (observe que las capas de la imagen son inmutables, las capas del contenedor no lo son). Cualquier cambio realizado en el contenedor se coloca en esta capa de lectura/escritura durante la vida útil del contenedor. Cuando se elimina un contenedor, se elimina la capa de lectura/escritura delgada asociada. Significa que múltiples contenedores pueden compartir la misma imagen. Cada capa de contenedor mantendrá sus propios datos de forma segura sobre la imagen de Docker.
Imágenes y contenedores
Intentemos un ejemplo simple. Puede usar el comando Docker Images para encontrar todas las imágenes:
ID de imagen de etiqueta de repositorio Tamaño creado |
Y el comando Docker PS para encontrar contenedores:
Comando de imagen de ID de contenedor Nombres de puertos de estado creados |
Esta es una nueva instalación de Docker. Entonces no hay imagen ni contenedor presente. Puede ejecutar el nodo Docker Run -it: 6.9.2 Comando para iniciar un contenedor.
$ Docker Run -it Node: 6.9.2 |
No se puede encontrar la imagen 'nodo: 6.9.2 'localmente |
6.9.2: Tirando de la biblioteca/nodo |
75A822CD7888: Tire completo |
57DE64C72267: Tire completo |
4306Be1E8943: Tire completo |
871436AB7225: Tire completo |
0110C26A367A: Tire completo |
1F04FE713F1B: Tire completo |
AC7C0B5FB553: Tire completo |
Digest: Sha256: 2e95be60faf429d6c97d928c762cb36f1940f44456ce4bd33fbdc34de94a5e043 |
Estado: descarga imagen más nueva para nodo: 6.9.2 |
Ahora, si volvemos a verificar las imágenes de Docker, encontramos:
ID de imagen de etiqueta de repositorio Tamaño creado |
nodo 6.9.2 faaadb4aaf9b hace 11 meses 655mb |
Y si revisamos el contenedor, encontramos:
Comando de imagen de ID de contenedor Nombres de puertos de estado creados |
8C48C7E03BC7 NODO: 6.9.2 "nodo" hace 20 segundos hasta 18 segundos reverent_jackson |
Si iniciamos otro contenedor desde la misma imagen usando el comando:
$ Docker Run -it Node: 6.9.2 |
Y verifique de nuevo, vemos:
ID de imagen de etiqueta de repositorio Tamaño creado |
nodo 6.9.2 faaadb4aaf9b hace 11 meses 655mb |
Y
Comando de imagen de ID de contenedor Nombres de puertos de estado creados |
96E6DB955276 Nodo: 6.9.2 "nodo" hace 24 segundos hasta 23 segundos Cocky_Dijkstra |
8C48C7E03BC7 NODO: 6.9.2 "nodo" Hace 4 minutos arriba 4 minutos reverente_jackson |
Los dos contenedores con ID de contenedor 96E6DB955276 y 8C48C7E03BC7 se ejecutan en la parte superior de la imagen Docker con la ID de imagen FAAADB4AAF9B. Las delgadas capas de lectura/escritura de los contenedores Docker residen en la parte superior de la capa de la imagen Docker.
Sugerencias:
Puede eliminar los contenedores Docker con el comando Docker RM [ID de contenedor] y eliminar las imágenes de Docker con el comando Docker RMI [ID de imagen].
El nodo de imagen: 6.9.2 Descargamos de Docker Hub también se crea combinando múltiples capas. Puede verificar las capas de imágenes usando Docker History [ID de imagen].
$ Docker Historia FAAADB4AAF9B |
faaadb4aaf9b hace 11 meses /bin /sh -c #(nop) cmd ["nodo"] 0b |
Hace 11 meses/bin/sh -c curl -slo "https: // nodejs.org/d 42.5MB |
Hace 11 meses /bin /sh -c #(nop) env nodo_version = 6.9.2 0b |
Hace 11 meses /bin /sh -c #(nop) env npm_config_loglevel 0b |
Hace 11 meses /bin /sh -c set -ex && para la clave en 955 108kb |
Hace 11 meses /bin /sh -c groupAdd - -GID 1000 nodo && u 335kb |
Hace 11 meses /bin /sh -c apt-get opdate && apt-get insta 323mb |
Conclusión
Una forma popular de explicar imágenes y contenedores es comparar una imagen con una clase y un contenedor con la instancia de esa clase. El enfoque en capas de las imágenes y los contenedores de Docker ayuda a mantener el tamaño de las imágenes y los contenedores pequeños.
Referencias:
- https: // documentos.estibador.com/motor/userguide/storagedriver/imagesandcontainers/
- Docker Image vs Contenedor
- https: // stackoverflow.com/Preguntas/23735149/Docker-Image-VS-Container