web-dev-qa-db-fra.com

Docker: Comment sont formés les conteneurs intermédiaires

Je voudrais comprendre les étapes d'exécution impliquées dans la création d'images Docker à l'aide de Dockerfile. Quelques questions que j'ai énumérées ci-dessous. Veuillez m'aider à comprendre le processus de construction.

Contenu Dockerfile

#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"

Commande utilisée pour créer l'image: 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

À l'étape 2:

Step 2 : MAINTAINER RAGHU
    ---> Running in 532ed79e6d55 

Question 1: il indique qu'il s'exécute dans le conteneur avec l'ID - 532ed79e6d55, mais avec quelle image Docker ce conteneur est-il formé?

---> ea6184bb8ef5  

Question 2: quel est cet identifiant? Est-ce une image ou un conteneur?

Removing intermediate container 532ed79e6d55

Question 3: l'image finale est-elle formée de plusieurs couches enregistrées à partir de conteneurs intermédiaires?

18
Here_2_learn

Oui, les images Docker sont superposées. Lorsque vous créez une nouvelle image, Docker le fait pour chaque instruction (RUN, COPY etc.) de votre Dockerfile:

  1. créer un conteneur temporaire à partir de la couche d'image précédente (ou de l'image de base FROM pour la première commande;
  2. exécuter l'instruction Dockerfile dans le conteneur "intermédiaire" temporaire;
  3. enregistrez le conteneur temporaire en tant que nouveau calque d'image.

La couche d'image finale est étiquetée avec le nom que vous donnez à l'image - cela sera clair si vous exécutez docker history raghavendar/hands-on:2.0, vous verrez chaque couche et une abréviation de l'instruction qui l'a créée.

Vos requêtes spécifiques:

1) 532 est un conteneur temporaire créé à partir de l'ID d'image b17, qui est votre FROM image, ubuntu:14.04.

2) ea6 est la couche d'image créée en sortie de l'instruction, c'est-à-dire à partir de la sauvegarde du conteneur intermédiaire 532.

3) oui. Docker appelle cela nion File System et c'est la principale raison pour laquelle les images sont si efficaces.

29
Elton Stoneman