搭建Docker私有仓库(本地Registry镜像仓库)
Docker Hub 虽然方便,但还是有些限制。比如:需要 Intenet 连接,上传下载慢。而且上传到 Docker Hub 的镜像任何人都能访问到(虽然也提供私有 repository,但需要收费),有安全性问题。
好在 Docker 已经将 Registry 开源了,同时在 Docker Hub 上也有官方的镜像 registry。下面演示如何在 Docker 中运行自己的 registry,搭建本地 Registry。
启动 registry 容器
这里我们使用的镜像是 registry:2,执行如下代码会自动下载并启动:
参数说明:
-d:后台启动容器
-p:将容器的 5000 端口映射到 Host 的 5000 端口(5000 是 registry 服务端口)。
-v:将容器 /var/lib/registry 目录映射到 Host 的 /mnt/registry,用于存放镜像数据。
–restart=always: 自动重启
–name=jackspeedregistry: 运行的容器名称
registry:2 镜像名称and版本
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /mnt/registry:/var/lib/registry \
registry:2
重命名镜像
镜像的名称由 repository 和 tag 两部分组成。
repostory 的完整格式为:[registry-host]:[port]/[username]/xxx
只有 Docker Hub 上的镜像可以省略 registry-host:[host] ,如果使用我们搭建的私有仓库则不能省略。
我们在另一台客户机上通过 docker tag 命令重命名镜像(在镜像前面增加运行 registry 的主机名称和端口),使之与 registry 匹配:
docker tag nginx 192.168.60.128:5000/nginx:v1
上传镜像
镜像重命名后,客户机这边通过 docker push 命令上传镜像:
docker push 192.168.60.128:5000/nginx:v1
上面命令执行后可能会报“http: server gave HTTP response to HTTPS client”错误。
这是因为 Docker从1.3.X 之后,与 docker registry 交互默认使用的是 https,然而我们前面搭建的私有仓库只提供 http 服务,所以当与私有仓库交互时就会报上面的错误。
配置http权限支持
vim /etc/docker/daemon.json
{
"insecure-registries":["192.168.60.128:5000"]
}
windows操作
# 先切换到虚拟docker bash环境中去:
docker-machine ssh default
# 然后修改配置文件
vim /etc/docker/daemon.json
{
"insecure-registries":["192.168.60.128:5000"]
}
修改完成后重启docker应用配置文件。
然后就可以用push推送成功了。
查看镜像
我们访问 http://主机IP:5000/v2/_catalog,即可看到当前仓库里的所有镜像
我们访问 http://主机IP:5000/v2/镜像名/tags/list,即可看到某个镜像的标签列表
下载镜像
客户机同样使用 docker pull 从本地 registry 下载镜像,除了镜像名称长一些,使用方式同 Docker Hub 下载镜像完全一样(也需要配置/etc/docker/daemon.json):
docker pull 192.168.60.128:5000/nginx:v1
(完)
文章参考:航歌