[Nativo de la nube] Registro y puerto de almacén privado de Docker

Tabla de contenido

1.Almacén privado Docker (Registro)

1.1 Introducción al Registro

1.2 Despliegue del Registro

Paso 1: extraiga las imágenes relevantes

Paso 2: Configurar los archivos yml relevantes del Registro (docker-compose)

Paso 3: empuja la imagen

 2. Actualización del registro: Puerto

2.1 Introducción al Trabajo

2.2 Características del puerto

2.3 La composición del Puerto

3. Despliegue portuario 

(1) Implementar el servicio Docker-Compose

(2) Implementar el servicio del puerto 

(3) Puerto de inicio

(4) Ver la imagen de inicio de Harbor 

(5) Crear un nuevo proyecto

(6) Cargar imágenes en otros clientes

 4. Mantener y gestionar el puerto. 

(1) Crear un proyecto a través de Harbor Web

(2) Crear usuario de Harbor 

(3) Ver registros

(4) Modificar el archivo de configuración Harbor.cfg

(5) Elimine el contenedor del servicio Harbour conservando los datos/base de datos de la imagen y migréelo

  5. Configuración de la máquina de respaldo del puerto

5.1 Instalar un puerto nuevamente 

 5.2 Proceso de copia 

(1) Agregar objeto de copia

 (2) Seleccionar y copiar elementos 

 (3) Ver los elementos en la máquina de respaldo


1.Almacén privado Docker (Registro)

1.1 Introducción al Registro

Los almacenes de Docker se dividen en almacenes privados y almacenes públicos, los almacenes públicos se pueden utilizar siempre que se registre como usuario oficial e inicie sesión. Pero para el uso de almacenes, las empresas seguirán teniendo sus propias imágenes exclusivas, por lo que también es necesaria la construcción de bibliotecas privadas.

Para los almacenes nativos, Docker proporciona Registro, que puede ayudarnos a construir nuestras propias bibliotecas privadas, pero las deficiencias también son obvias, es decir, es difícil de administrar y no puede realizar operaciones complejas.

1.2  Despliegue del Registro

Paso 1: extraiga las imágenes relevantes

docker pull registry:2.7.1
docker pull joxit/docker-registry-ui:latest   # 非必须,简单的界面

Paso 2: Configurar los archivos yml relevantes del Registro ( docker-compose )

 Hay dos archivos que deben configurarse, uno es config.yml y el otro es docker-compose.yml

mkdir -p /etc/docker/registry
 
cat > /etc/docker/registry/config.yml <<EOF
version: 0.1
log:
  accesslog:
    disabled: true
  level: debug
  formatter: text
  fields:
    service: registry
    environment: staging
storage:
  delete:
    enabled: true
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
    Access-Control-Allow-Origin: ['http://192.168.181.100']
    Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
    Access-Control-Allow-Headers: ['Authorization', 'Accept']
    Access-Control-Max-Age: [1728000]
    Access-Control-Allow-Credentials: [true]
    Access-Control-Expose-Headers: ['Docker-Content-Digest']
  http2:
    disabled: false
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3
EOF
 
 
 
cat > docker-compose.yaml <<EOF
version: '2.0'
services:
  registry:
    image: registry:2.7.1
    ports:
      - 5000:5000
    volumes:
      - /opt/registry:/var/lib/registry
      - /etc/docker/registry/config.yml:/etc/docker/registry/config.yml
  ui:
    image: joxit/docker-registry-ui:latest
    ports:
      - 80:80
    environment:
      - REGISTRY_TITLE=My Private Docker Registry
      - REGISTRY_URL=http://192.168.181.100:5000
      - SINGLE_REGISTRY=true
    depends_on:
      - registry
EOF
 
docker-compose up -d
 

Paso 3: empuja la imagen

docker tag nginx 192.168.73.105:5000/nginx:latest
 
docker push 192.168.73.105:5000/nginx:latest
The push refers to repository [192.168.181.100:5000/nginx]
Get "https://192.168.73.105:5000/v2/": http: server gave HTTP response to HTTPS client
 
# 开启非安全认证
 vim /etc/docker/daemon.json
{
  "insecure-registries" : [ "192.168.73.105:5000" ]
}
 
systemctl restart docker
 
 
#通web进入
http://192.168.73.105

 2. Actualización del registro: Puerto

