如何搭建docker本地私有仓库,局域网内都可以访问?
前言
我有两台服务器A和B,我想让A作为本地主仓库的地址,B去拉取A构建的docker 镜像。如何实现?
假设A的地址为192.168.49.160
B的地址为192.168.53.247
这里我这两台服务器都是ubuntu的,A是ubuntu 20 ,B是ubuntu 18 。
前提 两台服务器已经都安装好docker
先在A搭建
1.容器运行
docker run -d -p 5000:5000 --restart=always --name registry registry
这将使用官方的 registry
镜像来启动私有仓库。默认情况下,仓库会被创建在容器的 /var/lib/registry
目录下。
2.查看本地已有的镜像
docker image ls #若是没有ubuntu,就拉取一下 命令为 docker pull ubuntu:18.04
3.使用 docker tag
将 ubuntu:18.04
这个镜像标记为 127.0.0.1:5000/ubuntu:18.04
。
docker tag ubuntu:18.04 127.0.0.1:5000/ubuntu:18.04
4.查看
docker image ls
5.使用 docker push
上传标记的镜像。
docker push 127.0.0.1:5000/ubuntu:18.04
6.用 curl
查看仓库中的镜像。
curl 127.0.0.1:5000/v2/_catalog
这里可以看到 {"repositories":["ubuntu"]}
,表明镜像已经被成功上传了。
7.测试一下
先删除已有镜像,再尝试从私有仓库中下载这个镜像。
docker image rm 127.0.0.1:5000/ubuntu:18.04
查看
docker image ls
再拉取
docker pull 127.0.0.1:5000/ubuntu:18.04
再查看
docker image ls
成功了!
8.配置信息
如果你不想使用 127.0.0.1:5000 作为仓库地址,比如想让本网段的其他主机也能把镜像推送到私有仓库。
你就得把例如 192.168.49.160:5000这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。
这是因为 Docker 默认不允许非 HTTPS
方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制。
对于使用 systemd
的系统,请在/etc/docker/daemon.json中写入如下内容(如果文件不存在请新建该文件)【适用于Ubuntu 16.04+, Debian 8+, centos 7】
sudo vim /etc/docker/daemon.json
填入内容
{ "registry-mirror": [ "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ], "insecure-registries": [ "192.168.49.160:5000" ] }
注意 registry-mirror是加速镜像的地址,insecure-registries是配置信息,注意两个 [ ] 之间的逗号
9.重新启动docker
sudo systemctl restart docker
再在B服务器搭建
1.填写配置信息
sudo vim /etc/docker/daemon.json
2.填入A的IP信息到B自己的配置文件中
{ "registry-mirror": [ "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ], "insecure-registries": [ "192.168.49.160:5000" ] }
3.重启docker
sudo systemctl restart docker
4.查看本地镜像
docker image ls
5.拉取A仓库里的镜像
docker pull 192.168.49.160:5000/ubuntu:18.04
哈哈,成功了!!!!
参考资料
官方文档指导 https://yeasy.gitbook.io/docker_practice/image/pull
https://blog.csdn.net/superjunenaruto/article/details/106073997
https://www.cnblogs.com/wang_yb/p/6855415.html