自学内容网 自学内容网

Docker私有仓库部署与管理

目录

一、如何搭建本地的私有仓库

1.首先下载registry

2、再为镜像打标签

3.上传到私有仓库

​编辑

4、列出私有仓库的所有镜像

5、列出私有仓库有Centos镜像有哪些tag

6、先删除原有的Centos的镜像,再测试私有仓库下载、

​编辑

二、什么是harbor(特性,构成,架构的数据流向)

2.1什么是Harbor

2.2 harbor的特性

2.3harbor的构成

三、Harbor部署以及配置文件

1. 部署 Docker-Compose 服务

2. 部署 Harbor 服务

(1)下载或上传 Harbor 安装程序

(2)因为软件包的问题,先搞个自证证书

(3)修改harbor安装的配置文件

(4)

(5) 查看 Harbor 启动镜像

3.创建一个新的项目

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

四、如何去运维管理我们的harbor项目

1. 通过 Harbor Web 创建项目

2. 创建 Harbor 用户

3. 查看日志

4. 修改 Harbor.cfg 配置文件

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

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


一、如何搭建本地的私有仓库

1.首先下载registry

[root@docker ~]# docker pull registry

[root@docker ~]# docker images

然后编辑加速器文本

[root@docker ~]# vim /etc/docker/daemon.json



{

  "registry-mirrors": ["https://n1x922iy.mirror.aliyuncs.com"],

  "insecure-registries": ["192.168.80.115:5000"]

}

[root@docker ~]# systemctl restart docker.service

然后再运行registry

[root@docker ~]# docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest

[root@docker ~]# docker ps -a

CONTAINER ID   IMAGE             COMMAND                   CREATED         STATUS         PORTS                                       NAMES

f281d844638e   registry:latest   "/entrypoint.sh /etc…"   5 seconds ago   Up 5 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry

2、再为镜像打标签

[root@docker ~]# docker tag centos:7 192.168.80.115:5000/centos:test1

[root@docker ~]# docker images

3.上传到私有仓库

[root@localhost docker]# docker push 192.168.234.210:5000/centos:v1

The push refers to repository [192.168.234.210:5000/centos]

174f56854903: Pushed

v1: digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f size: 529

4、列出私有仓库的所有镜像

[root@localhost docker]# curl http://192.168.234.210:5000/v2/_catalog

{"repositories":["centos"]}

5、列出私有仓库有Centos镜像有哪些tag

[root@localhost docker]# curl http://192.168.234.210:5000/v2/centos/tags/list

{"name":"centos","tags":["v1"]}

[root@localhost docker]#

6、先删除原有的Centos的镜像,再测试私有仓库下载、

[root@localhost docker]# docker images

REPOSITORY                    TAG       IMAGE ID       CREATED         SIZE

registry                      latest    75ef5b734af4   12 months ago   25.4MB

192.168.234.210:5000/centos   v1        eeb6ee3f44bd   3 years ago     204MB

centos                        7         eeb6ee3f44bd   3 years ago     204MB

[root@localhost docker]# docker rmi -f eeb6ee3f44bd

Untagged: 192.168.234.210:5000/centos:v1

Untagged: 192.168.234.210:5000/centos@sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f

Untagged: centos:7

Untagged: centos@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4

Deleted: sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9

Deleted: sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02

[root@localhost docker]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE

registry     latest    75ef5b734af4   12 months ago   25.4MB

[root@localhost docker]# docker pull 192.168.234.210:5000/centos:v1

v1: Pulling from centos

2d473b07cdd5: Pull complete

Digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f

Status: Downloaded newer image for 192.168.234.210:5000/centos:v1

192.168.234.210:5000/centos:v1

[root@localhost docker]# docker images

REPOSITORY                    TAG       IMAGE ID       CREATED         SIZE

registry                      latest    75ef5b734af4   12 months ago   25.4MB

192.168.234.210:5000/centos   v1        eeb6ee3f44bd   3 years ago     204MB

二、什么是harbor(特性,构成,架构的数据流向)

2.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。

总之:harbor可以理解是一个储存镜像的仓库

2.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做了封装,扩展了自己的业务模板。

2.3harbor的构成

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

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

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

认证的方式有三种:令牌,用户密码,ssl

●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 进行请求。

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

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

●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 这样一个数据配置管理中心来完成。

数据流程图

  1. proxy:这个proxy就是将浏览器,docker client的请求转发到后端不同的服务上,后端的服务有registry ,UI, token等服务组件
  2. Registry :主要是负责储存Docker镜像的,另一方面就是解密验证,要求携带一个合法的Token
  3. Core service:有3个服务,分别是UI,它是提供图形化界面,帮助用户管理registry上面的镜像,并对用户进行授权,第二个就是webhook,她可以即使获取registry上面的状态变化的情况,然后再将状态变化传递给UI模块。第三个服务就是token服务,只要你有token,我就可以让你docker push/pull的权限
  4. Database :为core services提供数据库服务,负责存储用户权限,审计日志,docker镜像分组信息等数据
  5. job service 与远程端harbor实例相同步
  6. Log collector:负责收集其他组件的日志

三、Harbor部署以及配置文件

注意:本地的私有仓库要关掉。会报错

[root@localhost ~]# docker images

REPOSITORY                    TAG       IMAGE ID       CREATED         SIZE

registry                      latest    75ef5b734af4   12 months ago   25.4MB

192.168.234.210:5000/centos   v1        eeb6ee3f44bd   3 years ago     204MB

[root@localhost ~]# docker ps

CONTAINER ID   IMAGE             COMMAND                   CREATED             STATUS         PORTS                                       NAMES

