library - dockers container download
En Docker, ¿cuál es la diferencia entre un contenedor y una imagen? (13)
¿Cuál es la diferencia entre un contenedor y una imagen en Docker? En el tutorial Comenzar con Docker se usan ambos términos, pero no entiendo la diferencia.
¿Alguien por favor puede arrojar algo de luz?
Imágenes [como vm]
- Plantilla de solo lectura utilizada para crear contenedores
- Construido por usted u otros usuarios de Docker
- Almacenado en el Docker Hub o su registro local
Contenedores [como una máquina de correr]
- Plataforma de aplicación aislada
- Contiene todo lo necesario para ejecutar tu aplicación.
- Basado en imagenes
Al usar una analogía de programación orientada a objetos, la diferencia entre una imagen Docker y un contenedor Docker es la misma que la diferencia entre una clase y un objeto. Un objeto es la instancia de tiempo de ejecución de una clase. De manera similar, un contenedor es la instancia de tiempo de ejecución de una imagen.
Un objeto se crea solo una vez cuando se crea una instancia. Del mismo modo, un contenedor puede estar en ejecución o detenido. Los contenedores se crean a partir de una imagen, aunque este no siempre sea el caso. El siguiente ejemplo crea una imagen del servidor Apache, ejecuta la imagen, enumera las imágenes y luego enumera los contenedores:
Crea un Dockerfile con los siguientes contenidos:
FROM httpd:2.4
Instalar el servidor Apache
sudo docker build -t my-apache2 .
Corre la imagen
sudo docker run -it --rm --name my-running-app my-apache2
Lista de imágenes de Docker
sudo docker images
Listar los contenedores Docker en ejecución
docker ps
Listar todos los contenedores
docker ps -a
Listar los últimos contenedores creados
docker ps -l
Docker Images: contiene una lista de comandos e instrucciones sobre cómo construir y ejecutar un contenedor. Básicamente, Imágenes contiene todos los datos y metadatos necesarios para activar un contenedor (también llamado plano). No podemos almorzar un contenedor sin especificar Imágenes.
$docker images centos
Listar todas las versiones disponibles de centos.
Docker Container: los contenedores se almuerzan desde las imágenes, por lo que podemos decir que container es la instancia en ejecución de una imagen. Container es una construcción en tiempo de ejecución, a diferencia de Images, que es la construcción en tiempo de construcción.
En Docker, todo comienza con una imagen. Una imagen es cada archivo que constituye el sistema operativo suficiente para hacer lo que necesita hacer. Tradicionalmente, instalarías un sistema operativo completo con todo para cada aplicación que hagas. Con Docker lo empareja hacia abajo para tener un pequeño contenedor con el sistema operativo suficiente para hacer lo que necesita hacer, y puede tener muchos y muchos de estos de manera eficiente en una computadora.
Utilice las docker images
para ver las imágenes instaladas y la docker ps
para ver las imágenes en ejecución. Cuando docker run
, toma la imagen y la convierte en un contenedor vivo con un proceso en ejecución. Tiendo a usar:
ventana acoplable ejecutar -ti
<image>:<tag>
bash
Por último, las imágenes tienen su propio conjunto de ID y los contenedores tienen su propio conjunto de ID, no se superponen.
En palabras fáciles.
Imágenes -
El sistema de archivos y la aplicación de configuración (solo lectura) que se utiliza para crear contenedores. Más detalle .
Contenedores -
Estas son instancias en ejecución de imágenes Docker. Los contenedores ejecutan las aplicaciones reales. Un contenedor incluye una aplicación y todas sus dependencias. Comparte el kernel con otros contenedores y se ejecuta como un proceso aislado en el espacio de usuario en el sistema operativo host. Más detalle .
Otros términos importantes a tener en cuenta:
Demonio Docker -
El servicio en segundo plano que se ejecuta en el host que administra la creación, ejecución y distribución de contenedores Docker.
Cliente Docker -
La herramienta de línea de comandos que permite al usuario interactuar con el demonio Docker.
Docker Store -
Store es, entre otras cosas, un registro de imágenes Docker. Puede considerar el registro como un directorio de todas las imágenes de Docker disponibles.
Una imagen vale mas que mil palabras.
(Para una comprensión más profunda por favor lea this ).
Resumen:
- Extraiga la imagen del concentrador de Docker o compile desde un Dockerfile => Da una imagen de Docker (no editable).
- Ejecutar la imagen (
docker run image_name:tag_name
) => Da una imagen en ejecución, es decir, un contenedor (editable)
La diferencia oficial es que el contenedor es la última capa que se puede escribir, mientras que las capas de abajo solo son legibles y pertenecen a su imagen. La diferencia intuitiva es que la instancia de docker es la instancia virtualizada por su demonio de docker y la ejecución de su imagen, opera dentro de una sección aislada de su kernel (este proceso está oculto para usted). Sin embargo, la imagen es estática, no se ejecuta, es solo un montón de capas (archivos estáticos). Si relacionamos este paradigma con la programación orientada a objetos, la imagen es su definición de clase, mientras que su instancia de docker es el objeto generado de su clase que reside en la memoria.
He escrito un tutorial para reforzar su intuición de conocimiento docker:
http://javagoogleappspot.blogspot.com/2018/07/docker-basics.html
La imagen es la foto hecha desde su teléfono.
El contenedor es el teléfono.
Las imágenes son instantáneas inmutables congeladas de contenedores vivos. Los contenedores están ejecutando (o detenidos) instancias de alguna imagen.
Comience con la imagen base llamada ''ubuntu''. Vamos a ejecutar bash de forma interactiva dentro de la imagen de ubuntu y crear un archivo. Usaremos las -i
y -t
para darnos una shell de bash interactiva.
$ docker run -i -t ubuntu /bin/bash
root@48cff2e9be75:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@48cff2e9be75:/# cat > foo
This is a really important file!!!!
root@48cff2e9be75:/# exit
No espere que el archivo se quede al salir y reiniciar la imagen. Está reiniciando exactamente desde el mismo estado definido en el que comenzó antes, no donde lo dejó.
$ docker run -i -t ubuntu /bin/bash
root@abf181be4379:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@abf181be4379:/# exit
Pero, el contenedor, que ya no se está ejecutando, tiene un estado y se puede guardar (confirmar) en una imagen.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abf181be4379 ubuntu:14.04 /bin/bash 17 seconds ago Exited (0) 12 seconds ago elegant_ardinghelli
48cff2e9be75 ubuntu:14.04 /bin/bash About a minute ago Exited (0) 50 seconds ago determined_pare
...
Vamos a crear una imagen del contenedor ID 48cff2e9be75 donde creamos nuestro archivo:
$ docker commit 48cff2e9be75 ubuntu-foo
d0e4ae9a911d0243e95556e229c8e0873b623eeed4c7816268db090dfdd149c2
Ahora, tenemos una nueva imagen con nuestro archivo realmente importante:
$ docker run ubuntu-foo /bin/cat foo
This is a really important file!!!!
Pruebe el comando docker images
. Debería ver su nueva imagen ubuntu-foo
junto con la imagen estándar de ubuntu
con la que comenzamos.
Los contenedores están basados en imágenes. Se debe pasar una imagen al comando de ejecución de los Dockers.
Ejemplo:
Imagen de BusyBox
http://i.stack.imgur.com/eK9dC.png
Aquí especificamos una imagen llamada busybox
. Docker no tiene esta imagen localmente y la saca de un registro público.
Un registro es un catálogo de imágenes de Docker con el que el cliente de Docker puede comunicarse y descargar imágenes. Una vez que se extrae la imagen, Docker inicia un contenedor y ejecuta el comando echo hello world.
Una imagen es básicamente una plantilla inmutable para crear un contenedor. Es más fácil entender la diferencia entre una imagen y un contenedor considerando lo que sucede con una imagen para convertirla en un contenedor.
El motor Docker toma la imagen y agrega un sistema de archivos de lectura y escritura en la parte superior, luego inicializa varias configuraciones. Estas configuraciones incluyen opciones de red (IP, puerto, etc.), nombre, ID y cualquier límite de recursos (CPU, memoria). Si se le ha pedido al motor Docker que ejecute el contenedor, también se iniciará un proceso en su interior. Se puede detener y reiniciar un contenedor, en cuyo caso conservará todas las configuraciones y cambios del sistema de archivos (pero perderá cualquier cosa en la memoria y todos los procesos se reiniciarán). Por esta razón, un contenedor detenido o salido no es lo mismo que una imagen.
Una imagen es una colección ordenada de cambios en el sistema de archivos raíz y los parámetros de ejecución correspondientes para usar dentro de un tiempo de ejecución de contenedor. Las imágenes son de solo lectura.
Un contenedor es una instanciación activa (o inactiva si se sale) de una imagen.
DockerFile - (Construir) -> DockerImage - (ejecutar) -> DockerContainer
DockerFile es lo que usted o el desarrollador escriben código para hacer algo (por ejemplo, Instalar)
Docker Image es lo que obtienes cuando construyes un archivo docker.
Docker Container se obtiene cuando ejecuta su imagen de Docker
Podemos obtener Docker Image desde el centro de la ventana acoplable tirando y luego ejecutarlo para obtener el contenedor.
Imágenes : El sistema de archivos y metadatos necesarios para ejecutar contenedores. Pueden considerarse como un formato de paquete de aplicación que incluye todas las dependencias para ejecutar la aplicación y la configuración predeterminada para ejecutar esa aplicación. Los metadatos incluyen valores predeterminados para que se ejecute el comando, las variables de entorno, las etiquetas y el comando healthcheck.
Contenedores : Una instancia de una aplicación aislada. Un contenedor necesita la imagen para definir su estado inicial y utiliza el sistema de archivos de solo lectura de la imagen junto con un sistema de archivos de lectura y escritura específico del contenedor. Un contenedor en ejecución es un envoltorio alrededor de un proceso en ejecución, que le da a ese proceso espacios de nombres para cosas como el sistema de archivos, la red y los PID.
Cuando ejecuta un comando de docker run
, proporciona una imagen en la línea de comandos, junto con cualquier configuración, y la ventana acoplable devuelve un contenedor basado en esa definición de imagen y las configuraciones que proporcionó.
Referencias : al motor de la ventana acoplable, una imagen es solo una ID de imagen. Este es un hash inmutable único. Un cambio en una imagen da como resultado la creación de una nueva ID de imagen. Sin embargo, puede tener una o más referencias que apuntan a una identificación de imagen, no a diferencia de los enlaces simbólicos. Y estas referencias se pueden actualizar para que apunten a nuevas ID de imagen. Tenga en cuenta que cuando cree un contenedor, la ventana acoplable resolverá esa referencia en el momento de la creación del contenedor, por lo que no podrá actualizar la imagen de un contenedor en ejecución. En su lugar, crea una nueva imagen y crea un nuevo contenedor basado en esa nueva imagen.
Capas : cavando un poco más profundo, tiene capas de sistema de archivos. Docker ensambla imágenes con un sistema de archivos en capas. Cada capa es un conjunto de cambios de solo lectura para el sistema de archivos, y esa capa está representada por un hash único. Al usar estas capas de solo lectura, varias imágenes pueden extenderse a otra, y solo las diferencias entre esas imágenes deben almacenarse o transmitirse a través de la red. Cuando se ejecuta un contenedor de Docker, recibe una capa del sistema de archivos de lectura-escritura específica del contenedor única para ese contenedor, y todas las capas de imagen se ensamblan con la de un sistema de archivos de unión. Una lectura se procesa a través de cada capa hasta que se encuentra el archivo, se encuentra una eliminación o el archivo no se encuentra en la capa inferior. Una escritura realiza una copia en escritura desde la capa de solo lectura de la imagen a la capa de lectura y escritura específica del contenedor. Y una eliminación se registra como un cambio en la capa de lectura y escritura específica del contenedor. Un paso común en la creación de imágenes es ejecutar un comando en un contenedor temporal basado en el estado del sistema de archivos de la imagen anterior y guardar la capa específica del contenedor resultante como una capa en la nueva imagen.