Bases du cloud et des conteneurs

FROM python:slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]

Pour le Dockerfile ci-dessus, quelle association entre la commande exécutée lors de la construction de l'image avec docker build et la commande exécutée lors du démarrage d'un conteneur avec docker run est correcte ?

  1. AÀ la construction : pip install ; au démarrage : python app.py
  2. BÀ la construction : pip install et python app.py ; au démarrage : python app.py
  3. CÀ la construction : rien ; au démarrage : pip install et python app.py
Afficher la réponse et l'explication

Réponse : A. À la construction : pip install ; au démarrage : python app.py

RUN exécute une commande pendant la construction de l'image et enregistre le résultat (ici, les bibliothèques installées) dans l'image sous forme d'une nouvelle couche. CMD ne fait qu'enregistrer, dans la configuration de l'image, la commande par défaut à exécuter au démarrage d'un conteneur ; elle n'est pas exécutée pendant la construction. Les bibliothèques sont donc installées une seule fois, à la construction, et python app.py s'exécute à chaque démarrage d'un conteneur. Si une commande est écrite après le nom de l'image dans docker run, elle remplace le contenu de CMD.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases du cloud et des conteneurs

  1. Une image nommée pinger, construite à partir du Dockerfile ci-dessus, est démarrée par docker run pinger example.com. Quelle est la commande exécutée dans le conteneur ?
  2. Un conteneur est démarré par la commande ci-dessus à partir de l'image nginx, un serveur web qui écoute sur le port 80. L'adresse IP de l'hôte est 192.0.2.10, et il n'y a aucune restriction comme un pare-feu. Quelle est l'URL correcte pour joindre ce serveur web depuis un navigateur sur un autre PC du même réseau ?
  3. Le Dockerfile (B) ci-dessus a été obtenu à partir du Dockerfile (A), qui plaçait RUN npm ci après COPY . ., en changeant l'ordre pour ne copier d'abord que les fichiers de dépendances. npm ci prend 120 secondes, npm run build 30 secondes et COPY . . 2 secondes, et la durée des autres instructions est négligeable. L'image est reconstruite 20 fois par jour après une modification du seul code source sous src (package.json et package-lock.json ne changent pas). Si le cache de la construction précédente peut être utilisé, de combien la durée totale de construction par jour est-elle plus courte avec B qu'avec A ?
  4. Dans Docker, quelle description des volumes nommés et des montages bind (bind mounts), qui servent à conserver les données écrites par un conteneur, est correcte ?
  5. Une image est récupérée (pull) en indiquant registry.example.com/team/web:1.4. Quelle association donnant le sens de chaque partie de cette référence est correcte ?