f281d844638e   registry:latest   "/entrypoint.sh /etc…"   About an hour ago   Up 4 minutes   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry

[root@localhost ~]# docker stop f281d844638e

f281d844638e

[root@localhost ~]# docker stop registry

registry

所需参数是在安装之前配置,安装之后配置后就没有用了

1. 部署 Docker-Compose 服务

//下载或者上传 Docker-Compose

chmod +x /usr/local/bin/docker-compose



docker-compose --version

2. 部署 Harbor 服务

(1)下载或上传 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/

(2)因为软件包的问题,先搞个自证证书

#1 创建 ca.key

openssl genrsa -out ca.key 4096

#2 创建 ca.crt

openssl req -x509 -new -nodes -sha512 -days 365 \

 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=Harbor Root CA" \

 -key ca.key \

 -out ca.crt



#3 创建 hub.laijuba.com.key

openssl genrsa -out hub.laijuba.com.key 4096

#4 创建 hub.laijuba.com.csr

openssl req -sha512 -new \

    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=hub.laijuba.com" \

    -key hub.laijuba.com.key \

    -out hub.laijuba.com.csr



#4 构建用于域名配置的 v3.ext 文件

cat > v3.ext <<-EOF

authorityKeyIdentifier=keyid,issuer

basicConstraints=CA:FALSE

keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

extendedKeyUsage = serverAuth

subjectAltName = @alt_names



[alt_names]

DNS.1=hub.laijuba.com

EOF



#5 构建 hub.laijuba.com.crt

openssl x509 -req -sha512 -days 3650 \

    -extfile v3.ext \

    -CA ca.crt -CAkey ca.key -CAcreateserial \

    -in hub.laijuba.com.csr \

    -out hub.laijuba.com.crt



#6 构建 hub.laijuba.com.cert

openssl x509 -inform PEM -in hub.laijuba.com.crt -out hub.laijuba.com.cert

要解压什么的,这里就不赘述了

(3)修改harbor安装的配置文件

vim /usr/local/harbor/harbor.cfg

--5行--修改,设置为Harbor服务器的IP地址或者域名

hostname = hub.wam.com

--59行--指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345

harbor_admin_password = 123456

还有路径

(4)

# 创建 /opt/harbor/ssl 目录

mkdir ssl

# 拷贝证书

cp ../hub.laijuba.com.crt ../hub.laijuba.com.key ssl/



# 执行安装

./install.sh

(5) 查看 Harbor 启动镜像

cd /usr/local/harbor/

docker-compose ps

3.创建一个新的项目

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

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

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

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

//登录 Harbor

docker login [-u admin -p 123456] http://127.0.0.1

//下载镜像进行测试

docker pull nginx

//将镜像打标签

格式:docker tag 镜像:标签  仓库IP/项目名称/镜像名:标签

docker tag nginx:latest 127.0.0.1/myproject-kgc/nginx:v1

//上传镜像到 Harbor

docker push 127.0.0.1/myproject-kgc/nginx:v1

在 Harbor 界面 myproject-kgc 目录下可看见此镜像及相关信息

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

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

docker login -u admin -p Harbor12345 http://192.168.10.23

WARNING! Using --password via the CLI is insecure. Use --password-stdin.

Error response from daemon: Get https://192.168.10.23/v2/: dial tcp 192.168.10.23:443: connect: connection refused

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

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

vim /usr/lib/systemd/system/docker.service

--13行--修改

ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.234.210 --containerd=/run/containerd/containerd.sock

或

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.234.210



//重启 Docker,再次登录

systemctl daemon-reload

systemctl restart docker



//再次登录 Harbor

docker login -u admin -p 123456 http://192.168.234.210

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



//下载镜像进行测试

docker pull 192.168.234.210/myproject-kgc/nginx:v1



//上传镜像进行测试

docker pull cirros

docker tag cirros:latest 192.168.234.210/myproject-kgc/cirros:v2

docker push 192.168.234.210/myproject-kgc/cirros:v2

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

四、如何去运维管理我们的harbor项目

公有不需要执行“Docker login”即可下载镜像

1. 通过 Harbor Web 创建项目

在 Harbor 仓库中,任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。

单击“+项目”,填写项目名称,项目级别若设置为"私有",则不勾选。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与 Docker Hub 一致。

2. 创建 Harbor 用户

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

在 Web 管理界面中单击系统管理 -> 用户管理 -> +用户,

填写用户名为“kgc-zhangsan”,邮箱为“kgc-zhangsan@kgc.com”,全名为“zhangsan”,密码为“Abc123456”,注释为“管理员”(可省略)。

附:用户创建成功后,单击左侧“...”按钮可将上述创建的用户设置为管理员角色或进行删除操作,本例不作任何设置。

(2)添加项目成员

单击项目 -> myproject-kgc-> 成员 -> + 成员,填写上述创建的用户 kgc-zhangsan 并分配角色为“开发人员”。

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

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

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

docker rmi 192.168.10.23/myproject-kgc/cirros:v2

//先退出当前用户,然后使用上述创建的账户 kgc-zhangsan 登录

docker logout 192.168.10.23



docker login 192.168.10.23

或

docker login -u kgc-zhangsan -p Abc123456 http://192.168.10.23



//下载和上传镜像进行测试

docker pull 192.168.10.23/myproject-kgc/cirros:v2



docker tag cirros:latest 192.168.10.23/myproject-kgc/cirros:v3

docker push 192.168.10.23/myproject-kgc/cirros:v3

3. 查看日志

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

4. 修改 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. 移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移

//在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


原文地址:https://blog.csdn.net/shuaianm/article/details/142997524

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!