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

Iniciando Nexus Image Registry

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

  2. Crear el directorio de trabajo

    mkdir -p ~/nexus-registry/data
    

  3. Asignar los permisos necesarios para que Nexus pueda escribir en el directorio

    sudo chown -R 200:200 ~/nexus-registry/data
    

  4. Crear una red de Docker para los contenedores

    docker network create nexus-net
    

  5. Iniciar el contenedor de Nexus Image Registry

    docker run -d --name nexus  \
      --network nexus-net \
      --restart=always \
      -p 30081:8081 \
      -v ~/nexus-registry/data:/nexus-data \
      -v ~/nexus-registry/certs:/opt/sonatype/nexus/ssl \
      sonatype/nexus3:latest
    

  6. Verificar los logs del contenedor de Nexus, hasta que indique que inició correctamente.

    docker logs -f nexus
    
    Started Sonatype Nexus COMMUNITY 3.79.0-09
    

  7. Extraer la contraseña para el usuario admin generada.

    docker exec -it nexus cat /nexus-data/admin.password ; echo
    

  8. Abrir un navegador web en su computadora y verificar el acceso a la siguiente URL, debe ajustar su FQDN, el cual fue proporcionado al inicio del entrenamiento en el archivo de inventario:

    http://student-0-aio.35-227-133-255.nip.io:30081
    

  9. Dar click en el botón Sign in, debe utilizar el usuario admin y la contraseña que se extrajó anteriormente, la primera vez que ingrese, le solicitará cambio de credenciales, para lo cual recomendamos colocar la siguiente Ch5ng3IT2034.! para no olvidarla, aceptar los terminos de licencia y deberá responder Disable anonymous access.

Creación de Docker Repository en Nexus Image Registry

  1. Dentro de la consola Web de Nexus, debe crear un nuevo Docker Repository, con los siguentes pasos:

  2. Ir a Server Administration and Configuration > Repositories > Create repository

  3. Seleccionar Docker (hosted) y configurar en Name: docker-registry, habilitar HTTP, en HTTP colocar 5000, dejar el resto de las configuraciones por defecto y dar click en el boton Create repository.

Exponiendo el servicio de Image Registry con HAProxy

  1. Crear un nuevo directorio para la creación del certificado autofirmado a utilizar paar este ejercicio.

    cd ~/nexus-registry ; mkdir certs ; cd ~/nexus-registry/certs
    

  2. Generar el nuevo certificado autofirmado con el siguiente comando, asegurarse de reemplazar el FQDN correspondiente a su ambiente de laboratorio:

    openssl req -x509 -newkey rsa:4096 -keyout nexus.key -out nexus.crt -days 365 -nodes \
    -subj "/CN=student-0-aio.35-227-133-255.nip.io" \
    -addext "subjectAltName = DNS:student-0-aio.35-227-133-255.nip.io, DNS:localhost"
    

  3. Verificar el Subject Alternative Name

    cd ~/
    
    openssl x509 -text -noout -in ~/nexus-registry/certs/nexus.crt | grep -A10 "X509v3 Subject Alternative Name"
    

  4. Generar el certificado PEM a utilizar por el servicio de Image Registry

    cat ~/nexus-registry/certs/nexus.key ~/nexus-registry/certs/nexus.crt > ~/nexus-registry/certs/nexus.pem
    

  5. Crear el directorio de configuración para HAProxy

    mkdir ~/nexus-registry/haproxy
    

  6. Crear el archivo de configuración de HAProxy, en la ubicación ~/nexus-registry/haproxy/haproxy.cfg y con el siguiente contenido:

    global
        log stdout format raw local0
    
    defaults
        log global
        timeout connect 5s
        timeout client  50s
        timeout server  50s
    
    frontend nexus_front
        bind *:30083 ssl crt /usr/local/etc/haproxy/certs/nexus.pem
        default_backend nexus_back
    
    backend nexus_back
        server nexus nexus:5000 check 
    

  7. Iniciar el contenedor con el siguiente comando:

    docker run -d --name haproxy \
      --network nexus-net \
      --restart=always \
      -v ~/nexus-registry/certs:/usr/local/etc/haproxy/certs \
      -v ~/nexus-registry/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg \
      -p 30083:30083 \
      haproxy:lts
    

  8. Verificar que el contenedor inicia sin inconvenientes:

    docker ps
    
    docker logs haproxy
    

  9. Copiar el certificado dentro del repositorio del sistema operativo, para los certificados confiables:

    sudo cp ~/nexus-registry/certs/nexus.crt /etc/pki/ca-trust/source/anchors/
    
    sudo ls -ltr /etc/pki/ca-trust/source/anchors/
    

  10. Actualizar los certificados confiables dentro del sistema operativo:

    sudo update-ca-trust
    

  11. Reiniciar el servicio de Docker:

    sudo systemctl restart docker
    

  12. Verificar que los contenedores Docker nexus y haproxy hayan reiniciado correctamente, caso contrario puede iniciarlos con el siguiente comando:

    docker start nexus haproxy
    
    El contenedor nexus puede demorar unos minutos en iniciar de forma completa.

