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:
- 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).
- 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.
- El valor de la columna REPOSITORIO proviene del
-t
bandera de ladocker build
comando, o desdedocker 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 undocker push
odocker pull
. - La forma completa de una etiqueta es
[REGISTRYHOST/][USERNAME/]NAME[:TAG]
. Paraubuntu
anterior, se infiere que REGISTRYHOST esregistry.hub.docker.com
. Entonces, si planeas almacenar tu imagen llamadamy-application
en un registro endocker.example.com
, deberías etiquetar esa imagendocker.example.com/my-application
. - La columna TAG es solo el [:TAG] parte de completo etiqueta. Ésta es una terminología desafortunada.
- El
latest
La etiqueta no es mágica, es simplemente la etiqueta predeterminada cuando no especifica una etiqueta. - 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:
- Al igual que IMAGE ID, CONTAINER ID es el true identificador del contenedor. Tiene la misma forma, pero identifica un tipo de objeto diferente.
docker ps
solo salidas corriendo contenedores. Puede ver todos los contenedores (corriendo o detenido) condocker ps -a
.- 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:
- Retire siempre un recipiente inútil y tapado con
docker rm [CONTAINER_ID]
. - 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.
(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)