Docker harbor私有仓库部署与管理

目录

1.Docker搭建本地私有仓库

   1.首先下载 registry 镜像

2.在 daemon.json 文件中添加私有镜像仓库地址

3. 运行 registry 容器

4.为镜像打标签

5.上传到私有仓库

6.列出私有仓库的所有镜像

7.列出私有仓库的centos镜像有哪些tag

8.先删除原有的centos的镜像,再测试私有仓库下载

2.Docker--harbor私有仓库部署与管理

 1.Harbor 简介

2.Harbor 部署

3.启动 Harbor

4.查看 Harbor 启动镜像

5.创建一个新项目

6.在其他客户端上传镜像

3.维护管理Harbor

  1. 通过 Harbor Web 创建项目

2. 创建 Harbor 用户

3. 查看日志

4. 修改 Harbor.cfg 配置文件

5. 移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移

 6. 如需重新部署,需要移除 Harbor 服务容器全部数据


1.Docker搭建本地私有仓库

        有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,这点跟Maven的管理类似。
使用私有仓库有许多优点:

(1)节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;

(2)提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。

   1.首先下载 registry 镜像

docker pull registry

2.在 daemon.json 文件中添加私有镜像仓库地址

vim /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.156.120:5000"],         #添加,注意逗号结尾
  "registry-mirrors": ["https://61jb8ubo.mirror.aliyuncs.com"]
}
 
systemctl restart docker.service

3. 运行 registry 容器

docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
 
 
-itd:  在容器中打开一个伪终端进行交互操作,并在后台运行
-v:    把宿主机的/data/registry目录绑定到容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化
-p:    映射端口,访问宿主机的5000端口就访问到registry容器的服务了
--restart=always:  这是重启的策略,在容器退出时总是重启容器
--name registry:   创建容器命名为registry
registry:latest:   这是刚才pull下来的镜像

Docker容器的重启策略如下:

no:默认策略,在容器退出时不重启容器

on-failure:在容器非正常退出时(退出状态非0),才会重启容器

on-failure:3 在容器非正常退出时重启容器,最多重启3次

always:在容器退出时总是重启容器

unless-stopped: 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

4.为镜像打标签

    如果不对私有仓库命名的话,默认走的是公共仓库(docker hub),所以需要命名镜像。

    私有仓库镜像的命名规则:宿主机ip地址:端口号/xxxx(需要更改的名称)

     注意:当你对源镜像进行命名后,命名后的镜像名称也视为一个标签,因为id号是相同的。如果当源镜像删除,命名后的镜像依然会存在,因为删除的是一个标签。

docker tag centos:7 192.168.156.120:5000/centos:v1

5.上传到私有仓库

docker push 192.168.156.120:5000/centos:v1

6.列出私有仓库的所有镜像

curl http://192.168.156.120:5000/v2/_catalog

 

7.列出私有仓库的centos镜像有哪些tag

curl http://192.168.156.120:5000/v2/centos/tags/list

8.先删除原有的centos的镜像,再测试私有仓库下载

docker rmi 192.168.156.120:5000/centos:v1
docker pull 192.168.156.120:5000/centos:v1

2.Docker--harbor私有仓库部署与管理

 1.Harbor 简介

    1.什么是Harbor
        Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。

        Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。

        Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 docker-compose 来对它进行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。

   2.Harbor的特性
     (1) 基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。

    (2)基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步)。

    (3)支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对已经存在的用户认证和管理。

   (4)镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。

   (5)图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。

   (6)审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。

   (7)支持 RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。

  (8)Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。
 

3.Harbor的构成
        Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。

(1)Proxy: Harbor 的 Registry、UI、Token 服务等组件,都处在 nginx 反向代理后边。该代理将来自浏览器、docker clients 的请求转发到后端不同的服务上。

(2)Registry: 负责储存 Docker 镜像,并处理 Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对 Docker 镜像 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的每次 Docker pull/push 请求都要携带一个合法的 Token, Registry 会通过公钥对 Token 进行解密验证。

(3)Core services: Harbor的核心功能,主要提供以下3个服务:
1)UI(harbor-ui): 提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。
2)WebHook:为了及时获取Registry 上image 状态变化的情况,在Registry 上配置 Webhook,把状态变化传递给 UI 模块。
3)Token 服务:负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求, 如果不包含 Token,会被重定向到 Token 服务,获得 Token 后再重新向 Registry 进行请求。

