博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker私有仓库Registry搭建(localhost 可行但跨主机有问题)
阅读量:7105 次
发布时间:2019-06-28

本文共 3341 字,大约阅读时间需要 11 分钟。

hot3.png

1. 关于Registry

官方的是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是,有时候,我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。

 Registrygithub上有两份代码:和。老代码是采用python编写的,存在pullpush的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。从2.0版本开始就到在新代码库进行开发,新代码库是采用go语言编写,修改了镜像id的生成算法、registry上镜像的保存结构,大大优化了pullpush镜像的效率。

 官方在Docker hub上提供了registry的镜像(),我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。Taglatestregistry镜像是0.9.1版本的,我们直接采用2版本。

2. Registry的部署

运行下面命令获取registry镜像,

$ sudo docker pull registry:2

然后启动一个容器,

$ sudo docker run -d -v /wks/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2

Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/wks/registry目录挂载到该目录,即可实现将镜像保存到主机的/wks/registry目录了。

 运行docker ps看一下容器情况,

$ sudo docker ps CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMESf3766397a458        registry:2      "/bin/registry /etc/d"   46 seconds ago      Up 45 seconds       0.0.0.0:5000->5000/tcp   registry

说明我们已经启动了registry服务,打开浏览器输入http://127.0.0.1:5000/v2,出现下面情况说明registry运行正常,

 

3. 验证

现在我们通过将镜像pushregistry来验证一下。

我的机器上有个hello-world的镜像,我们要通过docker tag将该镜像标志为要推送到私有仓库,

$ sudo docker tag hello-world 127.0.0.1:5000/hello-world

然后查看以下本地的镜像,

$ sudo docker imagesREPOSITORY                   TAG                 IMAGE ID            CREATED             VIRTUAL SIZEregistry                     2               b91f745cd233        5 days ago          220.1 MBubuntu                       14.04               a5a467fddcb8        6 days ago          187.9 MBhello-world                  latest              975b84d108f1        2 weeks ago         960 B127.0.0.1:5000/hello-world   latest              975b84d108f1        2 weeks ago         960 B

接下来,我们运行docker pushhello-world镜像push到我们的私有仓库中,

$ sudo docker push 127.0.0.1:5000/hello-worldThe push refers to a repository [127.0.0.1:5000/hello-world] (len: 1)975b84d108f1: Image successfully pushed 3f12c794407e: Image successfully pushed latest: digest: sha256:1c7adb1ac65df0bebb40cd4a84533f787148b102684b74cb27a1982967008e4b size: 2744

现在我们可以查看我们本地/wks/registry目录下已经有了刚推送上来的hello-world。我们也在浏览器中输入http://127.0.0.1:5000/v2/_catalog,如下图所示,

 

现在我们可以先将我们本地的127.0.0.1:5000/hello-world和hello-world先删除掉,

$ sudo docker rmi hello-world$ sudo docker rmi 127.0.0.1:5000/hello-world

然后使用docker pull从我们的私有仓库中获取hello-world镜像,

$ sudo docker pull 127.0.0.1:5000/hello-worldUsing default tag: latestlatest: Pulling from hello-worldb901d36b6f2f: Pull complete 0a6ba66e537a: Pull complete Digest: sha256:1c7adb1ac65df0bebb40cd4a84533f787148b102684b74cb27a1982967008e4bStatus: Downloaded newer image for 127.0.0.1:5000/hello-world:latest$ sudo docker imagesREPOSITORY                   TAG                 IMAGE ID            CREATED             VIRTUAL SIZEregistry                     2               b91f745cd233        5 days ago          220.1 MBubuntu                       14.04               a5a467fddcb8        6 days ago          187.9 MB127.0.0.1:5000/hello-world   latest              0a6ba66e537a        2 weeks ago         960 B

4. 可能问题

可能会出现无法push镜像到私有仓库的问题。这是因为我们启动的registry服务不是安全可信赖的。这是我们需要修改docker的配置文件/etc/default/docker,添加下面的内容,

    DOCKER_OPTS="--insecure-registry xxx.xxx.xxx.xxx:5000"

然后重启docker后台进程,

$ sudo service docker restart

这是再push即可。

转载于:https://my.oschina.net/yyflyons/blog/625503

你可能感兴趣的文章
ECSHOP农行支付接口开发(含手机端)
查看>>
ios专题 - 常用设计模式
查看>>
流式标签生成控件
查看>>
Struts2拦截器总结<转>
查看>>
黄聪:php中时间轴开发,即显示为“刚刚”、“5分钟前”、“昨天10:23”等(转)...
查看>>
黄聪:C#操作xml SelectNodes,SelectSingleNode通过 xPath 定位class包含Contains的DIV
查看>>
Linq的条件查询
查看>>
0515Python基础-带参数的装饰器-多个装饰器
查看>>
QQ机器人Java版
查看>>
C#里判断字符串是否为纯数字
查看>>
C语言求字符串长度
查看>>
Maven的setting.xml配置
查看>>
一个不应该犯的错octave
查看>>
linux经典书籍
查看>>
ubuntu 13.10 monodevelop3 安装
查看>>
【python】-- Redis简介、命令、示例
查看>>
遇到的有关iframe的滚动条问题
查看>>
vue的单向数据流
查看>>
重写了一遍授权思路
查看>>
OpenMesh 之向量操作
查看>>