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

Algo 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, lo cual es contenedores / imagen. A menudo describo el Contenedores/image proyecto como una biblioteca para copiar imágenes entre diferentes tipos de contenedores de almacenamiento. Este almacenamiento puede ser en un registro de contenedores, en contenedores / almacenamiento, como objetos del sistema de archivos como directorios o archivos, e incluso directamente en el demonio Docker. El mecanismo para mover estas imágenes de contenedores entre diferentes tipos de almacenamiento de contenedores se denomina archivo. Una de las características menos entendidas de Contenedores/image son los diferentes transportes que soporta.

Índice

    Los transportes

    La imagen se especifica mediante un transporte: Nombre de la imagen formato. Si no se especifica ningún transporte, el docker El transporte (registro de contenedores) se usa de forma predeterminada en todas las herramientas que no sean Skopeo. Skopeo pide a los usuarios que definan siempre el transporte.

    Una de las cosas geniales que hizo Docker fue que se le ocurrió la idea de un, que es básicamente un servidor web con imágenes de contenedores en él. Docker.io, quay.io y Artifactory son ejemplos de registros de contenedores. El equipo de ingeniería de Docker ha definido un protocolo para extraer y enviar estas imágenes desde los registros de contenedores, que llamamos el docker transporte.

    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://es el transporte predeterminado. Se puede dejar caer por conveniencia:

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

    Al usar un nombre corto para extraer una imagen como fedora, Podman y Buildah usan la lista de registro para crear una referencia de Docker y luego la invocan con el docker:// transporte.

    Contenedores/image También admite muchos otros transportes para copiar y almacenar imágenes de contenedores.

    oci: camino

    el oci transport exporta/importa el contenido de una imagen de contenedor a un directorio local, suponiendo que la imagen se ajuste a la especificación de diseño de imagen de contenedor abierto. Los archivos de manifiesto y de 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

    verdadero

    el dir transport vuelca el contenido de una imagen de contenedor en un directorio local, asumiendo nuevamente que la imagen se ajusta al diseño de imagen de Docker. El manifiesto, los archivos de capa y las firmas se exportan como archivos individuales en el directorio. Este es un formato no estandarizado, principalmente útil para la depuración o inspección no invasiva de contenedores. es muy parecido a oci transport pero almacena 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 los ingenieros de Docker han desarrollado para almacenar y transportar imágenes de contenedores es mediante el uso de tar. A contiene todos los archivos que componen una imagen de contenedor. Estos archivos fueron creados originalmente usando el docker save y podman save pedidos. Podrían recargarse en el almacenamiento del motor del contenedor local usando docker load y podman load. el container/image La biblioteca transforma 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, Donde 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: Utilizando docker-archive casi nunca es lo correcto. El formato es muy caro tanto para almacenamiento como para E/S. Recomendaría a los usuarios ejecutar un archivo temporal docker/distribution registrarse en su lugar.

    archivo oci

    Este formato es similar a docker-archive, pero en lugar de ser el formato heredado, almacenará una sola imagen en formato OCI. La ruta es una imagen que se ajusta a la especificación de diseño de imagen de contenedor abierto en un directorio en la ruta especificada y 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 Contenedores/image es apoyo para docker-daemon transporte. Docker y Podman no comparten el mismo almacenamiento. No pueden porque Docker controla el bloqueo de su almacenamiento en el daemon. Si bien Podman, Buildah, CRI-O y Skopeo pueden compartir contenido, usan el sistema de archivos a través de Contenedores/Almacenamiento.

    Podman y otras herramientas pueden trabajar con el docker-daemon almacenamiento indirecto, a través de la docker-daemon transporte. Esto permite que los motores de contenedores accedan directamente a imágenes obtenidas 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.

    Alguna cosa como esta:

    podman run docker-daemon:alpine echo hello

    Notar: Podman extrae la imagen del demonio Docker, almacenando la imagen en Contenedores/Almacenamientoy luego ejecutar el contenedor. No utiliza el almacenamiento de Docker directamente. Para permitir que Podman se comunique con Docker, debemos ejecutarlo como root porque el demonio de Docker requiere privilegios de root.

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

    Si crea una imagen usando buildah, puede validar 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

    Notar: Aunque mola usar el docker-daemon transporte como este, es una función de último recurso con costos de I/O y almacenamiento muy altos. Consolidar el proceso a ejecutar en uno u otro Almacenamiento/ecosystem casi siempre es mejor. Por ejemplo, sería mejor eliminar la imagen del demonio de Docker y luego simplemente usar Contenedores/Almacenamiento para ejecutarlo

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

    contenedores de almacenamiento

    El "transporte" final en realidad no es un transporte en absoluto, sino un mecanismo para almacenar una imagen en el almacenamiento local creado con el. Contenedores/Almacenamiento Biblioteca. el formato de docker-reference se describe en detalle en Transporte de Docker.

    $ skopeo copy docker://registry.access.tipstecnologicos.es/ubi8:latest Contenedores-Almacenamiento:ubi8:latest

    Buildah y Podman almacenan sus imágenes en un contenedor de forma predeterminada:

    $ podman image pull ubi8

    El comando Podman anterior expande los nombres cortos para ubi8 en registry.access.tipstecnologicos.es/ubi8:latest entonces usa el docker:// transport para sacarlo de la registry.access.tipstecnologicos.es. A continuación, almacena el contenido directamente en Contenedores/Almacenamiento.

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

    El comando Buildah anterior examina el almacenamiento del contenedor, luego empuja la imagen usando el docker:// transporte al registro quay.io.

    Conclusión

    el Contenedores/image La biblioteca proporciona una excelente manera de transferir imágenes de contenedores entre máquinas y diferentes tipos de almacenamiento. Es una parte integral de los motores de contenedores y ofrece algunas características realmente geniales. Por favor, investigue más a fondo los transportes utilizando el contenedores de transporte página de manual

    Artículos de interés

    Subir