Docker Image vs Contenedor

Docker Image vs Contenedor

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:

Desde el nodo: 6.9.2
Copiar servidor.js .
Servidor de nodo CMD.js

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:

$ Docker Imágenes
ID de imagen de etiqueta de repositorio Tamaño creado

Y el comando Docker PS para encontrar contenedores:

$ Docker PS
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:

$ Docker Imágenes
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:

$ Docker PS
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:

$ Docker Imágenes
ID de imagen de etiqueta de repositorio Tamaño creado
nodo 6.9.2 faaadb4aaf9b hace 11 meses 655mb

Y

$ Docker PS
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
Imagen creada por tamaño
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