Cargar una imagen de Contenedor al nuevo Image Registry

  1. Hacer Docker Login el nuevo servicio de Image Registry, asegurarse de colocar su FQDN correspondiente, puede utilizar las el usuario admin y la contraseña Ch5ng3IT2034.!

    Es importante mencionar que este usuario no debe utilizarse 
    en ambientes de Producción para esta finalidad, en esta guía se utiliza SOLO 
    a manera de ejemplo para el Ingreso al Image Registry:
    
    docker login student-0-aio.35-227-133-255.nip.io:30083
    

  2. Descargar una imagen del Docker Hub:

    docker pull httpd 
    

  3. Hacer un nuevo Tag a partir de la imagen descargada anteriormente, asegurarse de colocar su FQDN correspondiente:

    docker tag httpd:latest student-0-aio.35-227-133-255.nip.io:30083/itmlabs/my-apache:v1.0.0
    
    docker images
    

  4. Subir la imagen de contenedor al nuevo Image Registry, asegurarse de colocar su FQDN correspondiente:

    docker push student-0-aio.35-227-133-255.nip.io:30083/itmlabs/my-apache:v1.0.0
    

  5. Eliminar las imagenes del servidor local, asegurarse de colocar su FQDN correspondiente

    docker rmi student-0-aio.35-227-133-255.nip.io:30083/itmlabs/my-apache:v1.0.0
    
    docker rmi httpd
    
    docker images
    

  6. Abrir un nevegador web en su computadora e ingresar a la consola web de Nexus Image Registry, asegurarse de colocar su FQDN correspondiente, y explorar el Docker Registry en Browse contents > Browse > docker-registry:

    http://student-0-aio.35-227-133-255.nip.io:30081
    

  7. Iniciar o lanzar un nuevo contenedor a partir de la imagen cargada el nuevo Image Registry.

    docker run --name my-apache -p 8080:80 -d student-0-aio.35-227-133-255.nip.io:30083/itmlabs/my-apache:v1.0.0
    

  8. Verificar que el contenedor se está ejecutando correctamente:

    docker ps
    
    docker images
    
    curl http://localhost:8080
    

Limpieza del ambiente

Eliminar los contenedores creados durante el ejercicio

docker rm -f haproxy nexus my-apache

Eliminar el directorio de trabajo

sudo rm -fR ~/nexus-registry

Eliminar la red de Docker

docker network rm nexus-net

Eliminar las imágenes de contenedores

docker rmi httpd student-0-aio.35-227-133-255.nip.io:30083/itmlabs/my-apache:v1.0.0

Limpiar el repositorio de certificados confiables por el sistema operativo

sudo rm -f /etc/pki/ca-trust/source/anchors/nexus.crt

Actualizar los certificados confiables dentro del sistema operativo:

sudo update-ca-trust

Reiniciar el servicio de Docker:

sudo systemctl restart docker