GNU/Linux >> Tutoriels Linux >  >> Linux

7 fonctionnalités amusantes de conteneurs/transports d'images Linux

Une chose intéressante à propos de l'utilisation d'outils de conteneur comme Podman, Buildah, CRI-O et Skopeo, c'est qu'ils sont basés sur la même bibliothèque pour extraire et pousser des images, qui est conteneurs/image. Je décris souvent les containers/image projet en tant que bibliothèque pour copier des images entre différents types de stockage de conteneurs. Ce stockage peut se trouver dans un registre de conteneurs, dans des conteneurs/stockage, sous forme d'objets de système de fichiers tels que des répertoires ou des archives tar, et même directement dans le démon Docker. Le mécanisme de déplacement de ces images de conteneurs entre les différents types de stockage de conteneurs est appelé un transport . L'une des fonctionnalités les moins comprises de containers/image est les différents transports qu'il prend en charge.

Transports

L'image est spécifiée à l'aide d'un transport:ImageName format. Si aucun transport n'est spécifié, le docker (registre de conteneurs) le transport est utilisé par défaut dans tous les outils autres que Skopeo. Skopeo demande aux utilisateurs de toujours définir le transport.

L'une des choses intéressantes que Docker a faites a été d'inventer l'idée d'un registre de conteneurs , qui est essentiellement un serveur Web contenant des images de conteneur. Docker.io, quay.io et Artifactory sont tous des exemples de registres de conteneurs. L'équipe d'ingénierie Docker a défini un protocole pour extraire et pousser ces images à partir des registres de conteneurs, que nous appelons le docker transports.

[ Vous pourriez également apprécier : 12 guides Podman pour démarrer avec les conteneurs ]

docker://docker-reference

Une référence d'image est stockée dans un registre d'images de conteneur distant. Exemple :quay.io/podman/stable:latest . La référence peut inclure un nom d'hôte vers un registre spécifique.

$ skopeo copy docker://docker.io/alpine dir:/tmp/alpine
$ podman run docker://registry.fedoraproject.org/fedora:latest echo hello

Pour Podman et Buildah, docker:// est le transport par défaut. Il peut être supprimé pour plus de commodité :

$ podman pull registry.fedoraproject.org/fedora:latest

Lors de l'utilisation d'un nom court pour extraire une image comme fedora , Podman et Buildah utilisent la liste des registres pour créer une référence Docker, puis l'appellent en utilisant le docker:// transports.

Containers/image prend également en charge un grand nombre d'autres transports pour copier et stocker des images de conteneurs.

oci:path

L'oci transport exporte/importe le contenu d'une image de conteneur dans un répertoire local, en supposant que l'image est conforme à la spécification Open Container Image Layout. Les archives tar du manifeste et de la couche sont exportées dans le répertoire sous forme de fichiers individuels.

$ skopeo copy oci:/tmp/myimage docker://registry.example.com/myimage
$ podman run oci:/tmp/fedora echo hello

répertoire

Le dir transport vide le contenu d'une image de conteneur dans un répertoire local, en supposant à nouveau que l'image est conforme à la disposition de l'image Docker. Le manifeste, les archives de couches et les signatures sont exportés sous forme de fichiers individuels dans le répertoire. Il s'agit d'un format non standardisé, principalement utile pour le débogage ou l'inspection non invasive des conteneurs. Il est très similaire à l'oci transport mais stocke les fichiers en utilisant le format docker hérité.

$ podman save --format docker-dir fedora -o /tmp/fedora
$ podman run dir:/tmp/fedora echo hello

archive-docker

Une autre méthode développée par les ingénieurs de Docker pour stocker et transporter des images de conteneurs consiste à utiliser tar . Une archive tar contient tous les fichiers qui composent une image de conteneur. Ces archives tar ont été créées à l'origine à l'aide de docker save et podman save commandes. Ils peuvent être rechargés dans le stockage local du moteur de conteneur à l'aide de docker load et podman load . Le container/image La bibliothèque transforme ce format d'archive en un transport, lui permettant d'être utilisé directement par d'autres commandes comme podman run dir:/tmp/fedora.tag echo hello , ou buildah from dir:/tmp/fedora.tar

$ skopeo copy docker://registry.fedoraproject.org/fedora:latest docker-archive:/tmp/fedora.img
$ podman run docker-archive:/tmp/fedora.img echo hello

Avertissement  :Utilisation de docker-archive n'est presque jamais la bonne chose à faire. Le format est très coûteux pour le stockage et les E/S. Je recommanderais aux utilisateurs d'exécuter un docker/distribution temporaire registre à la place.

oci-archive