2.1 Introducción al Trabajo

Harbor es el proyecto Docker Registry de nivel empresarial de código abierto de VMware y su objetivo es ayudar a los usuarios a crear rápidamente un servicio Docker Registry de nivel empresarial.

Harbour se basa en el Registro de código abierto de Docker y proporciona funciones requeridas por los usuarios empresariales, como interfaz de usuario de administración gráfica, control de acceso basado en roles (Role Based AccessControl), integración AD/LDAP y registro de auditoría (Auditlogging). También admite de forma nativa chino.

Cada componente de Harbour se construye como un contenedor Docker y se implementa mediante docker-compose. La plantilla docker-compose utilizada para implementar Harbor se encuentra en Harbor/docker-compose.yml.

2.2 Características del puerto

  • Control basado en roles : los usuarios y los almacenes se organizan en función de proyectos y los usuarios pueden tener diferentes permisos en los proyectos.
  • Estrategia de replicación basada en espejos : los espejos se pueden replicar (sincronizar) entre múltiples instancias de Harbor.
  • Compatibilidad con LDAP/AD : Harbour puede integrar AD/LDAP existente (una tabla similar a una base de datos) dentro de la empresa para la autenticación y gestión de usuarios existentes.
  • Eliminación de imágenes y recolección de basura : las imágenes se pueden eliminar y también se puede recuperar el espacio ocupado por la imagen.
  • Interfaz gráfica de usuario : los usuarios pueden navegar, buscar almacenes de imágenes y gestionar proyectos a través de un navegador.
  • Gestión de auditorías : todas las operaciones en el almacén de imágenes se pueden registrar y rastrear para la gestión de auditorías.
  • Admite API RESTful : la API RESTful proporciona a los administradores más control sobre Harbour, lo que facilita la integración con otro software de gestión.
  • La relación entre Harbour y el registro de Docker : Harbor esencialmente encapsula el registro de Docker y expande su propia plantilla comercial.

2.3 La composición del Puerto

La arquitectura de Harbor consta principalmente de seis componentes: proxy, registro, servicios principales, base de datos (Harbor-db), recopilador de registros (Harbor-log) y servicios de trabajo.

●Proxy: es un proxy frontal de nginx. El registro de Harbor, la interfaz de usuario, el servicio de token y otros componentes están detrás del proxy inverso de nginx. El proxy reenvía solicitudes de navegadores y clientes acoplables a diferentes servicios de backend.

●Registro: Responsable de almacenar imágenes de Docker y procesar comandos push/pull de Docker. Dado que se requiere control de acceso de usuario, es decir, diferentes usuarios tienen diferentes permisos de lectura y escritura en las imágenes de Docker, el Registro apuntará a un servicio de Token, lo que obligará al usuario a llevar un Token legal para cada solicitud de extracción/inserción de Docker. pasar al público Utilice la clave para descifrar y verificar el Token.

●Servicios principales: Las funciones principales de Harbour brindan principalmente los siguientes tres servicios:
1) UI (harbor-ui): proporciona una interfaz gráfica para ayudar a los usuarios a administrar imágenes en el Registro y autorizar a los usuarios.
2) WebHook: para obtener los cambios de estado de la imagen en el Registro de manera oportuna, configure Webhook en el Registro y pase los cambios de estado al módulo UI.
3) Servicio de token: responsable de emitir tokens para cada comando push/pull de Docker de acuerdo con los permisos del usuario. Si la solicitud iniciada por el cliente Docker al servicio de Registro no contiene un Token, será redirigida al servicio de Token, luego de obtener el Token, la solicitud se realizará nuevamente al Registro.

●Base de datos (harbor-db): proporciona servicios de base de datos para servicios principales, responsable de almacenar permisos de usuario, registros de auditoría, información de agrupación de imágenes de Docker y otros datos.

●Servicios de trabajo: se utilizan principalmente para la replicación de imágenes. Las imágenes locales se pueden sincronizar con instancias remotas de Harbor.

●Recopilador de registros (harbor-log): Responsable de recopilar registros de otros componentes en un solo lugar.


