您的位置:首页 > 运维架构 > Docker

Docker 私有仓库配置

2016-10-18 15:22 232 查看

Docker 私有仓库配置

配置环境: Centos 7.2 Docker 1.12.2

一、为何配置Docker私有仓库

主要是为了快,实际上Docker Hub的功能已经非常全面,而且有用户管理系统,有private repository, web操作界面, 唯一一点就是太慢了,下载一个镜像非常久,我在开发时需要经常修改镜像并在其他机器上部署,如果每次都要这样下载太花时间。用私有仓库的话速度就会快很多,这样在pull和push时就能省时不少。

用什么

Docker 推出了安全私有仓库Docker Trusted Registry, 功能和Docker Hub 差不多,但是是私有的,有web的管理界面, 很好很强大。就有点像有天我突然想吃麦当劳了,就自己在楼下开了一家。可惜这个是基于商业支持版的CS Docker Engine,需要收费, 目前是每个实例每个月150刀,24x7支持的300刀,支付不起,等以后有钱了就用这个。

现在比较穷所以还是自己买个小锅炸鸡翅吃比较划算。就使用原来registry就够了, 反正只是方便自己使用,那些功能意义并不太大,registry也够用的, 在docker hub上可以搜索到官方的镜像。

二、配置registry

仓库地址在这里→ registry

运行仓库

首先打开docker客户端,输入指令

docker run \

-e SETTINGS_FLAVOR=s3 \

-e AWS_BUCKET=acme-docker \

-e STORAGE_PATH=/registry \

-e AWS_KEY=AKIAHSHB43HS3J92MXZ \

-e AWS_SECRET=xdDowwlK7TJajV1Y7EoOZrmuPEJlHYcNP2k4j49T \

-e SEARCH_BACKEND=sqlalchemy \

-p 5000:5000 \

registry

docker会自动从hub上下载镜像并运行,这里注意绑定的是5000端口,要容5000端口是可用的,装好后docker ps 可以看到一个叫registry的容器已经在运行。

那么现在已经获得了自己的仓库,可以在浏览器中输入 <仓库所在的IP地址>:5000/v2/ 就可以看到返回了一对大括号 {} 说明运行成功了。

使用仓库

首先给要上传的镜像做一个tag 例如

shell

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

这里将原来名为hello-world 的镜像弄一个新的标签,这里的ip和端口要根据自己实际的仓库设置来写。

使用push

docker push 127.0.0.1:5000/hello-world

如果返回以下内容,说明docker已经将镜像上传到这个仓库里。

The push refers to a repository [127.0.0.1:5000/hello-world]

a02596fd43f2: Pushed

latest: digest: sha256:a18ed77532f6d6fs1500db650194e0f93432a5f05f8b50d404323t4ae5f83aa4 size: 234

遇到问题

实际上很有可能返回的是这个

The push refers to a repository [127.0.0.1:5000/hello-world]

Get https://127.0.0.1:5000/v1/_ping: http: server gave HTTP response to HTTPS client

就说我们这个HTTPS客户端收到的是HTTP响应,就是本来应该是应该使用安全连接与仓库服务器通信的,结果却收到的是不安全的连接。就是手这个仓库镜像本身没有使用安全连接,就是不安全仓库,所以需要在docker中配置一下。

registry官方给出的方法是要在启动脚本里加上:

–insecure-registry REGISTRY_HOSTNAME:5000

这个可能适用于其他的系统版本,但是在我这个配置下没有找到,后来在网上发现docker配置文件是 /etc/docker下的 .json格式的文件。

在该文件夹下创建或者修改daemon.json文件,然后在里面加入一个键值对

{ “insecure-registries”:[“127.0.0.1:5000”] }

将这个ip所代表的的主机注明为不安全的仓库。

然后重启docker服务。

systemctl restart docker

然后再重新push刚才的镜像,就可以成功了。(如果在本机上运行仓库镜像的话,重启docker服务后记得要重启仓库)之后可以使用pull命令从该仓库取得镜像
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  centos docker