Docker - 搭建Docker私有仓库(本地Registry镜像仓库)
Docker Hub 虽然方便,但还是有些限制。比如:需要 Intenet 连接,上传下载慢。而且上传到 Docker Hub 的镜像任何人都能访问到(虽然也提供私有 repository,但需要收费),有安全性问题。
(3)最后访问 http://主机IP:5000/v2,如果返回如下内容则说明 registry 已经启动成功了。
(2)上面命令执行后可能会报“http: server gave HTTP response to HTTPS client”错误。
(4)找到 ExecStart,按下 i 键在其末尾添加如下内容(IP 则为 registry 主机的 IP):
好在 Docker 已经将 Registry 开源了,同时在 Docker Hub 上也有官方的镜像 registry。下面演示如何在 Docker 中运行自己的 registry,搭建本地 Registry。
1,启动 registry 容器
(1)这里我们使用的镜像是 registry:2,执行如下代码会自动下载并启动:
参数说明:
- -d:后台启动容器
- -p:将容器的 5000 端口映射到 Host 的 5000 端口(5000 是 registry 服务端口)。
- -v:将容器 /var/lib/registry 目录映射到 Host 的 /myregistry,用于存放镜像数据。
docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2
(2)接着执行下面命令配置 firewalld 防火墙策略:
firewall-cmd --permanent --add-port=5000/tcp firewall-cmd --reload
(3)最后访问 http://主机IP:5000/v2,如果返回如下内容则说明 registry 已经启动成功了。
2,重命名镜像
镜像的名称由 repository 和 tag 两部分组成。
我们在另一台客户机上通过 docker tag 命令重命名镜像(在镜像前面增加运行 registry 的主机名称和端口),使之与 registry 匹配:
- repostory 的完整格式为:[registry-host]:[port]/[username]/xxx
- 只有 Docker Hub 上的镜像可以省略 registry-host:[host] ,如果使用我们搭建的私有仓库则不能省略。
docker tag hangge_server 192.168.60.128:5000/hangge/hangge_server:v1
3,上传镜像
(1)镜像重命名后,客户机这边通过 docker push 命令上传镜像:docker push 192.168.60.128:5000/hangge/hangge_server:v1
(2)上面命令执行后可能会报“http: server gave HTTP response to HTTPS client”错误。
(3)这是因为 Docker从1.3.X 之后,与 docker registry 交互默认使用的是 https,然而我们前面搭建的私有仓库只提供 http 服务,所以当与私有仓库交互时就会报上面的错误。
为了解决这个问题需要在启动 docker server 时增加启动参数为默认使用 http 访问。我们执行如下命令修改“客户机”这边 docker 启动配置文件:
vi /usr/lib/systemd/system/docker.service
(4)找到 ExecStart,按下 i 键在其末尾添加如下内容(IP 则为 registry 主机的 IP):
--insecure-registry 192.168.60.128:5000
(5)编辑完毕后按下 esc 退出编辑模式。 接着组合按下 shift + : 开启命令,然后输入 wq 回车,保存退出。
(6)最后执行如下两个命令重启 docker:
(7)我们再次通过 docker push 命令上传镜像,可以发现镜像已经成果上传到仓库:
systemctl daemon-reload systemctl restart docker
4,查看镜像
我们访问 http://主机IP:5000/v2/_catalog,即可看到当前仓库里的所有镜像:5,下载镜像
客户机同样使用 docker pull 从本地 registry 下载镜像,除了镜像名称长一些,使用方式同 Docker Hub 下载镜像完全一样:docker pull 192.168.60.128:5000/hangge/hangge_server:v1