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
-
Ingresar al servidor qué contiene al ambiente de laboratorio con credenciales de administración.
-
Levantar una instancia del contenedor de registry que provee Docker
sudo docker run -d -p 5000:5000 --name registry registry:2 -
Hacer pull de una imagen de un registry externo
sudo docker pull registry.suse.com/bci/bci-base:15.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 -
Hacer push de la nueva imagen en localhost:5000
sudo docker push localhost:5000/bci-base:15.4 -
Eliminar las imágenes locales
sudo docker image rm registry.suse.com/bci/bci-base:15.4sudo docker image rm localhost:5000/bci-base:15.4 -
Verifique que no existan mas imagenes localmente
sudo docker images -
Descargue la imagen del registry interno
sudo docker pull localhost:5000/bci-base:15.4 -
Verifique que la imagen esté en el listado
sudo docker images -
Elimine la imagen nuevamente
sudo docker image rm localhost:5000/bci-base:15.4 -
Detenga el contenedor del registry
sudo docker stop registry -
Intente descargar la imagen
Nota: Este paso debe fallar.sudo docker pull localhost:5000/bci-base:15.4 -
Levante nuevamente el contenedor del registry
sudo docker start registry -
Intente descargar la imagen
sudo docker pull localhost:5000/bci-base:15.4 -
Detenga y elimine el contenedor de registry junto con su volumen
sudo docker stop registry ; sudo docker rm registry -v registry -
Cree un directorio llamado registry-data en el path tmp
mkdir /tmp/registry-data -
Cree un directorio llamado certs y sitúese dentro de él
mkdir certscd certs -
Verifique tener instalado openssl
openssl -
En caso de no ser así:
sudo zypper -n install openssl -
Cree un nuevo set de certificado y llave privada
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.iosudo openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes -out demo.crt -keyout demo.key -
Confirme que se generaron los archivos .crt y .key
ls -l cd .. -
Cree una carpeta llamada auth
mkdir auth -
Genere un archivo encriptado con las credenciales a utilizar
sudo docker run --entrypoint htpasswd httpd:2 \ -Bbn usuario password > auth/htpasswd -
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 -
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 -
Intente hacer push de la imagen creada anteriormente (debe fallar)
sudo docker push ip-de-la-vm:30050/bci-base:15.4 -
Haga login hacia el registry (debe fallar)
sudo docker login ip-de-la-vm:30050 -
Vuelva a hacer push de la imagen (debe fallar)
sudo docker push ip-de-la-vm:30050/bci-base:15.4 -
Modifique el archivo /etc/docker/daemon.json agregando al json:
sudo vi /etc/docker/daemon.jsonNota: Asegúrese de dejar una coma en la llave de cierre anterior a esta instrucción{ "insecure-registries": ["ip-de-la-vm:30050"], . . } -
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 -
Intente hacer push de la imagen creada anteriormente
sudo docker start registry sudo docker login ip-de-la-vm:30050sudo docker push ip-de-la-vm:30050/bci-base:15.4 -
Elimine las imágenes locales
sudo docker image rm -f $(sudo docker images --filter=reference=*/bci-base:15.4 --quiet) -
Verifique que no existan imágenes localmente (exceptuando httpd y registry)
sudo docker images -
Intente hacer pull de la imagen en el registry
sudo docker pull ip-de-la-vm:30050/bci-base:15.4
Limpieza de ambiente
- Limpie el ambiente
sudo docker rm -f $(sudo docker ps -q) sudo docker image prune -af