Bases du cloud et des conteneurs
FROM alpine
COPY data.tar.gz /tmp/
RUN tar -xzf /tmp/data.tar.gz -C /opt && rm /tmp/data.tar.gzPour décompresser une archive de 500 MB, data.tar.gz, une image a été construite avec le Dockerfile ci-dessus. Bien que l'archive ait été supprimée dans le même RUN après la décompression, l'image est restée plus grosse de la taille de l'archive. Quelle association entre la cause et le remède est la plus appropriée ?
- ALe rm placé après && n'est pas exécuté pendant la construction. Il faut écrire le rm dans une instruction RUN séparée
- BLes fichiers supprimés restent dans l'image sous forme de cache de construction. Il faut reconstruire en ajoutant --no-cache à docker build
- CL'archive reste dans la couche créée par l'instruction COPY. Il faut utiliser une construction multi-étapes et ne copier dans l'image finale que les fichiers décompressés
Afficher la réponse et l'explication
Réponse : C. L'archive reste dans la couche créée par l'instruction COPY. Il faut utiliser une construction multi-étapes et ne copier dans l'image finale que les fichiers décompressés
Chaque instruction d'un Dockerfile qui modifie le système de fichiers (comme COPY ou RUN) devient une couche, et une image est l'empilement de ces couches. Supprimer un fichier dans une couche ultérieure ne fait qu'enregistrer une marque de suppression dans la couche supérieure : l'archive de 500 MB entrée dans la couche de COPY reste donc dans l'image. Avec une construction multi-étapes qui décompresse dans une autre étape et n'apporte que les fichiers décompressés dans la dernière étape avec COPY --from, l'archive ne figure pas dans l'image finale. Télécharger, décompresser et supprimer dans un seul RUN est une autre approche, mais elle ne s'applique pas à un fichier apporté par COPY.
Continuer : 9 autres questions sur Bases du cloud et des conteneurs