Ce format est similaire au docker-archive , mais au lieu d'être le format hérité, il stockera une seule image au format OCI. Le chemin est une image conforme à la spécification de mise en page d'image de conteneur ouvert dans un répertoire au chemin spécifié et étiqueté avec une balise.

$ skopeo copy docker-archive:/tmp/fedora.img oci-archive:/tmp/fedora-oci.img
$ podman run oci-archive:/tmp/fedora-oci.img echo hello

démon docker

L'une des fonctionnalités les plus intéressantes de containers/image est le support du docker-daemon le transport. Docker et Podman ne partagent pas le même stockage. Ils ne le peuvent pas, car Docker contrôle le verrouillage de son stockage dans le démon. Bien que Podman, Buildah, CRI-O et Skopeo puissent partager du contenu, ils utilisent le système de fichiers via containers/storage .

Podman et les autres outils peuvent fonctionner avec le docker-daemon stockage indirectement, via le docker-daemon le transport. Cela permet aux moteurs de conteneurs d'accéder directement aux images précédemment extraites par le démon Docker ou aux images créées par docker build . Vous pouvez également déplacer des images créées par Buildah et Podman directement dans le démon Docker.

Quelque chose comme ça :

podman run docker-daemon:alpine echo hello

Remarque :Podman extrait l'image du démon Docker, stockant l'image dans containers/storage , puis exécutez le conteneur. Il n'utilise pas directement le stockage Docker. Pour permettre à Podman de communiquer avec Docker, nous devons l'exécuter en tant que root car le démon Docker nécessite des privilèges root.

$ sudo docker pull fedora
$ sudo podman run docker-daemon:docker.io/library/fedora echo hello

Si vous construisez une image via buildah , vous pouvez valider l'image directement dans le docker-daemon :

# ctr=$(buildah from fedora)
# mnt=$(buildah mount $ctr)
# install -m 0744 start.sh $/mnt
# buildah commit $ctr docker-damon:myimage

Remarque :Alors que c'est cool d'utiliser le docker-daemon transport comme celui-ci, il s'agit d'une fonctionnalité de dernier recours avec des coûts d'E/S et de stockage très importants. Consolidation du processus pour s'exécuter dans l'un ou l'autre storage/ecosystem est presque toujours meilleur. Par exemple, il serait préférable d'extraire l'image du démon Docker, puis d'utiliser simplement containers/storage pour l'exécuter.

$ sudo podman pull docker-daemon:registry.fedoraproject.org/library/fedora
$ podman run fedora echo hello

conteneurs-stockage

Le "transport" final n'est vraiment pas du tout un transport, mais plutôt un mécanisme de stockage d'une image dans un stockage local créé à l'aide de containers/storage bibliothèque. Le format de docker-reference est décrit en détail dans le transport Docker.

$ skopeo copy docker://registry.access.redhat.com/ubi8:latest containers-storage:ubi8:latest

Buildah et Podman stockent par défaut leurs images dans le stockage de conteneur :

$ podman image pull ubi8

La commande Podman ci-dessus développe les noms courts pour ubi8 à registry.access.redhat.com/ubi8:latest puis utilise le docker:// transport pour l'extraire du registry.access.redhat.com . Il stocke ensuite le contenu directement dans containers/storage .

$ buildah push docker://quay.io/myrepo/myimage

La commande Buildah ci-dessus examine le stockage du conteneur, puis pousse l'image à l'aide de docker:// transport vers le registre quay.io.

[ Vous débutez avec les conteneurs ? Découvrez ce cours gratuit. Déploiement d'applications conteneurisées :présentation technique. ]

Conclusion

Les containers/image La bibliothèque fournit un excellent moyen de transférer des images de conteneurs entre des machines et différents types de stockage. Il fait partie intégrante des moteurs de conteneurs et offre des fonctionnalités vraiment intéressantes. Veuillez approfondir les transports en utilisant la page de manuel containers-transports.


Linux
  1. Docker peut-il s'exécuter dans un conteneur Linux ?

  2. Que contient une image/un conteneur Docker ?

  3. Comment faire fonctionner les symboles de débogage dans l'outil Linux perf à l'intérieur des conteneurs Docker ?

  4. Installation de netstat sur le conteneur docker linux

  5. Quel système d'exploitation s'exécute dans mon conteneur Docker ?

Image Docker vs conteneur :les principales différences

Introduction à la gestion des conteneurs Linux

Comment installer l'image AlmaLinux 8 dans le conteneur Docker

Comment exécuter des conteneurs Docker

Mise à jour des conteneurs Docker avec un temps d'arrêt nul ou minimum

Comment gérer les conteneurs Docker