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
相关推荐
zhaotiannuo_19989 分钟前
【Linux kali 更换yum源】
linux·运维·服务器
RationalDysaniaer1 小时前
k8s配置与存储
云原生·容器·kubernetes
ybb7046304 小时前
linux第二次作业
linux·运维·服务器
大白同学4215 小时前
【Linux】进程间通信
linux·运维·服务器
..Move...6 小时前
Docker镜像制作
运维·docker·容器
码龄3年 审核中11 小时前
说说SSH的端口转发
大数据·运维·ssh
盛世隐者11 小时前
【Linux】定制Linux系统
linux·运维·服务器
行思理12 小时前
Docker 应该如何学习 分四个阶段
学习·docker·容器
..Move...13 小时前
Docker应用部署tomcat和nginx
nginx·docker·tomcat
Lxt.星翊14 小时前
MySQL(安装和卸载、数据库存储原理图)
linux·运维·windows