Outils pour utilisateurs

Outils du site


sysadmin:docker:extraire_fichier_dans_image

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

sysadmin:docker:extraire_fichier_dans_image [2022/12/21 11:21] – créée yoannsysadmin:docker:extraire_fichier_dans_image [2022/12/21 15:14] (Version actuelle) yoann
Ligne 2: Ligne 2:
  
  
-====== Docker : extraire des fichiers d'une image ======+====== Docker : lister ou extraire les fichiers d'une image ======
  
-On souhaite pouvoir extraire des fichiers d'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.+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.
  
-Une fois le conteneur créé on peut utiliser la commande **docker container cp** pour extraire/copier un fichier du conteneur sur l'arborescence locale.+<code bash> 
 +# Création d'un conteneur temporaire nommé explicitement "image_extractor" 
 +docker container create --name image_extractor my_image:version 
 +</code> 
 + 
 +===== 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**:
  
 <code bash> <code bash>
-# Création du conteneur temporaire +docker container export image_extractor | tar t | most 
-docker create --name image_extractor my_image:version+</code>
  
 +===== Extraire un fichier =====
 +
 +Utiliser la commande **docker container cp** pour extraire/copier le ou les fichiers du conteneur sur l'arborescence locale.
 +
 +<code bash>
 # Extraction du fichier aFile dans le répertoire courant # Extraction du fichier aFile dans le répertoire courant
 docker container cp image_extractor:/path/to/aFile . docker container cp image_extractor:/path/to/aFile .
 +</code>
 +
 +===== 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.
 +
 +<code bash>
 +# Création d'une archive tar à contenant l'ensemble des fichiers accessibles dans le conteneur
 +docker container export image_extractor > image_files.tar
 +</code>
 +
 +===== 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**:
 +
 +<code bash>
 +docker image save my_image:version > docker_myimage.tar
 +</code>
 +
 +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
 +<file>
 +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
 +</file>
 +
 +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).
 +
 +<code bash>
 +# Sauvegarde une image dans une archive
 +docker image save my_image:version > docker_myimage_version.tar
  
-Suppression du conteneur temporaire +Charger une image à partir d'une archive 
-docker container rm image_extractor+docker image load --input docker_myimage_version.tar
 </code> </code>
  
-<note> 
-Cela suppose que l'on connaît le chemin d'accès absolu au fichier. Pour lister les fichiers d'une image voir le wiki. 
-</note> 
  
 ===== Extraire un fichier de configuration ===== ===== Extraire un fichier de configuration =====
Ligne 31: Ligne 82:
  
   * https://unix.stackexchange.com/questions/331645/extract-file-from-docker-image   * 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/
sysadmin/docker/extraire_fichier_dans_image.1671621692.txt.gz · Dernière modification : 2022/12/21 11:21 de yoann