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
-
Ingresar al servidor qué contiene al ambiente de laboratorio con credenciales de administración.
-
Crear el directorio de trabajo
mkdir -p ~/nexus-registry/data -
Asignar los permisos necesarios para que Nexus pueda escribir en el directorio
sudo chown -R 200:200 ~/nexus-registry/data -
Crear una red de Docker para los contenedores
docker network create nexus-net -
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 -
Verificar los logs del contenedor de Nexus, hasta que indique que inició correctamente.
docker logs -f nexusStarted Sonatype Nexus COMMUNITY 3.79.0-09 -
Extraer la contraseña para el usuario
admingenerada.docker exec -it nexus cat /nexus-data/admin.password ; echo -
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 -
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
-
Dentro de la consola Web de Nexus, debe crear un nuevo Docker Repository, con los siguentes pasos:
-
Ir a
Server Administration and Configuration>Repositories>Create repository -
Seleccionar
Docker (hosted)y configurar en Name:docker-registry, habilitarHTTP, en HTTP colocar5000, dejar el resto de las configuraciones por defecto y dar click en el botonCreate repository.
Exponiendo el servicio de Image Registry con HAProxy
-
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 -
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" -
Verificar el Subject Alternative Name
cd ~/openssl x509 -text -noout -in ~/nexus-registry/certs/nexus.crt | grep -A10 "X509v3 Subject Alternative Name" -
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 -
Crear el directorio de configuración para HAProxy
mkdir ~/nexus-registry/haproxy -
Crear el archivo de configuración de HAProxy, en la ubicación
~/nexus-registry/haproxy/haproxy.cfgy 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 -
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 -
Verificar que el contenedor inicia sin inconvenientes:
docker psdocker logs haproxy -
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/ -
Actualizar los certificados confiables dentro del sistema operativo:
sudo update-ca-trust -
Reiniciar el servicio de Docker:
sudo systemctl restart docker -
Verificar que los contenedores Docker
nexusyhaproxyhayan reiniciado correctamente, caso contrario puede iniciarlos con el siguiente comando:El contenedor nexus puede demorar unos minutos en iniciar de forma completa.docker start nexus haproxy
Cargar una imagen de Contenedor al nuevo Image Registry
-
Hacer Docker Login el nuevo servicio de Image Registry, asegurarse de colocar su
FQDNcorrespondiente, 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 -
Descargar una imagen del Docker Hub:
docker pull httpd -
Hacer un nuevo Tag a partir de la imagen descargada anteriormente, asegurarse de colocar su
FQDNcorrespondiente:docker tag httpd:latest student-0-aio.35-227-133-255.nip.io:30083/itmlabs/my-apache:v1.0.0docker images -
Subir la imagen de contenedor al nuevo Image Registry, asegurarse de colocar su
FQDNcorrespondiente:docker push student-0-aio.35-227-133-255.nip.io:30083/itmlabs/my-apache:v1.0.0 -
Eliminar las imagenes del servidor local, asegurarse de colocar su
FQDNcorrespondientedocker rmi student-0-aio.35-227-133-255.nip.io:30083/itmlabs/my-apache:v1.0.0docker rmi httpddocker images -
Abrir un nevegador web en su computadora e ingresar a la consola web de Nexus Image Registry, asegurarse de colocar su
FQDNcorrespondiente, y explorar el Docker Registry enBrowse contents>Browse>docker-registry:http://student-0-aio.35-227-133-255.nip.io:30081 -
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 -
Verificar que el contenedor se está ejecutando correctamente:
docker psdocker imagescurl 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