(4)Database(harbor-db):为core services提供数据库服务,负责储存用户权限、审计日志、Docker 镜像分组信息等数据。

(5)Job services: 主要用于镜像复制,本地镜像可以被同步到远程 Harbor 实例上。

(6)Log collector(harbor-log): 负责收集其他组件的日志到一个地方。

Harbor 的每个组件都是以 Docker 容器的形式构建的,因此,使用 Docker Compose 来对它进行部署。

        总共分为7个容器运行,通过在docker-compose.yml所在目录中执行 docker-compose ps 命令来查看, 名称分别为:nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。

        其中 harbor-adminserver 主要是作为一个后端的配置数据管理,并没有太多的其他功能。harbor-ui 所要操作的所有数据都通过 harbor-adminserver 这样一个数据配置管理中心来完成。

2.Harbor 部署

  1.环境准备

Harbor服务器192.168.156.120docker-ce、docker-compose、harbor-offline-v1.2.2
client服务器192.168.156.130docker-ce

  2.部署 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

3.部署 Harbor 服务

下载Harbor 安装程序

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/

4.修改harbor安装的配置文件

vim /usr/local/harbor/harbor.cfg
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.156.120
--59行--指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345
harbor_admin_password = Harbor12345

关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数

1、所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbour, 参数将生效。具体参数如下:

●hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.80.10 或 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。

●harbour_admin_password:管理员的初始密码,只在 Harbour 第一次启动时生效。之后, 此设置将被忽略,并且应在 UI 中设置管理员的密码。请注意,默认的用户名/密码是admin/Harbor12345。

●auth_mode:使用的认证类型,默认情况下,它是 db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为 ldap_auth。

●self_registration:启用/禁用用户注册功能。禁用时,新用户只能由 Admin 用户创建,只有管理员用户可以在 Harbour 中创建新用户。注意:当 auth_mode 设置为 ldap_auth 时,自注册功能将始终处于禁用状态,并且该标志被忽略。

●Token_expiration:由令牌服务创建的令牌的到期时间(分钟),默认为 30 分钟。

●project_creation_restriction:用于控制哪些用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目。如果将其值设置为“adminonly”,那么只有 admin 可以创建项目。

●verify_remote_cert:打开或关闭,默认打开。此标志决定了当Harbor与远程 register 实例通信时是否验证 SSL/TLS 证书。 将此属性设置为 off 将绕过 SSL/TLS 验证,这在远程实例具有自签名或不可信证书时经常使用。

另外,默认情况下,Harbour 将镜像存储在本地文件系统上。在生产环境中,可以考虑 使用其他存储后端而不是本地文件系统,如 S3、Openstack Swif、Ceph 等对象存储。但需要更新 common/templates/registry/config.yml 文件。

3.启动 Harbor

cd /usr/local/harbor/
./install.sh

4.查看 Harbor 启动镜像

docker-compose ps

5.创建一个新项目

(1)浏览器访问:http://192.168.156.120登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345

(2)输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮

(3)填写项目名称为“lhf”,点击“确定”按钮,创建新项目

(4)此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,Registry 服务器在端口 80 上侦听。

1)登录 Harbor

docker login http://127.0.0.1   输入用户名和密码admin和Harbor12345

2)下载镜像进行测试 

docker pull nginx

3)将镜像打标签

格式:docker tag 镜像:标签 仓库IP/项目名称/镜像名:标签
docker tag nginx:latest 127.0.0.1/ly/nginx:v1

4)上传镜像到 Harbor

docker push 127.0.0.1/lhf/nginx:v1

 5)在 Harbor 界面 lhf 目录下可看见此镜像及相关信息 

6.在其他客户端上传镜像

        以上操作都是在 Harbor 服务器本地操作。如果其他客户端登录到 Harbor,就会报如下错误。出现这问题的原因为Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。

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

(1)在 Docker 客户端配置操作

  方法一:解决办法是:在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问。

