Búsqueda de sitios web

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

Artículos relacionados: