您现在的位置是:主页 > news > 购买腾讯云 做网站/厦门seo
购买腾讯云 做网站/厦门seo
admin2025/5/15 10:04:32【news】
简介购买腾讯云 做网站,厦门seo,上海网站建设哪家好,安徽合肥网站建设前言: 在 Docker 中,当我们执行 docker pull xxx 的时候 ,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库。在工作中,我们不可能把企业项目push到公有仓库进行管理。所以…
前言:
在 Docker 中,当我们执行 docker pull xxx 的时候 ,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是Docker公司为我们提供的公共仓库。在工作中,我们不可能把企业项目push到公有仓库进行管理。所以为了更好的管理镜像,Docker不仅提供了一个中央仓库,同时也允许我们搭建本地私有仓库。这一篇介绍registry、harbor两种私有仓库搭建。
第一种:Registry搭建
1、关于Registry
官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候,我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。
Registry在github上有两份代码:老代码库和新代码库。老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。从2.0版本开始就到在新代码库进行开发,新代码库是采用go语言编写,修改了镜像id的生成算法、registry上镜像的保存结构,大大优化了pull和push镜像的效率。
官方在Docker hub上提供了registry的镜像(详情),我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。
2、Registry的部署
a. 运行下面命令获取registry镜像
docker pull registry
b. 将registry镜像运行并生成一个容器
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。
c. registry容器启动后,打开浏览器输入http://ip_add:5000/v2/,看到下面情况说明registry运行正常
3、测试上传镜像到Registry
通过将镜像push到registry来验证,首先将主机的registry镜像命名为符合仓库要求registry_url:port/dir/name:version的格式,通过docker tag命令来实现命名
docker tag registry:latest ip:5000/registry:latest
通过命令 docker images 查看本地镜像
上传Registry镜像到Registry仓库: docker push ip_add:5000/registry:latest:latest
注意:
可能会出现无法push镜像到私有仓库的问题。提示:
这是因为我们启动的registry服务不是安全可信赖的。这时需要修改客户端docker的配置文件/etc/docker/daemon.json,添加下面蓝色的内容(registry服务地址):
{"registry-mirrors": ["https://u5fun4hk.mirror.aliyuncs.com"],"insecure-registries":["192.168.0.233:5000"]
}
“registry-mirrors”: [“https://u5fun4hk.mirror.aliyuncs.com”] 是阿里云代理的Registry Hub仓库的地址,可以加快国内访问Registry Hub仓库的速度。
修改好之后需要重启Docker服务才能生效,执行命令:systemctl restart docker ,再push即可。
浏览器访问内容:
ftp查看内容:
4、切换另外一台服务器上,拉取该私有仓库中的镜像
docker pull 192.168.0.233:5000/registry:latest
结构:
原因:这时需要修改客户端docker的配置文件/etc/docker/daemon.json,把私有仓库的地址添加进去即可
{"registry-mirrors": ["https://u5fun4hk.mirror.aliyuncs.com"],"insecure-registries":["192.168.0.233:5000"]
}
这块代码配置是不是和push到私有仓库很像。配置完成,重启docker即可。
再次pull私有仓库的镜像,成功。
第二种:Harbor搭建
docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。
1、搭建
下载
地址:https://github.com/goharbor/harbor/releases 本文是有 v2.0.6
解压下载的安装包 harbor-offline-installer-v2.0.6.tgz
tar -xvf harbor-offline-installer-v2.0.6.tgz
注意:从2.0版本以上用的yml格式的配置方式,harbor的模板配置文件是harbor.yml.tmpl,拷贝一份 -> harbor.yml
2、配置https数字证书
a、需要的文件:
harbor.centos123.com.crt:服务器端的证书文件
harbor.centos123.com.key:服务器端的秘钥
ca.crt:客户端的证书文件
b、生成秘钥和自签名证书:
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt
这里的问题随便填写就行
c、生成证书签名请求(域名访问,就把common name的值写为域名):
openssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.centos123.com.key -out harbor.centos123.com.csr
d、生成服务器证书:
openssl x509 -req -days 365 -in harbor.centos123.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out harbor.centos123.com.crt
最终得到的是这样的目录:
e、安装证书:
将服务器需要的文件拷贝到一个目录下,我放在了 /etc/cert/harbor下面:
[root@biserver harbor]# mkdir -p /etc/cert/harbor
[root@biserver harbor]# cp harbor.centos123.com.crt harbor.centos123.com.key /etc/cert/harbor/
将配置文件harbor.yml也一起修改了:
#hostname 改为本地ip,非 Mac OS系统 可以不指定端口
hostname = harbor.centos123.com
#设置secretkey_path 的路径为 当前目录的data下
secretkey_path = ./data
通过运行 install.sh 构建镜像,并把服务启动起来:
./install.sh
注意:解压后的目录有install.sh脚本文件,进行初始操作,并构建镜像,和生成docker-compose.yml
登陆私有仓库:
首先配置host,然后在 /etc/docker/certs.d目录下创建目录,目录名称就是配置的hostname。然后将客户端证书放入该目录即可
echo "192.168.0.233 harbor.centos123.com" >> /etc/hosts
mkdir -p /etc/docker/certs.d/harbor.centos123.com
cp ca.crt /etc/docker/certs.d/harbor.centos123.com/
[root@biserver harbor]# docker login harbor.centos123.com
Username: admin
Password:
Error response from daemon: Get https://harbor.centos123.com/v2/: unauthorized: authentication required
出现unauthorized: authentication required,根据查找资料,需要修改harbor.yml配置:
记得重启容器:docker restart $(docker ps -aq)
在尝试登陆:成功
需要注意的是,非 Mac 用户只需要 修改 harbor.yml 中的 hostname ,就可以直接通过./install.sh 就可以构建镜像,并把服务启动起来。不需要 secretkey_path 和 下面 docker-compose.yml 的修改
修改 docker-compose.yml
因为harbor使用了很多目录挂载,Mac有很多目录是不允许挂载的,所以如果是Mac用户,需要修改docker-compose.yml 中的挂载目录,修改后的 docker-compose.yml 如下:
version: '2.3'
services:log:image: goharbor/harbor-log:v2.0.6container_name: harbor-logrestart: alwaysdns_search: .cap_drop:- ALLcap_add:- CHOWN- DAC_OVERRIDE- SETGID- SETUIDvolumes:- /var/log/harbor/:/var/log/docker/:z- type: bindsource: ./common/config/log/logrotate.conftarget: /etc/logrotate.d/logrotate.conf- type: bindsource: ./common/config/log/rsyslog_docker.conftarget: /etc/rsyslog.d/rsyslog_docker.confports:- 127.0.0.1:1514:10514networks:- harborregistry:image: goharbor/registry-photon:v2.0.6container_name: registryrestart: alwayscap_drop:- ALLcap_add:- CHOWN- SETGID- SETUIDvolumes:- /data/registry:/storage:z- ./common/config/registry/:/etc/registry/:z- type: bindsource: /data/secret/registry/root.crttarget: /etc/registry/root.crt- type: bindsource: ./common/config/shared/trust-certificatestarget: /harbor_cust_certnetworks:- harbordns_search: .depends_on:- loglogging:driver: "syslog"options:syslog-address: "tcp://127.0.0.1:1514"tag: "registry"registryctl:image: goharbor/harbor-registryctl:v2.0.6container_name: registryctlenv_file:- ./common/config/registryctl/envrestart: alwayscap_drop:- ALLcap_add:- CHOWN- SETGID- SETUIDvolumes:- /data/registry:/storage:z- ./common/config/registry/:/etc/registry/:z- type: bindsource: ./common/config/registryctl/config.ymltarget: /etc/registryctl/config.yml- type: bindsource: ./common/config/shared/trust-certificatestarget: /harbor_cust_certnetworks:- harbordns_search: .depends_on:- loglogging:driver: "syslog"options:syslog-address: "tcp://127.0.0.1:1514"tag: "registryctl"postgresql:image: goharbor/harbor-db:v2.0.6container_name: harbor-dbrestart: alwayscap_drop:- ALLcap_add:- CHOWN- DAC_OVERRIDE- SETGID- SETUIDvolumes:- /data/database:/var/lib/postgresql/data:znetworks:harbor:dns_search: .env_file:- ./common/config/db/envdepends_on:- loglogging:driver: "syslog"options:syslog-address: "tcp://127.0.0.1:1514"tag: "postgresql"core:image: goharbor/harbor-core:v2.0.6container_name: harbor-coreenv_file:- ./common/config/core/envrestart: alwayscap_drop:- ALLcap_add:- SETGID- SETUIDvolumes:- /data/ca_download/:/etc/core/ca/:z- /data/:/data/:z- ./common/config/core/certificates/:/etc/core/certificates/:z- type: bindsource: ./common/config/core/app.conftarget: /etc/core/app.conf- type: bindsource: /data/secret/core/private_key.pemtarget: /etc/core/private_key.pem- type: bindsource: /data/secret/keys/secretkeytarget: /etc/core/key- type: bindsource: ./common/config/shared/trust-certificatestarget: /harbor_cust_certnetworks:harbor:dns_search: .depends_on:- log- registry- redis- postgresqllogging:driver: "syslog"options:syslog-address: "tcp://127.0.0.1:1514"tag: "core"portal:image: goharbor/harbor-portal:v2.0.6container_name: harbor-portalrestart: alwayscap_drop:- ALLcap_add:- CHOWN- SETGID- SETUID- NET_BIND_SERVICEnetworks:- harbordns_search: .depends_on:- loglogging:driver: "syslog"options:syslog-address: "tcp://127.0.0.1:1514"tag: "portal"jobservice:image: goharbor/harbor-jobservice:v2.0.6container_name: harbor-jobserviceenv_file:- ./common/config/jobservice/envrestart: alwayscap_drop:- ALLcap_add:- CHOWN- SETGID- SETUIDvolumes:- /data/job_logs:/var/log/jobs:z- type: bindsource: ./common/config/jobservice/config.ymltarget: /etc/jobservice/config.yml- type: bindsource: ./common/config/shared/trust-certificatestarget: /harbor_cust_certnetworks:- harbordns_search: .depends_on:- corelogging:driver: "syslog"options:syslog-address: "tcp://127.0.0.1:1514"tag: "jobservice"redis:image: goharbor/redis-photon:v2.0.6container_name: redisrestart: alwayscap_drop:- ALLcap_add:- CHOWN- SETGID- SETUIDvolumes:- /data/redis:/var/lib/redisnetworks:harbor:dns_search: .depends_on:- loglogging:driver: "syslog"options:syslog-address: "tcp://127.0.0.1:1514"tag: "redis"proxy:image: goharbor/nginx-photon:v2.0.6container_name: nginxrestart: alwayscap_drop:- ALLcap_add:- CHOWN- SETGID- SETUID- NET_BIND_SERVICEvolumes:- ./common/config/nginx:/etc/nginx:z- type: bindsource: ./common/config/shared/trust-certificatestarget: /harbor_cust_certnetworks:- harbordns_search: .ports:- 9090:8080depends_on:- registry- core- portal- loglogging:driver: "syslog"options:syslog-address: "tcp://127.0.0.1:1514"tag: "proxy"
networks:harbor:external: false
查看docker运行的镜像:
浏览器访问:https://harbor.centos123.com/ 前提你要在访问电脑配置hosts中配置harbor.centos123.com
默认用户:admin,密码:Harbor12345
登录harbor,可以看到有一个预置的项目,library
上传镜像到私有仓库:
docker tag registry:latest harbor.centos123.com/library/registry:latest
[root@biserver harbor]# docker push harbor.centos123.com/library/registry:latest
The push refers to repository [harbor.centos123.com/library/registry]
fb6b1a93008f: Pushed
6d2d8cb41f01: Pushed
4f5aa08c5eaa: Pushed
8ebb9d6ed165: Pushed
0fcbbeeeb0d7: Pushed
latest: digest: sha256:a0dd61073ad21122e5f1517682800272ef29df52041aaea7ee29e92a5d22aa28 size: 1363
可以查看harbor镜像仓库:
另一台电脑pull该harbor私有仓库镜像:
1、配置 vim /etc/docker/daemon.json 重启docker:systemctl restart docker
2、添加hosts 中添加harbor.centos123.com
[root@localhost home]# docker pull harbor.centos123.com/library/registry:latest
latest: Pulling from library/registry
Digest: sha256:a0dd61073ad21122e5f1517682800272ef29df52041aaea7ee29e92a5d22aa28
Status: Downloaded newer image for harbor.centos123.com/library/registry:latest
harbor.centos123.com/library/registry:latest
结果:成功
参考:
https://www.cnblogs.com/huanchupkblog/p/10843800.html
https://blog.csdn.net/caohongshuang/article/details/85320939
https://blog.csdn.net/weixin_43952432/article/details/100577560
https://blog.csdn.net/a1017680279/article/details/108869004
https://blog.csdn.net/qq_39314099/article/details/105710428