解决办法是:
第一种:在Docker server启动的时候,增加启动参数,默认使用 HTTP 访问。
vim /usr/lib/systemd/system/docker.service
--13行--修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.156.120 --containerd=/run/containerd/containerd.sock
或
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.156.120
第二种:vim /etc/ docker/daemon.json
{
"insecure-registries": ["192.168.156.120"],
#添加,注意用逗号结尾
"registry-mirr

(2)重启 Docker,再次登录

systemctl daemon-reload
systemctl restart docker

(3)再次登录Harbor

docker login -u admin -p Harbor12345 http://192.168.156.120
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 

(4)下载镜像进行测试

docker pull 192.168.156.120/lhf/nginx:v1

(5)上传镜像进行测试

docker pull cirrosdocker pull cirros
docker tag cirros:latest 192.168.156.120/lhf/cirros:v2
docker push 192.168.156.120/lhf/cirros:v2

(6) 刷新 Harbor 的 Web 管理界面进行查看,会发现lhf项目里面有两个镜像

3.维护管理Harbor

  1. 通过 Harbor Web 创建项目

        在 Harbor 仓库中,任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。单击“+项目”,填写项目名称,项目级别若设置为"私有",则不勾选。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与 Docker Hub 一致。

 

2. 创建 Harbor 用户

(1)创建用户并分配权限

        在 Web 管理界面中单击系统管理 -> 用户管理 -> +用户,填写用户名为“lili”,邮箱为“ysh@qq.com”,全名为“ysh”,密码为“Abc123456”,注释为“管理员”(可省略)。附:用户创建成功后,单击左侧“...”按钮可将上述创建的用户设置为管理员角色或进行删除操作,本例不作任何设置。

 

(2)添加项目成员
    单击项目 ->ly-> 成员 -> + 成员,填写上述创建的用户lili并分配角色为“开发人员”。

     附:此时单击左侧“...”按钮仍然可对成员角色进行变更或者删除操作.

 

(3)在客户端上使用普通账户操作镜像

    1)删除上述打标签的本地镜像

docker rmi 192.168.156.120/lhf/cirros:v2

2)先退出当前用户,然后使用上述创建的账户ysh登录 

docker logout 192.168.156.120
 
docker login 192.168.156.120
或
docker login -u lili -p Abc123456 http://192.168.156.120

3)下载和上传镜像进行测试 

docker pull 192.168.156.120/lhf/cirros:v2
 
docker tag cirros:latest 192.168.156.120/lhf/cirros:v3
docker push 192.168.156.120/lhf/cirros:v3

3. 查看日志

Web 界面日志,操作日志按时间顺序记录用户相关操作

4. 修改 Harbor.cfg 配置文件

  要更改 Harbour的配置文件中的可选参数时,请先停止现有的 Harbor实例并更新 Harbor.cfg;然后运行 prepare 脚本来填充配置; 最后重新创建并启动 Harbour 的实例。

使用 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.

 

 

5. 移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移

 在Harbor服务器上操作

(1)移除 Harbor 服务容器

docker-compose down -v

(2)把项目中的镜像数据进行打包

持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的/var/log/harbor/目录下

