Docker之注册中心的使用与操作

一、Docker注册中心与仓库

Reastry 可译为注册中心注册服务器,是存放仓库的地方一个注册中心往往有很多仓库。Docker默认的注册中心是Docker Hub ,其可以通过浏览器访问,也可以使用docker search命令访问。

仓库是集中存放镜像文件的地方 。每个仓库集中存放某一类镜像,往往包括多个镜像文件,不同的摊像通过不同的标签来区分,并通过"仓库名:标签"格式指定特定版本的镜像。

仓库名经常以两段的格式出现,如gitlab/gitlab-ce ,前者是命名空间,后者是仓库名

根据所存储的镜像文件是否公开共享,可以将Docker仓库分为公开仓库私有仓库

二、Docker Hub

Docker Hub 是一个基于云的注册中心,它为镜像的检索、发布和变更管理、用户和团队协作、开发流程的自动化提供了集中式的资源服务,其主要功能:

  • 镜像仓库:上传和下载容器镜像
  • 团队和组织:管理对容器镜像的私有仓库的访问。
  • 官方镜像:下载和使用由Docker 官方提供的高质量容器镜像。
  • 发布者镜像:下载和使用由外部供应商提供的高质量容器镜像。
  • 构建:从GitHub和Bitbucket这两个源代码托管平台自动构建容器镜像并将它们上传到Docker一山,当对源代码库进行修改时,会自动构建一个新镜像。
  • Webhooks:这是一个自动化构建特性,在一个镜像上传成功后,Webhooks 会触发操作,将Dncker Hub与其他服务进行整合。

根据镜像仓库的内容将它们分为顶级镜像仓库次级镜像仓库

三、官方仓库

Docker Hub包括大量的由厂商和贡献者向Docker提供的公开的、经过认证的仓库,能够确保仓库及时进行安全更新。因此,官方仓库有以下用途:

  • 提供必要的基础 OS 镜像仓库(如 UbuntuCentOS),作为大多数用户构建镜像的起点。
  • 为流行的编程语言运行时、数据存储和其他服务提供类似于**平台即服务(PaaS)**所提供的解决方案。
  • 作为学习Dockerfile的最佳实践,提供清晰的文档供其他Dockerfile作者参考。
  • 确保及时的安全更新

四、镜像加速器

Docker Hub 部署在境外 服务器中,在国内访问可能会受到影响。为解决此问题,需要配置相应的国内镜像源来提高镜像的下载速度和稳定性。目前国内提供的 Docker Hub 镜像服务主要有阿里云加速器DaoCloud网易云镜像仓库时速云镜像服务等。

Docker 官方也提供了在我国的加速器,不用注册,直接使用加速器地址即可使用。使用该加速器的基本配置方法是修改**/etc/docker/daemon.json**文件,在其中加上以下语句。

cs 复制代码
 "registry-mirros":["https://registry.docker-cn.com"]
 ​
 # 保存退出后重启Docker,使配置生效
 systemctl daemon-reload
 systemctl restart docker

五、创建Docker Hub账号

自行查阅..........

六、使用第三方Docker注册中心

除了Docker Hub之外,如阿里云------容器镜像服务

1、搜索镜像

2、使用命名空间

  • 阿里云的容器镜像服务使用命名空间分区管理镜像仓库。
  • 命名空间是一些仓库的集合面。要将镜像推送(上传)到阿里云的Docker仓库中,必须先创建命名空间。
  • 这里默认允许用户直接推送镜像,系统自动根据仓库名称创建对应仓库,可以通过将自动创建仓库设置为关闭来禁用这一自动创建的功能。
  • 对于推送镜像自动创建的仓库,默认其是私有的,可以将默认仓库类型设置为公开,以使自动创建的仓库默认为公开仓库。

3、从命令行登录阿里云Registry

无论是使用docker pull 命令从阿里云镜像仓库拉取镜像 ,还是通过docker push 命令将镜像推送到阿里云镜像仓库 ,都必须先使用docker login命令登录阿里云 Registry

