一、关于Registry
官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。
但是有时候我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。
Registry在github上有两份代码:老代码库和新代码库。老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。
从2.0版本开始就到在新代码库进行开发,新代码库是采用go语言编写,修改了镜像id的生成算法、registry上镜像的保存结构,大大优化了pull和push镜像的效率。
官方在Docker hub上提供了registry的镜像,我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。
二、搭建Registry
首先搜索并拉取镜像
docker search registry # 建议先搜索一下,可以看一下相关的镜像,说不定哪天就有更好的镜像了docker pull registry # 标签可以不加,因为当前最新就是v2
运行一个registry容器
docker run -d / # 后台运行--name registry-srv / # 指定容器名--restart=always / # 设置自动启动-p 5000:5000 / # 端口映射宿主机,通过宿主机地址访问-v /opt/zwx-registry:/var/lib/registry / # 把镜像存储目录挂载到本地,方便管理和持久化-v /opt/zwx-registry/srv-config.yml:/etc/docker/registry/config.yml / # 把配置文件挂载到本地,方便修改和保存registry
srv-config.yml内容如下
标红delete参数设置为true,是为了让仓库支持删除功能。默认没有这个参数,也就是不能删除仓库镜像。
version: 0.1log: fields: service: registrystorage: delete: enabled: true cache: blobdescriptor: inmemory filesystem: rootdirectory: /var/lib/registryhttp: addr: :5000 headers: X-Content-Type-Options: [nosniff]health: storagedriver: enabled: true interval: 10s threshold: 3
注册https协议(否则push安全认证过不去)
需要通过本地仓库下载镜像,均需要配置
vim /etc/docker/daemon.json # 默认无此文件,需自行添加,有则追加以下内容。{ "insecure-registries":["xx.xx.xx.xx:5000"] } # 指定IP地址或域名systemctl daemon-reload # 守护进程重启systemctl restart docker # 重启docker服务
镜像上传与下载
docker push xx.xx.xx.xx:5000/nginx # 一定要注明仓库地址,否则会报错docker pull xx.xx.xx.xx:5000/nginx
查看仓库镜像信息
curl -XGET http://xx.xx.xx.xx:5000/v2/_catalog # 查看仓库镜像列表(也可以通过windows浏览器打开查看)curl -XGET http://xx.xx.xx.xx:5000/v2/image_name/tags/list # 查看指定应用镜像tag
三、搭建Registry web
首先搜索并拉取镜像
docker search docker-registry-webdocker pull hyper/docker-registry-web # 这个镜像用的人较多
运行一个registry web容器
docker run -d / # 后台运行--name registry-web / # 指定容器名--restart=always / # 设置自动启动-p 8000:8080 / # 端口映射宿主机,通过宿主机地址访问-v /opt/zwx-registry/web-config.yml:/etc/config.yml / # 把配置文件挂载到本地,方便修改和保存hyper/docker-registry-web
新闻热点
疑难解答