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.