Cada componente de Harbour está construido como un contenedor Docker, así que use Docker Compose para implementarlo.
Se ejecutan un total de 7 contenedores. Puede verlo ejecutando el comando docker-compose ps en el directorio donde se encuentra docker-compose.yml. Los nombres son: nginx, harbour-jobservice, harbour-ui, harbour-db, puerto-adminserver, registro. , puerto-log.
Entre ellos, Harbour-adminserver se utiliza principalmente como gestión de datos de configuración de back-end y no tiene muchas otras funciones. Todos los datos que serán operados por harbour-ui se completan a través de un centro de gestión de configuración de datos como harbour-adminserver.

3.   Despliegue  portuario

(1) Implementar el servicio Docker-Compose

//下载或者上传 Docker-Compose
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
 
chmod +x /usr/local/bin/docker-compose
 
docker-compose -v

(2) Implementar el servicio del puerto 

#下载或上传 Harbor 安装程序
Harbor的压缩包下载地址:https://github.com/goharbor/harbor/releases
 
wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
 
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
 
 
#修改harbor安装的配置文件
vim /usr/local/harbor/harbor.cfg
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.73.107
--59行--指定管理员的初始密码,默认的用户名/密码是admin/ztt123
harbor_admin_password = ztt123
----------------------------------------------------------------------------------------------------------
关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数
1、所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor, 参数将生效。具体参数如下:
●hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.73.107 或 hub.kgc.cn。不要使用 localhost 或 127.0.0.1 为主机名。
 
●ui_url_protocol:(http 或 https,默认为 http)用于访问 UI 和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为 https。
 
●max_job_workers:镜像复制作业线程。
 
●db_password:用于db_auth 的MySQL数据库root 用户的密码。
 
●customize_crt:该属性可设置为打开或关闭,默认打开。打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。当由外部来源提供密钥和根证书时,将此属性设置为 off。
 
●ssl_cert:SSL 证书的路径,仅当协议设置为 https 时才应用。
 
●secretkey_path:用于在复制策略中加密或解密远程 register 密码的密钥路径。
 
2、可选参数:这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 Harbor 后在 Web UI 上进行更新。如果进入 Harbor.cfg,只会在第一次启动 Harbor 时生效,随后对这些参数的更新,Harbor.cfg 将被忽略。
 
注意:如果选择通过 UI 设置这些参数,请确保在启动 Harbor 后立即执行此操作。具体来说,必须在注册或在 Harbor 中创建任何新用户之前设置所需的 auth_mode。当系统中有用户时(除了默认的 admin 用户), auth_mode 不能被修改。 具体参数如下:
●Email:Harbor 需要该参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才启用。请注意,在默认情况下 SSL 连接时没有启用。如果 SMTP 服务器需要 SSL,但不支持 STARTTLS,那么应该通过设置启用 SSL email_ssl = TRUE。
 
●harbor_admin_password:管理员的初始密码,只在 Harbor 第一次启动时生效。之后, 此设置将被忽略,并且应在 UI 中设置管理员的密码。请注意,默认的用户名/密码是admin/Harbor12345。
 
●auth_mode:使用的认证类型,默认情况下,它是 db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为 ldap_auth。
 
●self_registration:启用/禁用用户注册功能。禁用时,新用户只能由 Admin 用户创建,只有管理员用户可以在 Harbor 中创建新用户。注意:当 auth_mode 设置为 ldap_auth 时,自注册功能将始终处于禁用状态,并且该标志被忽略。
 
●Token_expiration:由令牌服务创建的令牌的到期时间(分钟),默认为 30 分钟。
 
●project_creation_restriction:用于控制哪些用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目。 如果将其值设置为“adminonly”,那么只有 admin 可以创建项目。
 
●verify_remote_cert:打开或关闭,默认打开。此标志决定了当Harbor与远程 register 实例通信时是否验证 SSL/TLS 证书。 将此属性设置为 off 将绕过 SSL/TLS 验证,这在远程实例具有自签名或不可信证书时经常使用。
 
另外,默认情况下,Harbor 将镜像存储在本地文件系统上。在生产环境中,可以考虑 使用其他存储后端而不是本地文件系统,如 S3、Openstack Swif、Ceph 等对象存储。但需要更新 common/templates/registry/config.yml 文件。
Harbor的默认镜像存储路径在 /data/registry 目录下,映射到docker容器里面的 /storage 目录下。
这个参数是在 docker-compose.yml 中指定的,在 docker-compose up -d 运行之前修改。
如果希望将 Docker 镜像存储到其他的磁盘路径,可以修改这个参数。
----------------------------------------------------------------------------------------------------------