ls /data/registry/docker/registry/v2/repositories/lhf
cd /data/registry/docker/registry/v2/repositories/lhf 
tar zcvf lhf.tar.gz ./*

 

 6. 如需重新部署,需要移除 Harbor 服务容器全部数据

cd /usr/local/harbor
docker-compose down -v
rm -r /data/database
rm -r /data/registry

再次关闭服务并开启服务,然后在查看web界面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/14057.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TCP协议的相关特性(续)

TCP协议的相关特性 🔎滑动窗口🔎流量控制🔎拥塞控制🔎延时应答🔎捎带应答🔎面向字节流(粘包问题)🔎异常情况🔎总结 关于 确认应答 超时重传, 连接管理 请参考: 点击这里 &#x1f5…

【场景生成与削减】基于蒙特卡洛法场景生成及启发式同步回带削减风电、光伏、负荷研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

无人机遥感影像应用

目录 一、无人机遥感技术 二、无人机遥感影像数据生产 三、无人机遥感影像应用 一、无人机遥感技术 1.无人机遥感系统组成 1.1无人机遥感系统组成—无人机平台 1.2无人机遥感系统组成—传感器 2.无人机遥感技术的特点 高时效性:准确并快速获取地表数据 高分辨率…

[强化学习]学习路线和关键词拾零

强化学习学习方法和路线 学习路线 先从基础教材开始,构建RL的知识框架,熟悉关键名词和公式推导,扩展到Model-Free的Value-Based和Policy-Based方法,同时参考github的代码练习。接下来精读几篇经典论文,如DQN,PPO等。…

Python高光谱遥感数据处理与机器学习

Python高光谱遥感数据处理与机器学习 第一章、高光谱基础 高光谱遥感简介 什么是高光谱遥感? 高光谱遥感为什么重要? 高光谱遥感与其他遥感技术的区别是什么? 高光谱遥感的历史和发展 高光谱传感器与数据获取 高光谱传感器类型 如何获…

ai改写句子软件-ai改写

AI免费伪原创:助力网站内容升级 您是否曾经为网站优化而烦恼,无论是内容更新还是SEO优化,都需要大量的时间和精力。但是,您是否知道,现在有一款能够使用AI技术来帮助您完成这些任务,而且还是免费的呢&…

瑞吉外卖-项目笔记

文章目录 1.业务开发day011.软件开发整体介绍2.项目整体介绍:star:3.开发环境搭建4.登录功能:star4.1代码实现 5.退出功能6.页面效果出现 day021.完善登录功能2.新增员工功能 1.业务开发 day01 1.软件开发整体介绍 2.项目整体介绍⭐️ 后端:管理菜品和…

基于web的病号康复训练系统asp.net+sqlserver+C#

本系统主要内容分为病号管理模块,康复师管理模块,管理员管理模块等三大模块 1,病号管理模块主要分为:用户管理,在线问答,在线预约,用户中心,信息查询. 2. 康复师管理模块主要有:康复师信息管理,病人信息管理,预约信息管理,留言信息管理,训练计…

< elementUi组件封装: 通过 el-tag、el-popover、vue动画等实现公告轮播 >

文章目录 👉 前言👉 一、效果演示👉 二、实现思路👉 三、实现案例往期内容 💨 👉 前言 在 Vue elementUi 开发中,遇到这么一个需求,要实现公告轮播的效果。说实话,一开…

C++、STL标准模板库和泛型编程 ——迭代器、 算法、仿函数(侯捷)

C、STL标准模板库和泛型编程 ——迭代器、 算法、仿函数 (侯捷) 迭代器iterator_category 算法accumulatefor_eachreplacecountfindsortbinary_search 仿函数 functors(六大部件中最简单的一种!) 使用一个东西,却不明白它的道理&a…

Android类似微信首页的页面开发教程(Kotlin)二

前提条件 安装并配置好Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built on February 17, 2023 Runtime version: 11.0.150-b2043.56-9505619 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 …

【Vue】学习笔记-Vue生命周期

引出生命周期 生命周期 a.又名生命周期回调函数、生命周期函数、生命周期钩子 b.是什么:vue 在关键时刻帮助我们调用一些特殊名称的函数 c.生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的 d.生命周期函数中的this指向是vm或组件实…

拷贝构造与深浅拷贝

文章目录 一、拷贝构造函数二、拷贝初始化三、深浅拷贝 一、拷贝构造函数 如果一个构造函数的第一个参数是自身类型的引用,而且任何额外参数都有默认值,则此构造函数是拷贝构造函数。 class person { public: person(); //默认构造函数 pe…

米文动力 EVO Orin 刷机和克隆操作说明

刷机说明 博主在卸载 cuda 以及 python 后重启后黑屏无法显示,重刷系统才恢复正常。 下载 EVO Orin 用户手册(官网没有,所以上传到 CSDN 供下载)官网下载 EVO Orin 镜像文件 使用 tar -xvf 解压下载的 bootloader 和镜像包得到 …

计算机办公自动化——Python批量生成请假条

Python使用openpyxl、docx批量生成请假条 前言第三方库的安装示例代码运行效果 前言 加入你有一个下图所示的表格,需要批量生成他们的请假条,你会选择如何做呢?是一步一步的手打,还是呼唤请假人手打呢? 下面我们来看…

react中前端同学如何模拟使用后端接口操作数据?

为什么前端同学需要模拟后端数据 作为一个前端,在实现项目功能的时候,需要在前端写一个静态的json数据,进行测试。 项目中后端的接口往往是较晚才会出来,并且还要写接口文档,于是我们的前端的许多开发都要等到接口给…

基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析

生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用,是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估(Millennium ecosystem assessment,MA)提出生态系统服务包括供给、调节、…

[pgrx开发postgresql数据库扩展]4.基本计算函数的编写与性能对比

前言 再次声明: 并不是所有场景都需要(或者适合)用rust来写的,绝大部分操作数据库的功能和计算,用SQL就已经足够了! 本系列中,所有的案例,仅用于说明pgrx的能力,而并非…

Docker --- 简介、安装

一、什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会…

基于Java+SpringBoot+vue学生学习平台详细设计实现

基于JavaSpringBootvue学生学习平台详细设计实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目…