{{tag>sysadmin docker fichier image}} ====== Docker : lister ou extraire les fichiers d'une image ====== On souhaite pouvoir lister ou extraire les fichiers contenus dans une image Docker. Pour cela on peut utiliser la commande **docker create** qui se charge de créer un calque conteneur par dessus l'image mais ne lance pas l’exécution du conteneur. Tant que le conteneur n'est pas exécuté, le système de fichier est inchangé et demeure celui de l'image de base. # Création d'un conteneur temporaire nommé explicitement "image_extractor" docker container create --name image_extractor my_image:version ===== Obtenir la liste complète des fichiers de l'archive ===== Pour obtenir la liste complète des fichiers de l’archive, on peut utiliser les commandes **docker container export** et **tar**: docker container export image_extractor | tar t | most ===== Extraire un fichier ===== Utiliser la commande **docker container cp** pour extraire/copier le ou les fichiers du conteneur sur l'arborescence locale. # Extraction du fichier aFile dans le répertoire courant docker container cp image_extractor:/path/to/aFile . ===== Extraire le système de fichiers complet ===== Pour extraire le système de fichier complet visible par le conteneur on peut utiliser **docker container export** et **tar**. On crée ainsi une archive contenant l'ensemble des fichiers. # Création d'une archive tar à contenant l'ensemble des fichiers accessibles dans le conteneur docker container export image_extractor > image_files.tar ===== La commande docker image save ===== Une autre façon d'obtenir les fichiers présents dans une image Docker est d'utiliser la commande **docker image save**: docker image save my_image:version > docker_myimage.tar L'archive produite conserve la structure utilisée par Docker pour la gestion de ses images. L'archive contient un fichier ''manifest.json'' décrivant les différents calques ainsi qu'un ensemble de dossiers contenant les fichiers de chaque calques. Ci-dessous pour exemple une archive produite avec une image busybox docker image save busybox:latest > docker_busybox_latest.tar tar tf docker_busybox_latest.tar 22667f53682a2920948d19c7133ab1c9c3f745805c14125859d20cede07f11f9.json a13131da00574c4f311d65e64e5bf7bfbffdeb8a029d2c605522506871b80354/ a13131da00574c4f311d65e64e5bf7bfbffdeb8a029d2c605522506871b80354/VERSION a13131da00574c4f311d65e64e5bf7bfbffdeb8a029d2c605522506871b80354/json a13131da00574c4f311d65e64e5bf7bfbffdeb8a029d2c605522506871b80354/layer.tar manifest.json repositories Ce format peut s'avérer utile lorsqu'on cherche à déterminer le rôle de chaque calque dans la construction de l'image cependant créer un conteneur (via docker container create) est la façon la plus simple d'obtenir le système de fichier final créé à partir de l'image. Cette commande peut être utilisée conjointement avec **docker image load** pour transférer des images d'un serveur Docker à l'autre sans utiliser de dépot (repository). # Sauvegarde une image dans une archive docker image save my_image:version > docker_myimage_version.tar # Charger une image à partir d'une archive docker image load --input docker_myimage_version.tar ===== Extraire un fichier de configuration ===== Dans l'exemple ci-dessous on va extraire le fichier de configuration par défaut disponible dans l'image de l'application. Le fichier pourra ainsi être modifié puis monté en lecture seule lors de la création du conteneur. ===== Références ===== * https://unix.stackexchange.com/questions/331645/extract-file-from-docker-image * https://www.howtogeek.com/devops/how-to-inspect-a-docker-images-content-without-starting-a-container/