Saltar al contenido

¿Cuál es la diferencia entre una imagen de Docker y un contenedor?

Nuestro equipo de especialistas despúes de días de investigación y de recopilar de datos, obtuvieron los datos necesarios, nuestro deseo es que te sea útil en tu trabajo.

Solución:

Una instancia de una imagen se llama contenedor. Tiene una imagen, que es un conjunto de capas como lo describe. Si inicia esta imagen, tiene un contenedor en ejecución de esta imagen. Puede tener muchos contenedores en ejecución de la misma imagen.

Puedes ver todas tus imágenes con docker images mientras que puede ver sus contenedores en ejecución con docker ps (y puede ver todos los contenedores con docker ps -a).

Entonces, una instancia en ejecución de una imagen es un contenedor.

De mi artículo sobre la automatización de implementaciones de Docker:

Imágenes de Docker frente a contenedores

En Dockerland, hay imagenes y aquí están contenedores. Los dos están estrechamente relacionados, pero son distintos. Para mí, comprender esta dicotomía ha aclarado enormemente a Docker.

¿Qué es una imagen?

Una imagen es un archivo inerte e inmutable que es esencialmente una instantánea de un contenedor. Las imágenes se crean con el comando build y producirán un contenedor cuando se inicien con run. Las imágenes se almacenan en un registro de Docker, como registration.hub.docker.com. Debido a que pueden llegar a ser bastante grandes, las imágenes están diseñadas para estar compuestas por capas de otras imágenes, lo que permite enviar una cantidad mínima de datos al transferir imágenes a través de la red.

Las imágenes locales se pueden enumerar ejecutando docker images:

REPOSITORY                TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu                    13.10               5e019ab7bf6d        2 months ago        180 MB
ubuntu                    14.04               99ec81b80c55        2 months ago        266 MB
ubuntu                    latest              99ec81b80c55        2 months ago        266 MB
ubuntu                    trusty              99ec81b80c55        2 months ago        266 MB
                                  4ab0d9120985        3 months ago        486.5 MB

Algunas cosas a tener en cuenta:

  1. ID DE IMAGEN son los primeros 12 caracteres del true identificador de una imagen. Puede crear muchas etiquetas de una imagen determinada, pero sus ID serán todos iguales (como arriba).
  2. TAMAÑO VIRTUAL es virtual porque está sumando los tamaños de todas las distintas capas subyacentes. Esto significa que la suma de todos los valores en esa columna es probablemente mucho mayor que el espacio en disco utilizado por todas esas imágenes.
  3. El valor de la columna REPOSITORIO proviene del -t bandera de la docker build comando, o desde docker tag-ing una imagen existente. Puede etiquetar imágenes con una nomenclatura que tenga sentido para usted, pero sepa que Docker usará la etiqueta como ubicación de registro en un docker push o docker pull.
  4. La forma completa de una etiqueta es [REGISTRYHOST/][USERNAME/]NAME[:TAG]. Para ubuntu anterior, se infiere que REGISTRYHOST es registry.hub.docker.com. Entonces, si planeas almacenar tu imagen llamada my-application en un registro en docker.example.com, deberías etiquetar esa imagen docker.example.com/my-application.
  5. La columna TAG es solo el [:TAG] parte de completo etiqueta. Ésta es una terminología desafortunada.
  6. El latest La etiqueta no es mágica, es simplemente la etiqueta predeterminada cuando no especifica una etiqueta.
  7. Puede tener imágenes sin etiquetar solo identificables por sus ID de IMAGEN. Estos obtendrán el ETIQUETA y REPOSITORIO. Es fácil olvidarse de ellos.

Hay más información disponible sobre imágenes en la documentación y el glosario de Docker.

¿Qué es un contenedor?

Para usar una metáfora de programación, si una imagen es una clase, entonces un contenedor es una instancia de una clase: un objeto en tiempo de ejecución. Con suerte, los contenedores son la razón por la que está utilizando Docker; son encapsulaciones ligeras y portátiles de un entorno en el que ejecutar aplicaciones.

Ver contenedores en ejecución local con docker ps:

CONTAINER ID        IMAGE                               COMMAND                CREATED             STATUS              PORTS                    NAMES
f2ff1af05450        samalba/docker-registry:latest      /bin/sh -c 'exec doc   4 months ago        Up 12 weeks         0.0.0.0:5000->5000/tcp   docker-registry

Aquí estoy ejecutando una versión acoplada del registro de la ventana acoplable, de modo que tengo un lugar privado para almacenar mis imágenes. Nuevamente, algunas cosas a tener en cuenta:

  1. Al igual que IMAGE ID, CONTAINER ID es el true identificador del contenedor. Tiene la misma forma, pero identifica un tipo de objeto diferente.
  2. docker ps solo salidas corriendo contenedores. Puede ver todos los contenedores (corriendo o detenido) con docker ps -a.
  3. Los NOMBRES se pueden utilizar para identificar un contenedor iniciado a través del --name bandera.

Cómo evitar la acumulación de imágenes y contenedores

Una de mis primeras frustraciones con Docker fue la acumulación aparentemente constante de imágenes sin etiquetar y contenedores detenidos. En un puñado de ocasiones, esta acumulación dio como resultado que los discos duros agotados ralentizaran mi computadora portátil o detuvieran mi proceso de compilación automatizado. ¡Habla de “contenedores por todas partes”!

Podemos eliminar todas las imágenes sin etiquetar combinando docker rmi con lo reciente dangling=true consulta:

docker images -q --filter "dangling=true" | xargs docker rmi

Docker no podrá eliminar las imágenes que están detrás de los contenedores existentes, por lo que es posible que deba eliminar los contenedores detenidos con docker rm primero:

docker rm `docker ps --no-trunc -aq`

Estos son puntos débiles conocidos con Docker y pueden abordarse en versiones futuras. Sin embargo, con una comprensión clara de las imágenes y los contenedores, estas situaciones se pueden evitar con un par de prácticas:

  1. Retire siempre un recipiente inútil y tapado con docker rm [CONTAINER_ID].
  2. Elimine siempre la imagen detrás de un recipiente inútil y detenido con docker rmi [IMAGE_ID].

En palabras sencillas.

Imagenes

El sistema de archivos y la aplicación de configuración (solo lectura) que se utiliza para crear contenedores. Mas detalle.

Contenedores

La principal diferencia entre un contenedor y una imagen es la capa de escritura superior. Los contenedores están ejecutando instancias de imágenes de Docker
con capa superior grabable. Los contenedores ejecutan las aplicaciones reales. Un contenedor incluye una aplicación y todas sus dependencias. Cuando se elimina el contenedor, también se elimina la capa de escritura. La imagen subyacente permanece sin cambios. Mas detalle.


Otros términos importantes a tener en cuenta:


Demonio de Docker

El servicio en segundo plano que se ejecuta en el host que administra la construcción, ejecución y distribución de contenedores Docker.

Cliente de Docker

La herramienta de línea de comandos que permite al usuario interactuar con el demonio de Docker.

Tienda Docker

Store es, entre otras cosas, un registro de imágenes de Docker. Puede pensar en el registro como un directorio de todas las imágenes de Docker disponibles.

Una imagen de esta publicación de blog vale más que mil palabras.

Ingrese la descripción de la imagen aquí

(Para una comprensión más profunda, lea esto).

Resumen:

  • Jalar imagen desde Docker hub o compilado desde un Dockerfile => Da una imagen de Docker (no editable).
  • Ejecute la imagen (docker run image_name:tag_name) => Da una imagen en ejecución, es decir, un contenedor (editable)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *