Docker Registry 私有镜像仓库的部署以及使用

一、DockerHub和Docker Registry的区别
二、Docker Registry的部署
三、Docker Registry使用的注意事项(重点)

一、DockerHub和Docker Registry的区别

1. 托管 vs 自托管

  • Docker Hub:由 Docker 官方提供的公共镜像仓库服务,镜像数据由 Docker 官方托管。用户在 Docker Hub 上创建的仓库实际上是在 Docker 的云基础设施上管理和存储的。

  • 自建 Docker Registry:这是一个完全由自己托管的镜像仓库,所有的镜像数据都存储在自己控制的服务器或存储设备上。你需要负责管理、备份、运维等工作。

2. 可访问性

  • Docker Hub:全球可访问,但由于国内政策的限制,在中国境内的访问速度和可用性可能较差。Docker Hub 提供公有仓库(公开可见)和私有仓库(需登录认证)

  • 自建 Docker Registry:完全由自己控制的访问权限,可以在局域网、公司内部网络或特定的服务器上使用,网络性能和访问稳定性完全由自己的基础设施决定

 二、Docker Registry的部署

方法一:

docker run -d \
  --name registry \
  -p 5000:5000 \
  -v /opt/registry/data:/var/lib/registry \
  registry:2
  • -p 5000:5000:将本地的 5000 端口映射到容器的 5000 端口,这样可以通过 http://<服务器IP>:5000 访问注册表。
  • -v /opt/registry/data:/var/lib/registry:将本地的 /opt/registry/data 目录挂载到容器内用于存储镜像数据。
  • registry:2:这是 Docker Registry 的官方镜像,:2 指的是版本号。

方法二:

使用Docker-Compose部署

编写docker-compose.yml文件

version: '3'

services:
  registry:
    image: registry:2
    ports:
      - "5000:5000"
    volumes:
      - /opt/registry/data:/var/lib/registry
    restart: always

 在docker-compose.yml同一级目录下执行docker-compose up -d

三、Docker Registry使用的注意事项

1.配置Docker配置文件

Docker 默认要求使用 HTTPS 连接私有仓库,在不使用 HTTPS 的情况下,必须通过修改 Docker 配置文件,明确告诉 Docker 信任你的私有仓库并允许使用 HTTP 通信。不改配置会报错:http: server gave HTTP response to HTTPS client

因此需要在/etc/docker/daemon.json 配置文件中以下内容,

{
  "insecure-registries": ["镜像仓库IP地址:5000"]
}

配置完后需要重启Docker服务sudo systemctl restart docker

2.推送镜像到私有仓库的流程

第一步,给本地镜像打标签。

镜像默认是存储在本地的,如果你想将镜像推送到远程仓库(如私有 Docker Registry 或 Docker Hub),你需要告诉 Docker 该镜像要推送到哪个仓库。这个过程就是通过打标签来实现的。

一个镜像的完整标签包括:

  • 仓库地址:目标 Registry 的 URL(例如 Docker Hub 或自建的 Docker Registry 的 IP/域名)。
  • 镜像名称:镜像在目标仓库中的名称。
  • 标签(tag):镜像的版本号或其他标识,通常使用 latest 表示最新版本。 

标签的格式:

<仓库地址>/<镜像名称>:<标签>

例如:

  • Docker Hub 的镜像标签:docker.io/nginx:latest
  • 自建私有 Docker Registry 中的镜像标签:<your-registry-ip>:5000/image:v1.0

使用 docker tag 命令为现有镜像打标签,指定目标仓库地址和标签(版本号):

docker tag 本地镜像名:版本号 镜像仓库IP地址:5000/镜像名:版本号

查看镜像: 

查看镜像标签后可发现,nginx和jackbewater:5000/my_nginx的IMAGE ID是一样的,他们是同一个镜像,只是标签不同而已。因为绿圈中的nginx是从dockerhub管方拉下来的所以默认省略了 docker.io/(nginx:latest)

第二步,推送镜像到镜像仓库 

使用 docker push 命令将镜像推送到私有仓库:

docker push jackbewater:5000/my_nginx:latest

小结

  • 打标签 是为了标明镜像的目标仓库地址、名称和版本。
  • 使用 docker tag 命令为镜像指定一个新的标签,从而可以推送到不同的仓库。
  • 推送镜像时,Docker 使用这个标签来决定要将镜像推送到哪个仓库。
3.查看镜像仓库中的镜像

 在终端执行:

curl http://镜像仓库IP地址:5000/v2/_catalog

结果如下:

{
  "repositories": [
    "my-image",
    "another-image"
  ]
}

查看某个镜像的所有标签,可以运行:

curl http://镜像仓库IP地址:5000/v2/my-image/tags/list

 结果如下:

{
  "name": "my-image",
  "tags": [
    "latest",
    "v1.0",
    "v1.1"
  ]
}

拉取别人镜像的时候为什么不需要指定镜像仓库和端口

当你拉取别人的镜像时,通常不需要指定端口号是因为这些镜像托管在默认的 Docker Hub 或其他公共仓库上,而这些公共仓库通常使用默认的 HTTPS 端口 443。Docker 客户端会自动使用该默认端口进行通信,因此不需要手动指定,而自建的私有注册表如果使用了非标准端口,则需要明确指定端口号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值