Docker: ¿Cómo se forman los contenedores intermedios?
dockerfile docker-container (1)
Sí, las imágenes de Docker están en capas. Cuando crea una nueva imagen, Docker hace esto para cada instrucción ( RUN
, COPY
, etc.) en su Dockerfile:
- cree un contenedor temporal a partir de la capa de imagen anterior (o la base de la imagen
FROM
para el primer comando; - ejecute la instrucción Dockerfile en el contenedor temporal "intermedio";
- Guarda el contenedor temporal como una nueva capa de imagen.
La capa final de la imagen se etiqueta con lo que sea que nombre la imagen; esto quedará claro si ejecuta el docker history raghavendar/hands-on:2.0
, verá cada capa y una abreviatura de la instrucción que la creó.
Sus consultas específicas:
1) 532
es un contenedor temporal creado a partir de la ID de imagen b17
, que es su imagen de FROM
, ubuntu:14.04
.
2) ea6
es la capa de imagen creada como salida de la instrucción, es decir, al guardar el contenedor intermedio 532
.
3) si Docker llama a esto el sistema de archivos Union y es la razón principal por la que las imágenes son tan eficientes.
Me gustaría entender los pasos de ejecución involucrados en la creación de imágenes Docker utilizando Dockerfile. Un par de preguntas que he enumerado a continuación. Por favor, ayúdame a entender el proceso de construcción.
Dockerfile contenido
#from base image
FROM ubuntu:14.04
#author name
MAINTAINER RAGHU
#commands to run in the container
RUN echo "hello Raghu"
RUN sleep 10
RUN echo "TASK COMPLETED"
Comando utilizado para construir la imagen: docker build -t raghavendar/hands-on:2.0 .
Sending build context to Docker daemon 20.04 MB
Step 1 : FROM ubuntu:14.04
---> b1719e1db756
Step 2 : MAINTAINER RAGHU
---> Running in 532ed79e6d55
---> ea6184bb8ef5
Removing intermediate container 532ed79e6d55
Step 3 : RUN echo "hello Raghu"
---> Running in da327c9b871a
hello Raghu
---> f02ff92252e2
Removing intermediate container da327c9b871a
Step 4 : RUN sleep 10
---> Running in aa58dea59595
---> fe9e9648e969
Removing intermediate container aa58dea59595
Step 5 : RUN echo "TASK COMPLETED"
---> Running in 612adda45c52
TASK COMPLETED
---> 86c73954ea96
Removing intermediate container 612adda45c52
Successfully built 86c73954ea96
En el paso 2:
Step 2 : MAINTAINER RAGHU
---> Running in 532ed79e6d55
Pregunta 1: indica que se está ejecutando en el contenedor con id - 532ed79e6d55, pero ¿con qué imagen de Docker se forma este contenedor?
---> ea6184bb8ef5
Pregunta 2: ¿Qué es esta identificación? ¿Es una imagen o contenedor?
Removing intermediate container 532ed79e6d55
Pregunta 3: ¿Se forma la imagen final con varias capas guardadas desde contenedores intermedios?