(3) Puerto de inicio

cd /usr/local/harbor/
在配置好了 harbor.cfg 之后,执行
 ./prepare      #为 harbor 启动的容器生成一些必要的文件(环境)
 ./install.sh   # 以 pull 镜像并启动容器

(4) Ver la imagen de inicio de Harbor 

cd /usr/local/harbor/
docker-compose ps
 
##以下命令均在在habor的配置目录下运行
docker-compose up -d      #启动
docker-compose stop       #停止
docker-compose restart    #重新启动

(5) Crear un nuevo proyecto

1) Acceso al navegador: http://192.168.73.107 Inicie sesión en la interfaz de usuario WEB de Harbor, contraseña ztt123

2) Después de ingresar el nombre de usuario y la contraseña para iniciar sesión en la interfaz, puede crear un nuevo proyecto. Haga clic en el botón "+Proyecto"

3) Complete el nombre del proyecto como "myproject-test" y haga clic en el botón "Aceptar" para crear un nuevo proyecto.

 4) En este momento, puede usar el comando Docker para iniciar sesión y enviar la imagen localmente a través de 192.168.73.107. De forma predeterminada, el servidor de Registro escucha en el puerto 80.

//登录 Harbor
docker login [-u admin -p Harbor12345] http://192.168.73.107
 
//下载镜像进行测试
docker pull nginx
 
//将镜像打标签
格式:docker tag 镜像:标签  仓库IP/项目名称/镜像名:标签
docker tag nginx:latest 192.168.73.107/myproject-test/nginx:v1
 
//上传镜像到 Harbor
docker push 192.168.73.107/myproject-test/nginx:v1

 5) Esta imagen y la información relacionada se pueden ver en el directorio myproject-test de la interfaz Harbour.

 (6) Cargar imágenes en otros clientes

 Todas las operaciones anteriores se realizan localmente en el servidor Harbour. Si otros clientes inician sesión en Harbor, se informará el siguiente error.

docker login -u admin -p ztt123 http://192.168.73.107
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.73.107/v2/: dial tcp 192.168.73.107:443: connect: connection refused

  1) Configurar operaciones en el cliente Docker

Método 1:
// La solución es: al iniciar el servidor Docker, agregue parámetros de inicio y use el acceso HTTP de forma predeterminada.

vim /usr/lib/systemd/system/docker.service
--13行--修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.73.107 --containerd=/run/containerd/containerd.sock
或
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.73.107
 
//重启 Docker,再次登录
systemctl daemon-reload
systemctl restart docker
 
//再次登录 Harbor
docker login -u admin -p Harbor12345 http://192.168.73.107
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Login Succeeded
//将自动保存凭据到/root/.docker/config.json,下次登录时可直接使用凭据登录 Harbor
 

Método dos: 

vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.73.107"]    #如果要与别的仓库配置共用,中间要用“,”隔开
}
 
 

//下载镜像进行测试
docker pull 192.168.73.107/myproject-test/nginx:v1
 
//上传镜像进行测试
docker pull cirros
docker tag cirros:latest 192.168.73.107/myproject-test/cirros:v2
docker push 192.168.73.107/myproject-test/cirros:v2

 2) Actualice la interfaz de administración web de Harbor para verla. Encontrará que hay dos espejos en el proyecto myproject-test.

 4. Mantener y gestionar el puerto. 

(1) Crear un proyecto a través de Harbor Web

 En el repositorio de Harbour, cualquier imagen debe tener su propio proyecto antes de enviarse al registro.
Haga clic en "+Proyecto" y complete el nombre del proyecto. Si el nivel del proyecto está configurado en "Privado", déjelo sin marcar. Si está configurado en un almacén público, todos tienen permisos de lectura para las imágenes de este proyecto. No es necesario ejecutar "Inicio de sesión de Docker" en la línea de comando para descargar la imagen. La operación de la imagen es consistente con Docker Hub.

 (2) Crear usuario de Harbor 

1) Crear usuarios y asignar permisos

En la interfaz de administración web, haga clic en Administración del sistema->Administración de usuarios->+Usuario,
complete el nombre de usuario como "zhangsan", la dirección de correo electrónico como "[email protected]", el nombre completo como "zhangsan", la contraseña como "As12345678" y el comentario como "xx rol del proyecto" (se puede omitir).
Archivo adjunto: una vez que el usuario se haya creado correctamente, haga clic en el botón "..." a la izquierda para configurar el usuario creado anteriormente en la función de administrador o eliminarlo. En este ejemplo, no se realizan configuraciones.