cs 复制代码
 [root@docker-2322030238 ~]# docker login registry.cn-hangzhou.aliyuncs.com
 Username: tb6824xxxx
 Password: 
 WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
 Configure a credential helper to remove this warning. See
 https://docs.docker.com/engine/reference/commandline/login/#credentials-store
 ​
 Login Succeeded

此处用户名是阿里云账号登录密码是在镜像仓库管理控制台设置的Registry登录密码,而不是阿里云账号登录密码。

4、将镜像推送到阿里云Registry

镜像在本地环境构建或是打包之后,就可以推送到Registry。 首先要确认登录的用户对指定的命名空间有写入权限,还要注意登录的Registry和当前操作镜像的Registry必须保持一致。

然后为镜像设置针对阿里云Registry的标签,其标签格式如下:

Registry 域名/命名空间/仓库名称:[标签]

其中,Registry域名为阿里云Registry的域名仓库名称就是镜像名称标签相当于镜像版本。在本示例中进行如下操作。

cs 复制代码
 docker tag hello-world registry.cn-hangzhou.aliyuncs.com/docker_dok/hello-world
cs 复制代码
 [root@docker-a ~]# docker push registry.cn-hangzhou.aliyuncs.com/docker_dok/hello-world
 Using default tag: latest
 The push refers to repository [registry.cn-hangzhou.aliyuncs.com/docker_dok/hello-world]
 ac28800ec8bb: Pushed 
 latest: digest: sha256:d37ada95d47ad12224c205a938129df7a3e52345828b4fa27b03a98825d1e2e7 size: 524

可以到阿里云Registry上查看新推送的仓库

5、从阿里云Registry拉取镜像

**拉取公开的镜像,不需要登录阿里云Registry。**先通过浏览器搜索到要拉取的镜像,获取其地址,再进行拉取操作

cs 复制代码
 # 拉取之前上传的镜像
 [root@docker-a ~]# docker pull registry.cn-hangzhou.aliyuncs.com/docker_dok/hello-world
 Using default tag: latest
 latest: Pulling from docker_dok/hello-world
 Digest: sha256:d37ada95d47ad12224c205a938129df7a3e52345828b4fa27b03a98825d1e2e7
 Status: Image is up to date for registry.cn-hangzhou.aliyuncs.com/docker_dok/hello-world:latest
 registry.cn-hangzhou.aliyuncs.com/docker_dok/hello-world:latest

七、自建Docker注册中心

因为安全可控性和Internet连接限制的问题,用户可以建立自己的注册中心提供镜像仓库注册服务。Docker Registry工具已经开源,并在Docker Hub提供官方镜像。

1、基于容器安装运行Registry

cs 复制代码
 # Docker Registry工具负责镜像仓库的管理
 [root@docker-a ~]# docker run -d -p 5000:5000 --restart=always --name myregistry -v /opt/data/registry:/var/lib/registry registry
 Unable to find image 'registry:latest' locally
 latest: Pulling from library/registry
 619be1103602: Pull complete 
 5daf2fb85fb9: Pull complete 
 ca5f23059090: Pull complete 
 8f2a82336004: Pull complete 
 68c26f40ad80: Pull complete 
 Digest: sha256:fb9c9aef62af3955f6014613456551c92e88a67dcf1fc51f5f91bcbd1832813f
 Status: Downloaded newer image for registry:latest
 ce61d322127cf4a53537051663d58891239cb19f328e52df85af641c87dc51d0
  • -v选项将主机的本地/opt/data/registry目录 绑定到容器/var/ib/registry目录DockerRegistry默认存放镜像文件的位置)中,这样可以实现数据的持久化,将镜像仓库存储到本地文件系统中。
  • -p选项用于设置映射端口,这样访问主机的5000端口就能访问到Registry容器的服务
  • --restart选项设置重启策略,上面示例中值设置为always表示这个容器即使异常退出也会自动重启保持了Registry服务的持续运行
  • --name myregistry选项表示将该容器命名为myregistry,便于后续操作。

