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.
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