docker搭建本地 Registry

参考资料 https://www.cnblogs.com/CloudMan6/p/6902325.html

Docker Hub 虽然非常方便,但还是有些限制,比如:

1.需要 internet 连接,而且下载和上传速度慢,势必影响持续集成的构建

2.上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 repository,但不是免费的。

3.安全原因很多组织不允许将镜像放到外网。

解决方案就是搭建本地的 Registry。

ps:在使用docker run的时候,首先查找的是本地仓库,如果本地没有,那么就会向公共仓库发起请求,找到对应的版本,然后下载,下载之后,运行这个镜像的实例,也就是dokcer images的结果是下载的镜像,而docker ps看到的是容器。

Docker 已经将 Registry 开源了,同时在 Docker Hub 上也有官方的镜像 registry。下面我们就在 Docker 中运行自己的 registry。

1.运行一个本地的registry。

docker run -d -p 5000:5000 --name myregistry --restart always -v /myregistry:/var/lib/registry registry:2

-d 是后台启动容器。

-p 将容器的 5000 端口映射到 Host 的 5000 端口。5000 是 registry 服务端口。

-v 将容器 /var/lib/registry 目录映射到 Host 的 /myregistry,用于存放镜像数据。

--restart always 在容器退出时总是重启容器

--name 指定容器的名称

registry:2 //2只是一个tag

2.通过 docker tag 重命名镜像,使之与 registry 匹配。

 repository 的完整格式为:[registry-host]:[port]/[username]/xxx

只有 Docker Hub 上的镜像可以省略 [registry-host]:[port] 。

[root@node-1 ~]# docker pull lwieske/java-8:jdk-8u152-slim

[root@node-1 ~]# docker tag lwieske/java-8:jdk-8u152-slim 192.168.20.206:5000lwieske/java-8:jdk-8u152-slim

[root@node-1 ~]# docker images

3.通过 docker push 上传镜像。

在进行push到私有仓库的时候,首先必须打tag,标记相关的ip和端口,如下:

[root@node-1 ~]# docker push 192.168.20.206:5000/lwieske/java-8:jdk-8u152-slim

查看镜像版本列表

[xx@node-1 sh]$ curl -XGET localhost:5000/v2/lwieske/java-8/tags/list

{"name":"lwieske/java-8","tags":["jdk-8u152-slim"]}

查看仓库镜像

[xx@node-1 sh]$ curl http://192.168.20.206:5000/v2/_catalog

{"repositories":["lwieske/java-8"]}

如果在客户端(有可能是本地,一般为不同IP)运行docker push ip:port/ubuntu,会提示错误

[root@node-1 ~]# docker push 192.168.20.206:5000/ubuntu:latest

The push refers to repository [192.168.20.206:5000/ubuntu]

Get https://192.168.20.206:5000/v2/: http: server gave HTTP response to HTTPS client

或者 Get https://192.168.20.206:5000/v1/_ping: http: server gave HTTP response to HTTPS client

 

因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问(每一个想要push的客户端都需要配置)

[root@node-1 ~]# cat /etc/docker/daemon.json

{

"registry-mirrors": ["https://afa3ovvl.mirror.aliyuncs.com"],

"insecure-registries": ["192.168.20.206:5000"]

}

或者

[root@node-1 ~]# cat /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.20.206:5000

重启docker

systemctl daemon-reload 

systemctl restart docker

 

P.S.

注册服务器(repository),仓库(registry),镜像(image),容器(container)之间的关系:注册服务器主要是用来存放仓库的服务器,在一个服务器上有多个仓库,而仓库又可以分为公共仓库和私有仓库,一个仓库里面有可以有多个镜像,而容器则是镜像的一个实例。

4.现在已经可通过 docker pull 从本地 registry 下载镜像了。(你可能要先删掉本地存在的镜像)

[root@node-1 ~]# docker pull localhost:5000/ubuntu

 

扩展阅读:

带有WEB UI 和 认证的registry

https://hub.docker.com/r/hyper/docker-registry-web/

 

docker私有仓库v2版本中的镜像,官方不建议删除,但是也提供了删除接口:

DELETE /v2/<name>/manifests/<reference> Host: <registry host> Authorization: <scheme> <token>

 

 

转载于:https://my.oschina.net/longquan/blog/3050852

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值