Docker如何搭建私有Registry镜像仓库

概述

仓库(Repository)是集中存放镜像的地方。
一个容易混淆的概念是注册服务器(Registry)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址 docker.io/ubuntu 来说,docker.io 是注册服务器地址,ubuntu 是仓库名。
大部分时候,并不需要严格区分这两者的概念。

私有仓库搭建

有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。
docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。

获取镜像/启动服务

说明:registry 镜像选择 registry:2 和 registry:2.4.1 都可以。
拉取私有镜像仓库

1
2
docker pull registry:2
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2

参数解析:

  • -d:后台运行
  • -p:将容器的5000端口映射到宿主机的5000端口
  • –restart:docker服务重启后总是重启此容器
  • –name:容器的名称
  • -v = --volume:数据卷,进行一个挂载宿主机:容器内。将容器的/var/lib/registry映射到宿主机的 /opt/registry目录

查看仓库镜像

要得到的镜像信息

1
2
3
4
curl 172.16.1.30:5000/v2/_catalog
{"repositories":["my-app"]}
curl 172.16.1.30:5000/v2/my-app/tags/list
{"name":"my-app","tags":["v1"]}

其中172.16.1.30为仓库地址

实现http上传

添加如下配置,如果文件不存在则添加,在docker01和docker02机器都要添加,因为这两台机器都可能向仓库推送或拉取镜像。

1
2
3
4
5
vim /etc/docker/daemon.json
添加:
{
"insecure-registries": ["172.16.1.31:5000"]
}

上传镜像

  1. 在本地为要上传的镜像打标签:

    1
    sudo docker tag my-app:latest 192.168.50.188:5000/my-app:v1
  2. 上传到私有仓库

    1
    sudo docker push 192.168.50.188:5000/my-app:v1

拉取镜像并运行

1
2
sudo docker pull 192.168.50.188:5000/my-app:v1
sudo docker run -it -p 8000:8000 --name my-app 192.168.50.188:5000/my-app:v1

查看数据大小

进入仓库容器中,通过du命令查看大小

1
2
docker exec -it registry sh  # 进入容器
# du -sh /var/lib/registry/

Registry删除镜像

在运行registry时挂载在本地的目录[/opt/registry]中,找到指定的镜像存放的目录来进行删除。

1
2
3
docker exec -it registry sh
# cd /var/lib/registry/docker/registry/v2/repositories/
# rm -rf xxx/

xxx 为你想删除的镜像

请我喝杯咖啡吧~

支付宝
微信