GNU/Linux >> Tutoriales Linux >  >> Linux

7 funciones divertidas de transporte de imágenes/contenedores de Linux

Una cosa interesante sobre el uso de herramientas de contenedores como Podman, Buildah, CRI-O y Skopeo es que se basan en la misma biblioteca para extraer y enviar imágenes, que es contenedores/imagen. A menudo describo los containers/image proyecto como una biblioteca para copiar imágenes entre diferentes tipos de contenedores de almacenamiento. Este almacenamiento puede estar en un registro de contenedores, en contenedores/almacenamiento, como objetos del sistema de archivos como directorios o tarballs, e incluso directamente en el demonio Docker. El mecanismo para mover estas imágenes de contenedores entre los diferentes tipos de almacenamiento de contenedores se denomina transporte. . Una de las características menos entendidas de containers/image son los diversos transportes que soporta.

Transportes

La imagen se especifica usando un transport:ImageName formato. Si no se especifica ningún transporte, docker El transporte (registro de contenedores) se utiliza de forma predeterminada en todas las herramientas que no sean Skopeo. Skopeo requiere que los usuarios configuren siempre el transporte.

Una de las cosas geniales que hizo Docker fue inventar la idea de un registro de contenedores , que es básicamente un servidor web que contiene imágenes de contenedor. Docker.io, quay.io y Artifactory son ejemplos de registros de contenedores. El equipo de ingeniería de Docker definió un protocolo para extraer y enviar estas imágenes desde los registros de contenedores, a lo que nos referimos como docker. transporte.

[ También te puede interesar: 12 guías de Podman para empezar con los contenedores ]

docker://referencia-docker

Una referencia de imagen se almacena en un registro de imagen de contenedor remoto. Ejemplo:quay.io/podman/stable:latest . La referencia puede incluir un nombre de host para un registro específico.

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

Para Podman y Buildah, docker:// transport es el transporte predeterminado. Se puede dejar caer por conveniencia:

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

Cuando se usa un nombre corto para extraer una imagen como fedora , Podman y Buildah usan la lista de registros para crear una referencia de Docker y luego la llaman usando docker:// transport transporte.

Containers/image también es compatible con muchos otros transportes para copiar y almacenar imágenes de contenedores.

oci:ruta

El oci transport exporta/importa el contenido de una imagen de contenedor a un directorio local, asumiendo que la imagen cumple con la especificación de diseño de imagen de contenedor abierto. Los tarballs del manifiesto y de la capa se exportan al directorio como archivos individuales.

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

directorio

El dir transport vuelca el contenido de una imagen de contenedor en un directorio local, suponiendo nuevamente que la imagen cumple con el diseño de imagen de Docker. El manifiesto, los tarballs de capa y las firmas se exportan como archivos individuales al directorio. Este es un formato no estandarizado, principalmente útil para la depuración o inspección no invasiva de contenedores. Es muy similar al oci transport pero almacena los archivos usando el formato docker heredado.

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

docker-archivo

Otra forma que desarrollaron los ingenieros de Docker para almacenar y transportar imágenes de contenedores es usar tar . Una bola de alquitrán contiene todos los archivos que componen una imagen de contenedor. Estos tarballs se crearon originalmente usando docker save y podman save comandos Podrían volver a cargarse en el almacenamiento local del motor del contenedor usando docker load y podman load . El container/image La biblioteca convierte este formato de archivo en un transporte, lo que permite que otros comandos lo usen directamente como podman run dir:/tmp/fedora.tag echo hello , o 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

Advertencia :Uso de docker-archive casi nunca es lo correcto. El formato es muy derrochador tanto para almacenamiento como para E/S. Recomendaría que los usuarios ejecuten una docker/distribution temporal registro en su lugar.

archivo-oci

Este formato es similar al docker-archive , pero en lugar de ser el formato heredado, almacenará una sola imagen en formato OCI. La ruta es una imagen que cumple con la especificación de diseño de imagen de contenedor abierto en un directorio en la ruta especificada y está etiquetada con una etiqueta.

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

docker-daemon

Una de las mejores características de containers/image es soporte para docker-daemon transporte. Docker y Podman no comparten el mismo almacenamiento. No pueden porque Docker controla el bloqueo de su almacenamiento dentro del daemon. Si bien Podman, Buildah, CRI-O y Skopeo pueden compartir contenido, usan el sistema de archivos a través de containers/storage. .

Podman y las demás herramientas pueden funcionar con docker-daemon almacenamiento indirectamente, a través de docker-daemon transporte. Esto permite que los motores de contenedores accedan directamente a imágenes extraídas previamente por el demonio Docker o imágenes creadas por docker build . También puede mover imágenes creadas por Buildah y Podman directamente al demonio Docker.

Algo como esto:

podman run docker-daemon:alpine echo hello

Nota :Podman está extrayendo la imagen del demonio Docker, almacenando la imagen en containers/storage y luego ejecutar el contenedor. No está utilizando el almacenamiento de Docker directamente. Para permitir que Podman se comunique con Docker, debemos ejecutarlo como root, ya que el demonio de Docker requiere privilegios de root.

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

Si construye una imagen a través de buildah , puede confirmar la imagen directamente en el docker-daemon :

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

Nota :Si bien es genial usar el docker-daemon transporte como este, es una función de último recurso con costos de E/S y almacenamiento muy grandes. Consolidar el proceso para que se ejecute en uno u otro storage/ecosystem casi siempre es mejor. Por ejemplo, sería mejor sacar la imagen del demonio Docker y luego usar containers/storage por ejecutarlo.

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

contenedores-almacenamiento

El "transporte" final en realidad no es un transporte en absoluto, sino más bien un mecanismo para almacenar una imagen en un almacenamiento local creado usando containers/storage biblioteca. El formato de docker-reference se describe en detalle en el transporte de Docker.

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

Por defecto, Buildah y Podman almacenan sus imágenes en contenedores:

$ podman image pull ubi8

El comando Podman anterior expande los nombres cortos para ubi8 a registry.access.redhat.com/ubi8:latest y luego usa el transporte docker:// transport para extraerlo de registry.access.redhat.com . Luego almacena el contenido directamente en containers/storage .

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

El comando Buildah anterior busca en el almacenamiento del contenedor y luego empuja la imagen usando docker:// transport transporte al registro quay.io.

[ ¿Empezando con los contenedores? Consulta este curso gratuito. Implementación de aplicaciones en contenedores:una descripción técnica general. ]

Conclusión

Los containers/image biblioteca proporciona una excelente manera de transferir imágenes de contenedores entre máquinas y diferentes tipos de almacenamiento. Es parte integral de los motores de contenedores y proporciona algunas funciones realmente interesantes. Profundice más en los transportes utilizando la página del manual de transporte de contenedores.


Linux
  1. ¿Cuál es la diferencia entre un contenedor de Linux y una imagen?

  2. Cómo listar contenedores Docker

  3. Cómo crear una imagen personalizada desde un contenedor Docker

  4. ¿Se puede ejecutar docker dentro de un contenedor de Linux?

  5. ¿Qué hay dentro de una imagen/contenedor de Docker?

Docker Image vs Container:las principales diferencias

Introducción a la gestión de contenedores de Linux

Cómo instalar la imagen de AlmaLinux 8 en Docker Container

Cómo ejecutar contenedores Docker

Actualización de contenedores Docker con cero o mínimo tiempo de inactividad

Cómo gestionar contenedores Docker