Skip to content

Desplegando un Image Registry Server contenerizado

Laboratorio: Desplegando un Image Registry Server contenerizado

Descripción

La presente guía realiza la instalación de un registry privado de imágenes contenerizadas a través de la herramienta de Docker así como su uso para subir y descargar imágenes en la misma red.

Objetivo

  • Instalación de un Registry de Imágenes con Docker.

Antes de comenzar

  • Contar con el acceso al ambiente de laboratorio

Inicio de laboratorio

  1. Ingresar al servidor qué contiene al ambiente de laboratorio con credenciales de administración.

  2. Levantar una instancia del contenedor de registry que provee Docker

    sudo docker run -d -p 5000:5000 --name registry registry:2
    

  3. Hacer pull de una imagen de un registry externo

    sudo docker pull registry.suse.com/bci/bci-base:15.4
    

  4. Hacer un tag de esta imagen que apunte al registry en localhost:5000

    sudo docker tag registry.suse.com/bci/bci-base:15.4 localhost:5000/bci-base:15.4
    

  5. Hacer push de la nueva imagen en localhost:5000

    sudo docker push localhost:5000/bci-base:15.4
    

  6. Eliminar las imágenes locales

    sudo docker image rm registry.suse.com/bci/bci-base:15.4
    
    sudo docker image rm localhost:5000/bci-base:15.4
    

  7. Verifique que no existan mas imagenes localmente

    sudo docker images
    

  8. Descargue la imagen del registry interno

    sudo docker pull localhost:5000/bci-base:15.4
    

  9. Verifique que la imagen esté en el listado

    sudo docker images
    

  10. Elimine la imagen nuevamente

    sudo docker image rm localhost:5000/bci-base:15.4
    

  11. Detenga el contenedor del registry

    sudo docker stop registry
    

  12. Intente descargar la imagen

    sudo docker pull localhost:5000/bci-base:15.4
    
    Nota: Este paso debe fallar.

  13. Levante nuevamente el contenedor del registry

    sudo docker start registry
    

  14. Intente descargar la imagen

    sudo docker pull localhost:5000/bci-base:15.4
    

  15. Detenga y elimine el contenedor de registry junto con su volumen

    sudo docker stop registry ; sudo docker rm registry -v registry
    

  16. Cree un directorio llamado registry-data en el path tmp

    mkdir /tmp/registry-data
    

  17. Cree un directorio llamado certs y sitúese dentro de él

    mkdir certs
    
    cd certs
    

  18. Verifique tener instalado openssl

    openssl
    

  19. En caso de no ser así:

    sudo zypper -n install openssl
    

  20. Cree un nuevo set de certificado y llave privada

    sudo openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes -out demo.crt -keyout demo.key
    
    Nota: Puede rellenar los campos de cualquier forma, excepto el Common Name, este debe de ser el FQDN de la VM asignada, por ejemplo: student-0-aio.34-19-16-179.nip.io

  21. Confirme que se generaron los archivos .crt y .key

    ls -l
    cd ..
    

  22. Cree una carpeta llamada auth

    mkdir auth
    

  23. Genere un archivo encriptado con las credenciales a utilizar

    sudo docker run --entrypoint htpasswd httpd:2 \
    -Bbn usuario password > auth/htpasswd
    

  24. Levante una nueva instancia del registry con un volumen y con el certificado

    sudo docker run -d -p 30050:5000 --name registry \
    -v "$(pwd)"/auth:/auth -e "REGISTRY_AUTH=htpasswd" \
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
    -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
    -v "$(pwd)"/certs:/certs \
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/demo.crt \
    -e REGISTRY_HTTP_TLS_KEY=/certs/demo.key \
    registry:2
    

  25. Hacer un tag de la imagen de localhost que apunte a la ip de la vm

    sudo docker tag localhost:5000/bci-base:15.4 ip-de-la-vm:30050/bci-base:15.4
    

  26. Intente hacer push de la imagen creada anteriormente (debe fallar)

    sudo docker push ip-de-la-vm:30050/bci-base:15.4
    

  27. Haga login hacia el registry (debe fallar)

    sudo docker login ip-de-la-vm:30050
    

  28. Vuelva a hacer push de la imagen (debe fallar)

    sudo docker push ip-de-la-vm:30050/bci-base:15.4
    

  29. Modifique el archivo /etc/docker/daemon.json agregando al json:

    sudo vi /etc/docker/daemon.json
    
    {
      "insecure-registries": ["ip-de-la-vm:30050"],
      .
      .
    }
    
    Nota: Asegúrese de dejar una coma en la llave de cierre anterior a esta instrucción

  30. Agregue el certificado al path donde se encuentre la configuración de docker y del sistema

    sudo cp certs/demo.crt /etc/pki/trust/anchors/
    sudo update-ca-certificates
    sudo systemctl restart docker
    

  31. Intente hacer push de la imagen creada anteriormente

    sudo docker start registry
    sudo docker login ip-de-la-vm:30050
    
    sudo docker push ip-de-la-vm:30050/bci-base:15.4
    

  32. Elimine las imágenes locales

    sudo docker image rm -f $(sudo docker images --filter=reference=*/bci-base:15.4 --quiet)
    

  33. Verifique que no existan imágenes localmente (exceptuando httpd y registry)

    sudo docker images
    

  34. Intente hacer pull de la imagen en el registry

    sudo docker pull ip-de-la-vm:30050/bci-base:15.4
    

Limpieza de ambiente

  1. Limpie el ambiente
    sudo docker rm -f $(sudo docker ps -q)
    sudo docker image prune -af