Skopeo, operaciones con contenedores y repositorios

Hoy vamos a volver al mundo de los contenedores o microservicios, la estrella del día es Skopeo, una utilidad de línea de comandos que realiza varias operaciones en imágenes de contenedores y repositorios de imágenes. Esta entrada viene a continuación de la que hicimos en su día sobre los productos Podman y Buildah.

Como dijimos en dicha entrada Podman es el motor de los contenedores que nos permite levantar dichos contenedores y con Buildah nos encargábamos de crear las imágenes OCI. Pues bien, Skopeo cierra el círculo, ya que se encarga de gestionar las imágenes generadas por Buidah y subirlas a diferentes registros.

Logos de Podman, Buildah y Skopeo

Háblame un poco más de Skopeo

Una de las ventajas de Skopeo es que no requiere que el usuario que se ejecute sea root, al igual que podman, para realizar así la mayoría de sus operaciones; además otras de sus ventajas principales es que no requiere que se esté ejecutando ningún servicio (daemon) para realizar sus operaciones.

A nivel de compatibilidad puede trabajar con imágenes OCI así como las imágenes original de Docker en su versión 2.

Skopeo funciona con registros de imágenes de contenedores API V2, como registros de docker.io y quay.io, así como registros privados, directorios locales y directorios de diseño OCI locales.

Las operaciones que puede realizar son:

  • Copiar una imagen desde y hacia varios mecanismos de almacenamiento. Por ejemplo, podemos copiar imágenes de un registro a otro, sin necesidad de privilegios.
  • Inspeccionar una imagen remota para que muestre sus propiedades, incluidas sus capas, sin que sea necesario que se descargue la imagen
  • Eliminar una imagen de un repositorio dado.
  • Sincronizar un repositorio de imágenes externo con un registro interno.
  • Cuando lo requiera el repositorio, Skopeo puede pasar las credenciales y certificados apropiados para la autentificación.

La mejor manera de decir es hacer, por lo que veamos algunos ejemplos de uso.

Podman, Buildah y Skopeo en acción

Como viene siendo habitual he utilizado un VPS, un servidor privado virtual, que tengo creado en el entorno de mi proveedor de confianza, Clouding.io Como no podía ser de otra manera he utilizado una distribución Centos 8, ya que todos estos productos son patrocinados e impulsados por la compañía Red Hat, y esta es su distribución comunitaria.

Crear nuevo usuario operador y acciones adicionales

Como siempre os recomiendo para trabajar hacerlo con un usuario diferente de root, por lo que debéis crear un usuario adicional, añadirlo al grupo sudo, realizar el respectivo intercambio de llaves y deshabilitar el usuario root para el acceso remoto. Si no sabéis hacer todo esto aquí os explico:

Para añadir un nuevo usuario:

useradd -m -s "/bin/bash" \
-c "Usuario operador" \
-d "/home/operador" \
-G wheel operador
passwd operador

Respecto al intercambio de llaves escribe esta entrada al respecto: SSH sin contraseña en Linux, y para deshabilitar el acceso de root vía SSH:

sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' \
/etc/ssh/sshd_config

Y reiniciamos el servicio:

systemctl restart sshd.service

Instalación de Podman, Buidlah y Skopeo

Para realizar la instalación de las herramientas:

sudo dnf -y install podman buildah skopeo

Una vez instaladas vamos a descargar algunas imágenes para así trabajar con ellas. Para ello podemos utilizar los repositorios de Red Hat, desde registry.redhat.io, aunque para ello debemos tener una cuenta de usuario, o bien utilizar el portal comunitario de Docker, que no hace falta registro. Para descargarlos utilizamos el comando:

podman pull mariadb

De esta manera descargaremos la última imagen del contenedor oficial del motor de base de datos MariaDB.

También podemos crear nuestra propia imagen, utilizando en este caso Buildah. Por ejemplo, la imagen de un simple servidor web con Apache. Utilizando un fichero con este contenido:

FROM centos:latest
 
MAINTAINER davidochobits “davidochobits@colaboratorio.net”
 
RUN dnf -y install httpd
 
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
 
EXPOSE 80

Guardamos y salimos.

Construimos la imagen:

buildah bud -t static .

Listamos las imágenes actuales:

[operador@serv8centoscont ~]$ podman images
REPOSITORY                  TAG      IMAGE ID       CREATED              SIZE
localhost/static            latest   ff582fddadac   About a minute ago   262 MB
docker.io/library/mariadb   latest   2ab9d091310d   15 hours ago         421 MB
docker.io/library/centos    latest   0d120b6ccaa8   3 months ago         222 MB

Ahora, utilizando Skopeo, podemos inspeccionar una de las imágenes:

skopeo inspect docker://docker.io/library/centos

Tal y como hemos comentado podemos copiar imagenes entre diferentes repositorios en la red, por ejemplo, copiando el ejemplo de su documentación oficial:

skopeo copy docker://quay.io/buildah/stable docker://registry.internal.company.com/buildah
skopeo copy oci:busybox_ocilayout:latest dir:existingemptydirectory

Para borrar imágenes:

skopeo delete docker://localhost:5000/imagename:latest

Sincronizar entre repositorios:

skopeo sync --src docker --dest dir registry.example.com/busybox /media/usb
Fuetnes consultadas
Proyecto en Github.com de Skopeo