Outils pour utilisateurs

Outils du site


sysadmin:docker:extraire_fichier_dans_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

sysadmin/docker/extraire_fichier_dans_image.txt · Dernière modification : 2022/12/21 15:14 de yoann