Instale Harbor Image Registry en Ubuntu 22.04|20.04 |
Un registro de contenedor se puede definir como un repositorio o una colección de repositorios utilizados para almacenar y acceder a imágenes de contenedores. Se pueden utilizar para el desarrollo de aplicaciones basadas en contenedores, lo que ahorra a los desarrolladores un tiempo valioso para crear y entregar aplicaciones nativas de la nube. Sirven como intermediarios al compartir imágenes de contenedores entre sistemas.
Las imágenes de contenedor constan de bibliotecas y paquetes de sistema necesarios para ejecutar una aplicación. Proporcionan varios beneficios a los desarrolladores, como portabilidad y agilidad. Las imágenes de contenedores se pueden crear utilizando herramientas como Buildah, kaniko, Img Image builder, etc. Una vez que se han revelado las imágenes del contenedor, necesita un lugar para guardarlas, compartirlas y acceder a ellas más tarde. Un registro de contenedor proporciona almacenamiento para las imágenes cargándolas (empujándolas) y descargándolas (extrayendo) a un sistema remoto.
Hay dos tipos principales de registros de contenedores:
- Registros públicos: los utilizan individuos y equipos pequeños que desean ejecutar registros lo más rápido posible. Estos son menos seguros y pueden causar problemas como parches, privacidad y control de acceso para grandes organizaciones.
- Registros privados: ofrecen funciones de seguridad avanzadas, lo que proporciona la mejor manera de incorporar seguridad y privacidad en el almacenamiento de imágenes de contenedores empresariales. Se pueden alojar de forma remota o local. Los registros privados más populares son Google Container Registry, Amazon Elastic Container Registry (ECR) y Azure Container Registry.
Se prefieren los registros de contenedores privados ya que permiten a la organización acceder a las imágenes internamente de una manera más segura. Múltiples sistemas de autenticación implementan medidas para verificar las imágenes del contenedor.
¿Qué es el puerto?
Harbor Container Image Registry es un registro de contenedores de clase empresarial gratuito y de código abierto que se utiliza para almacenar y distribuir imágenes de contenedores. Protege los artefactos mediante políticas y control de acceso basado en roles. También garantiza que las imágenes se escaneen y estén libres de vulnerabilidades antes de firmarlas como confiables. Harbour fue desarrollado por VMware y luego cedido a la Cloud Native Computing Foundation (CNCF). Harbour evolucionó a partir del código fuente de Docker, que luego se mejoró para mejorar y eliminar los problemas de seguridad. Actualmente, proporciona alto rendimiento e interoperabilidad que ayuda a los usuarios a administrar de forma segura imágenes de contenedores en plataformas informáticas nativas de la nube como Docker, Podman, Kubernetes, etc.
Las características clave asociadas con Harbour son:
- Administrar gráficos de Helm: ayuda a administrar gráficos de Helm aislados por proyectos y controlados por RBAC.
- Administrar función por grupo LDAP: los administradores pueden importar un grupo LDAP/AD a Harbor y asignarle funciones de proyecto.
- Replicar proyectos: admite la replicación de imágenes. Es posible replicar repositorios de una instancia de Harbor a otra.
- Control de acceso basado en roles: los usuarios y los repositorios se organizan en proyectos. Los usuarios pueden tener diferentes permisos para las imágenes en diferentes proyectos.
- Escaneo de vulnerabilidades: utiliza Clair para escanear imágenes con regularidad y advertir a los usuarios sobre cualquier vulnerabilidad.
- Auditoría: Se realiza un seguimiento de todas las operaciones realizadas en los repositorios.
- API RESTful: Tiene API RESTful para la mayoría de operaciones administrativas, fáciles de integrar con sistemas externos.
- Portal gráfico de usuario: donde los usuarios pueden navegar, buscar repositorios y administrar proyectos fácilmente.
Instale Harbor Image Registry en Ubuntu 22.04|20.04
En esta guía, analizaremos cómo instalar Harbor Container Image Registry en Ubuntu 22.04|20.04
Harbour consta de 8 componentes que incluyen:
- Redis: una base de datos en memoria utilizada para almacenar información de inicio de sesión.
- PostgreSQL: la base de datos utilizada por Harbor.
- Beego: un marco de aplicación web de código abierto en el que se construye y desarrolla el servicio web Harbour.
- Chartmuseum: se utiliza para gestionar Helm Charts.
- Docker: se utiliza para empujar y extraer imágenes de Docker.
- Helm: para gestionar gráficos de Helm
- Swagger-ui: se utiliza para llamar y probar la API RESTful.
Comience actualizando el servidor e instalando los paquetes necesarios:
sudo apt update && sudo apt -y full-upgrade
sudo apt install apt-transport-https ca-certificates curl software-properties-common vim git
Compruebe si es necesario reiniciar después de la actualización del sistema:
[ -f /var/run/reboot-required ] && sudo reboot -f
Paso 1: instalar Docker y Docker Compose
Harbour se implementa como un contenedor acoplable y requiere la instalación de Docker. Para instalar Docker en Ubuntu 22.04|20.04, utilice la ayuda proporcionada en la siguiente guía:
- Cómo instalar Docker CE en sistemas Linux
Una vez instalado, asegúrese de que Docker esté iniciado y habilitado:
sudo systemctl start docker && sudo systemctl enable docker
Agregue el uso de su sistema al grupo Docker.
sudo usermod -aG docker $USER
newgrp docker
Verifique la instalación:
$ docker version
Client: Docker Engine - Community
Version: 20.10.18
API version: 1.41
Go version: go1.18.6
Git commit: b40c2f6
Built: Thu Sep 8 23:11:43 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.18
API version: 1.41 (minimum version 1.12)
Go version: go1.18.6
Git commit: e42327a
Built: Thu Sep 8 23:09:30 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.8
GitCommit: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
También deberías tener instalado Docker Compose:
$ docker compose version
Docker Compose version v2.10.2
De lo contrario, puede instalar Docker Compose utilizando la siguiente guía:
- Cómo instalar Docker Compose en Linux
Paso 2: descargue el instalador de Harbour en Ubuntu 22.04|20.04
El instalador de Harbor requiere docker-compose, instalémoslo.
curl -s https://api.github.com/repos/docker/compose/releases/latest|grep browser_download_url|grep docker-compose-linux-x86_64 | cut -d '"' -f 4|wget -qi -
chmod +x docker-compose-linux-x86_64
sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
rm docker-compose-linux-x86_64.sha256
Confirma que funciona:
$ docker-compose version
Docker Compose version v2.10.2
Descargue el paquete Harbor visitando la página de lanzamiento de GitHub. También es posible extraer el paquete más reciente desde la línea de comando con el comando:
curl -s https://api.github.com/repos/goharbor/harbor/releases/latest | grep browser_download_url | cut -d '"' -f 4 | grep '\.tgz$' | wget -i -
Una vez descargado, extraiga el archivo:
tar zxvf harbor-offline-installer-v*.tgz
Navegue al directorio:
cd harbor
Paso 3: configurar Harbor en Ubuntu 22.04|20.04
Si tiene un nombre de dominio completo, puede generar certificados SSL para su nombre de dominio.
Usando Let's Encrypt SSL
Instale certbot y solicite Let's Encrypt SSL:
sudo apt install certbot -y
sudo certbot certonly --standalone -d "harbor.computingforgeeks.com" --preferred-challenges http --agree-tos -n -m "[email " --keep-until-expiring
Después de esto, tendrá los certificados en /etc/letsencrypt/live/harbor.yourdoain.com/
Usar certificados autofirmados
- También es posible generar y utilizar certificados autofirmados. Pero esto podría causar un problema con el certificado de CA desconocido al intentar conectarse a Harbor desde el cliente Docker/Podman.
mkdir -p certs
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/harbor.key \
-addext "subjectAltName = DNS:harbor.computingforgeeks.com" \
-x509 -days 365 -out certs/harbor.crt
Después de esto, copie los certificados a /etc/ssl/certs/;
sudo cp certs/harbor.* /etc/ssl/certs/
Una vez creado, abra el archivo para editarlo:
vim harbor.yml
En el archivo, realice las configuraciones deseadas:
hostname: harbor.computingforgeeks.com
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: Harbor12345
Si tiene la intención de ejecutar Harbor solo a través de HTTP (no tiene un FQDN), debe comentar las siguientes configuraciones relacionadas con HTTPS:
# https related config
#https:
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
Configuraciones https de ejemplo para certificados autofirmados:
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /etc/ssl/certs/harbor.crt
private_key: /etc/ssl/certs/harbor.key
También puedes configurar la contraseña de la base de datos, con el número máximo de conexiones:
# Harbor DB configuration
database:
# The password for the root user of Harbor DB. Change this before any production use.
password: root123
# The maximum number of connections in the idle connection pool. If it <=0, no idle connections are retained.
max_idle_conns: 100
# The maximum number of open connections to the database. If it <= 0, then there is no limit on the number of open connections.
# Note: the default number of connections is 1024 for postgres of harbor.
max_open_conns: 900
Configure la ruta de almacenamiento para Harbor como se muestra:
# The default data volume
data_volume: /data
También es posible utilizar almacenamiento externo como Azure, GCS, S3, Swift y OSS descomentando y modificando las líneas siguientes.
# Uncomment storage_service setting If you want to using external storage
# storage_service:
# # ca_bundle is the path to the custom root ca certificate, which will be injected into the truststore
# # of registry's and chart repository's containers. This is usually needed when the user hosts a internal storage with self signed certificate.
# ca_bundle:
# # storage backend, default is filesystem, options include filesystem, azure, gcs, s3, swift and oss
# # for more info about this configuration please refer https://docs.docker.com/registry/configuration/
# filesystem:
# maxthreads: 100
# # set disable to true when you want to disable registry redirect
# redirect:
# disabled: false
Una vez realizadas las modificaciones, guarde el archivo y proceda como se muestra a continuación.
Paso 4: instale Harbor en Ubuntu 22.04|20.04
Ahora puede instalar Harbor Container Image Registry en Ubuntu 22.04|20.04 ejecutando el script de instalación como se muestra:
sudo ./install.sh
Salida de muestra:
[Step 0]: checking if docker is installed ...
Note: docker version: 20.10.18
[Step 1]: checking docker-compose is installed ...
Note: Docker Compose version 2.11.2
[Step 2]: loading Harbor images ...
915f79eed965: Loading layer [==================================================>] 37.77MB/37.77MB
53e17aa1994a: Loading layer [==================================================>] 8.898MB/8.898MB
82205c155ee7: Loading layer [==================================================>] 3.584kB/3.584kB
7ffa6a408e36: Loading layer [==================================================>] 2.56kB/2.56kB
1a2ed94f447f: Loading layer [==================================================>] 97.91MB/97.91MB
e031eb4548cd: Loading layer [==================================================>] 98.7MB/98.7MB
Loaded image: goharbor/harbor-jobservice:v2.6.0
.....
Una vez completado, deberías ver esto:
También puede ver los contenedores en ejecución:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e6bda2f1a5f goharbor/harbor-jobservice:v1.10.14 "/harbor/harbor_jobs…" 21 seconds ago Up 16 seconds (health: starting) harbor-jobservice
be4ba338c24d goharbor/nginx-photon:v1.10.14 "nginx -g 'daemon of…" 21 seconds ago Up 16 seconds (health: starting) 0.0.0.0:80->8080/tcp, :::80->8080/tcp, 0.0.0.0:443->8443/tcp, :::443->8443/tcp nginx
05ce75a1f7dc goharbor/harbor-core:v1.10.14 "/harbor/harbor_core" 21 seconds ago Up 17 seconds (health: starting) harbor-core
baaeec02b7fb goharbor/harbor-portal:v1.10.14 "nginx -g 'daemon of…" 21 seconds ago Up 17 seconds (health: starting) 8080/tcp harbor-portal
27719428c542 goharbor/harbor-registryctl:v1.10.14 "/home/harbor/start.…" 21 seconds ago Up 18 seconds (health: starting) registryctl
d273aff2ee28 goharbor/redis-photon:v1.10.14 "redis-server /etc/r…" 21 seconds ago Up 17 seconds (health: starting) 6379/tcp redis
383433e6ec36 goharbor/registry-photon:v1.10.14 "/home/harbor/entryp…" 21 seconds ago Up 17 seconds (health: starting) 5000/tcp registry
e80e59840027 goharbor/harbor-db:v1.10.14 "/docker-entrypoint.…" 21 seconds ago Up 17 seconds (health: starting) 5432/tcp harbor-db
149ef8437374 goharbor/harbor-log:v1.10.14 "/bin/sh -c /usr/loc…" 21 seconds ago Up 19 seconds (health: starting) 127.0.0.1:1514->10514/tcp harbor-log
Paso 5: acceda a la interfaz de usuario web de Harbour en Ubuntu
Una vez instalado, puede acceder a la interfaz web de Harbour utilizando la URL http://nombre_dominio o https://nombre_dominio
Inicie sesión con la credencial definida en el archivo de configuración de Harbor. Una vez autenticado, verá el siguiente panel.
Crear un usuario
Desde este panel, puede crear un usuario navegando a Administrador->Usuarios y luego a Nuevo usuario.
Proporcione los detalles del usuario como se muestra.
Una vez creado, el usuario aparecerá como se muestra y podrá configurarlo como administrador seleccionando el usuario y luego haciendo clic en Establecer como administrador.
Crear nuevo registro portuario
Navegue hasta el menú Administración y haga clic en Registros-> NUEVO PUNTO FINAL
Harbor permite a los usuarios agregar otros registros que no sean de Harbor. Los registros admitidos actualmente son Docker Hub, Docker Registration, AWS Elastic Container Registry, Azure Container Registry, Huawei SWR, Gitlab, Quay.io, Jfrog Artifactory, Artifact Hub (soporte agregado en v2.0.4), Ali Cloud Container Registry y Google. Registro de contenedores.
Para esta guía, demostraré cómo agregar el registro DockerHub. Debe proporcionar el proveedor, el nombre, la URL del punto final, el ID de acceso (nombre de usuario) y el secreto de acceso (contraseña).
Para verificar si todo está bien, haz clic en Probar conexión.
Si la conexión se realiza, haga clic en Aceptar para agregar el registro. Una vez agregado, el registro aparecerá como se muestra.
Ahora necesitamos crear una replicación en Replicaciones->Nueva regla de replicación para sincronizar artefactos con Harbor.
Aquí, debe proporcionar:
- Nombre: letras minúsculas para especificar el nombre
- Descripción: información sobre su replicación
- Modo de replicación: Este es el tipo de replicación. Puede ser un modo basado en pull o push.
- Registro de origen: el repositorio configurado para sincronizarse con Harbor
- Filtro de fuente: el repositorio que desea sincronizar con su repositorio Harbor. Por ejemplo nginx/latest en DockerHub
- tag: Etiqueta de las imágenes que quieres sincronizar.
- Espacio de nombres de destino: el nombre de su proyecto
- Modo de activación: la sincronización se puede activar manualmente o programarse
Por ejemplo:
Una vez que se hayan completado los detalles, haga clic en guardar. La nueva replicación se agregará como se muestra.
Ahora, para activar la sincronización manualmente, seleccione Replicación y haga clic en Replicar.
Ahora en su proyecto, debería ver la replicación.
Haga clic en él y vea la imagen disponible que se ha sincronizado.
Paso 6: utilice el registro de imágenes de contenedores de Harbor
Ahora puede extraer y utilizar las imágenes en el Registro de imágenes de contenedores de Harbor. Si utilizó HTTP, debe realizar los siguientes ajustes en su cliente Docker.
sudo vim /etc/docker/daemon.json
Agregue las siguientes líneas:
{
"insecure-registries" : ["harbor.computingforgeeks.com", "0.0.0.0"]
}
Una vez realizados los cambios, reinicie Docker:
sudo systemctl restart docker
También debe asegurarse de que la entrada de Harbour DNS apunte a la IP del servidor:
$ sudo vim /etc/hosts
192.168.205.22 harbor.computingforgeeks.com
Iniciar sesión en el puerto
Ahora inicie sesión en Harbor usando el comando con la sintaxis;
##For Docker
docker login <harbor_address>
##For Podman with HTTPS
podman login <harbor_address>
##For Podman with HTTP
podman login <harbor_address> --tls-verify=false
Por ejemplo:
docker login harbor.computingforgeeks.com
También puedes proporcionar el nombre de usuario y la contraseña con el comando:
$ docker login harbor.computingforgeeks.com --username=admin --password=Harbor12345
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/rocky9/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
Recuerde, debe usar –tls-verify=false para todos los comandos de extracción y inserción de Podman si está utilizando HTTP.
Extraer una imagen de contenedor
Para extraer una imagen use el comando con la sintaxis:
##For Docker
docker pull <harbor_address>/library/image:tag
##For Podman with HTTP
podman pull <harbor_address>/library/image:tag
##For Podman with HTTPs
podman pull <harbor_address>/library/image:tag --tls-verify=false
Por ejemplo:
docker pull harbor.computingforgeeks.com/library/keel-demo-image
Salida de muestra:
Crear y enviar una imagen de contenedor
También es posible crear y enviar imágenes de contenedores. Primero, cree un Dockerfile.
$ vim Dockerfile
FROM ubuntu:20.04
RUN apt-get update -y
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y gnupg apt-transport-https apt-utils wget
RUN echo "deb https://notesalexp.org/tesseract-ocr5/focal/ focal main" \
|tee /etc/apt/sources.list.d/notesalexp.list > /dev/null
RUN wget -O - https://notesalexp.org/debian/alexp_key.asc | apt-key add -
RUN apt-get update -y
RUN apt-get install tesseract-ocr -y
RUN apt install imagemagick -y
ENTRYPOINT ["tesseract"]
RUN tesseract -v
Cree las imágenes del contenedor usando Dockerfile.
##For Docker
docker build . -t tesseract:5
##For Podman
podman build . -t tesseract:5
Ahora etiquete la imagen que desea enviar:
docker tag tesseract:5 harbor.computingforgeeks.com/library/tesseract:latest
Empujar una imagen:
docker push harbor.computingforgeeks.com/library/tesseract:latest
Salida de muestra:
Verifique si la imagen está disponible en Harbor.
Esta imagen también se puede extraer y utilizar para ejecutar contenedores.
Paso 7: gestionar el ciclo de vida de Harbour
Los contenedores Harbour se pueden detener con el comando:
$ docker compose stop
[+] Running 8/9
⠿ Container registryctl Stopped 10.3s
⠿ Container harbor-jobservice Stopped 0.5s
⠿ Container nginx Stopped 0.5s
⠿ Container harbor-core Stopped 0.4s
⠿ Container harbor-portal Stopped 0.4s
⠿ Container redis Stopped 0.6s
⠿ Container harbor-db Stopped 0.6s
⠿ Container registry Stopped 0.3s
⠋ Container harbor-log Stopping 10.0s
Para iniciar los contenedores, use el comando:
$ docker compose start
[+] Running 9/9
⠿ Container harbor-log Started 0.6s
⠿ Container harbor-db Started 2.3s
⠿ Container redis Started 1.7s
⠿ Container registryctl Started 2.0s
⠿ Container harbor-portal Started 2.3s
⠿ Container registry Started 2.3s
⠿ Container harbor-core Started 0.6s
⠿ Container harbor-jobservice Started 1.5s
⠿ Container nginx Started 1.5s
Para actualizar las configuraciones, debe detener la instancia de Harbor en ejecución:
$ docker compose down -v
[+] Running 7/8
⠇ Container registryctl Stopping 8.9s
⠿ Container harbor-jobservice Removed 0.4s
⠿ Container nginx Removed 0.7s
⠿ Container harbor-core Removed 3.3s
⠿ Container harbor-portal Removed 0.3s
⠿ Container redis Removed 0.6s
⠿ Container harbor-db Removed 0.7s
⠿ Container registry Removed 0.4s
Ahora haga ajustes a su configuración de Harbor:
vim harbor.yml
Una vez que se hayan realizado los ajustes deseados, ejecute los siguientes comandos para iniciar Harbor:
./prepare
docker-compose up -d
Conclusión
Esto marca el final de esta guía sobre cómo instalar Harbor Container Image Registry en Ubuntu 22.04|20.04. Ahora puede almacenar y distribuir imágenes de contenedores de forma segura con Harbor Container Image Registry. Espero que esto haya sido significativo.
Artículos Relacionados:
- Instale el Registro de imágenes de contenedores Harbor en CentOS/Debian/Ubuntu
- Configure Docker Container Registry con Podman y Let's Encrypt SSL
- Publicar imágenes de contenedores en Docker Hub/registro de imágenes con Podman
- Cree imágenes de contenedores desde Dockerfile usando kaniko en Kubernetes