可以执行以下命令获取所有的镜像仓库来测试Docker Registry服务,下面示例中说明服务正常运行,刚建立的注册中心还没有任何镜像。

cs 复制代码
 [root@docker-a ~]# curl http://127.0.0.1:5000/v2/_catalog
 {"repositories":[]}

2、将镜像上传到自建的注册中心

上传镜像之前需要首先针对自建的注册中心设置相应的标签,其标签格式如下

[主机:端口]/仓库名称:[标签]

主机 可以是自建注册中心的域名或IP地址端口 就是该中心对外提供注册服务的端口

cs 复制代码
[root@docker-a ~]# docker tag hello-world 127.0.0.1:5000/hello-world:v1
# 上传镜像
[root@docker-a ~]# docker push 127.0.0.1:5000/hello-world:v1 
The push refers to repository [127.0.0.1:5000/hello-world]
ac28800ec8bb: Pushed 
v1: digest: sha256:d37ada95d47ad12224c205a938129df7a3e52345828b4fa27b03a98825d1e2e7 size: 524

# 进行测试
[root@docker-a ~]# curl http://127.0.0.1:5000/v2/_catalog
{"repositories":["hello-world"]}

3、从注册中心下载镜像

cs 复制代码
[root@docker-2322030238 ~]# docker pull 127.0.0.1:5000/hello-world:v1
v1: Pulling from hello-world
Digest: sha256:d37ada95d47ad12224c205a938129df7a3e52345828b4fa27b03a98825d1e2e7
Status: Image is up to date for 127.0.0.1:5000/hello-world:v1
127.0.0.1:5000/hello-world:v1

4、配置注册中心地址

默认情况下,注册中心地址使用localhost127.0.0.1是没有问题的。

如果要使用主机的域名或IP 地址就会报出"http: server gave HTTP response toHTTPS client"这样的错误,这是因为Docker自从 1.3.X 版之后,访问 Docker 注册中心默认使用的是 HTTPS,但是搭建的私有注册中心默认使用的是HTTP。

最简单的解决方案是修改Docker客户端的**/etc/docker/daemon.json文件,将要使用的注册中心域名或 IP 地址添加到 insecure-registries 列表 中,以允许 Docker 客户端与该列表中的注册中心进行不安全的通信** 。

cs 复制代码
# 本示例中定义如下:
"insecure-registries":"192.168.199.51:5000"]

# 如果该配置文件没有内容,则需要加上花括号,例如:
{"insecure-registries":"192.168.199.51:5000"]}

# 然后重启docker服务
systemctl restart docker

# 然后上传、下载操作就没有问题了
[root@docker-a ~]# docker pull 192.168.199.51:5000/hello-world:v1
v1: Pulling from hello-world
Digest: sha256:d37ada95d47ad12224c205a938129df7a3e52345828b4fa27b03a98825d1e2e7
Status: Image is up to date for 192.168.199.51:5000/hello-world:v1
127.0.0.1:5000/hello-world:v1
相关推荐
光芒再现dev9 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
AndyFrank22 分钟前
mac crontab 不能使用问题简记
linux·运维·macos
ZHOU西口23 分钟前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
成都古河云1 小时前
智慧场馆:安全、节能与智能化管理的未来
大数据·运维·人工智能·安全·智慧城市
算法与编程之美1 小时前
文件的写入与读取
linux·运维·服务器
Amelio_Ming2 小时前
Permissions 0755 for ‘/etc/ssh/ssh_host_rsa_key‘ are too open.问题解决
linux·运维·ssh
心灵彼岸-诗和远方2 小时前
Devops业务价值流:软件研发最佳实践
运维·产品经理·devops
JuiceFS2 小时前
好未来:多云环境下基于 JuiceFS 建设低运维模型仓库
运维·云原生
Ven%3 小时前
centos查看硬盘资源使用情况命令大全
linux·运维·centos
景天科技苑3 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统