Función Descripción del permiso
El visitante tiene permiso de solo lectura para el proyecto especificado.
El desarrollador tiene permiso de lectura y escritura para el proyecto especificado, pero no tiene permiso de eliminación.
El mantenedor tiene permiso de lectura y escritura para el proyecto especificado y también puede modificar otras configuraciones, como crear
un proyecto de Webhooks. administradores Permisos de lectura y escritura, así como administración de usuarios/escaneo de imágenes y otros permisos de administración

2) Agregar miembros del proyecto

Haga clic en Proyecto->miproyecto-prueba->Miembros->+Miembros, complete el usuario zhangsan creado anteriormente y asigne el rol a "Desarrollador".
Adjunto: en este momento, aún puedes cambiar o eliminar los roles de los miembros haciendo clic en el botón "..." a la izquierda.

3) Utilice una cuenta normal para operar la imagen en el cliente.  

//删除上述打标签的本地镜像
docker rmi 192.168.73.107/myproject-test/cirros:v2
 
//先退出当前用户,然后使用上述创建的账户 zhangsan 登录
docker logout 192.168.73.107
 
docker login 192.168.73.105
或
docker login -u zhangsan -p As12345678 http://192.168.73.107
 
//下载和上传镜像进行测试
docker pull 192.168.73.107/myproject-test/cirros:v2
 
docker tag cirros:latest 192.168.73.107/myproject-test/cirros:v3
docker push 192.168.73.107/myproject-test/cirros:v3

 (3)  Ver registros

Registro de interfaz web, registro de operaciones registra las operaciones relacionadas con el usuario en orden cronológico 

 (4) Modificar el archivo de configuración Harbor.cfg

要更改 Harbor的配置文件中的可选参数时,请先停止现有的 Harbor实例并更新 Harbor.cfg;然后运行 prepare 脚本来填充配置; 最后重新创建并启动 Harbor 的实例。
 
使用 docker-compose 管理 Harbor 时,必须在与 docker-compose.yml 相同的目录中运行。
cd /usr/local/harbor
docker-compose down -v
 
vim harbor.cfg            #只能修改可选参数
 
./prepare
 
docker-compose up -d
//如果有以下报错,需要开启防火墙 firewalld 服务解决
Creating network "harbor_harbor" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-b53c314f45e8 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))
 
systemctl restart firewalld.service
docker-compose up -d
 
 

(5) Elimine el contenedor del servicio Harbour conservando los datos/base de datos de la imagen y migréelo

//在Harbor服务器上操作
(1)移除 Harbor 服务容器
cd /usr/local/harbor
docker-compose down -v
 
(2)把项目中的镜像数据进行打包
//持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的/var/log/Harbor/目录下
ls /data/registry/docker/registry/v2/repositories/myproject-kgc
cd /data/registry/docker/registry/v2/repositories/myproject-kgc
tar zcvf kgc-registry.tar.gz ./*
 
6. 如需重新部署,需要移除 Harbor 服务容器全部数据
cd /usr/local/harbor
docker-compose down -v
rm -r /data/database
rm -r /data/registry

  5. Configuración de la máquina de respaldo del puerto

5.1 Instalar un puerto nuevamente 

Vuelva a encender un host y siga los pasos anteriores para instalar un servidor Harbor. 

 5.2 Proceso de copia 

(1) Agregar objeto de copia

Servidor (host a copiar): inicie sesión en el administrador de Harbour

Gestión de copias=》Destino=》+Destino=》Relleno de destino

Ingrese el nombre de usuario y la contraseña del host de la otra parte, espere la URL y pruebe la conexión. Si no hay ningún problema, puede confirmarlo. 

 (2) Seleccionar y copiar elementos 

 En el servidor:

Proyecto=》Haga clic en el nombre del proyecto a copiar=》Copiar=》+Copiar reglas

Escribe las reglas de copia y prueba la conexión, si es correcta podrás confirmarla.

 

 (3) Ver los elementos en la máquina de respaldo

Supongo que te gusta

Origin blog.csdn.net/Sp_Tizzy/article/details/132473647
Recomendado
Clasificación