如何在 CentOS 8 中搭建 Docker 私有镜像仓库。
先行安装了 Docker,本文中使用的 Docker 版本是 20.10.9。
$ docker --version
Docker version 20.10.9, build c2ea9bc
由于需要使用远程访问,因此需要使用网络模块,并且要保证此模块开机自动启动。
$ cat > /etc/modules-load.d/docker.conf <<EOF
overlay
br_netfilter
EOF
$ modprobe overlay br_netfilter
$ lsmod | egrep 'overlay|br_netfilter'
br_netfilter 22256 0
bridge 155432 1 br_netfilter
overlay 91659 19
拉取 registry 镜像
$ docker pull registry
现在 hub.docker.com 可能无法访问,需要自行想办法解决。
启动 registry 镜像,需要注意以下几点:
开机启动:设置容器的 restart 属性为 always。
本地目录挂载:将本地目录挂载到容器中,这样即便容器消亡了,数据仍存在。
端口映射:默认映射端口为 5000,可自定义。
$ mkdir -p /data/docker/registry
$ docker run -itd -v /data/docker/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry
验证是否可用:
$ curl http://172.17.140.123:5000/v2
{}
看到输出结果为 "{}",这表示部署成功了。
查看仓库中已有的镜像列表:
$ curl http://172.17.140.123:5000/v2/_catalog
{"repositories":[]}
当前还没有上传任何镜像,所以结果是空的。
修改 Docker 配置文件 /etc/docker/daemon.json,加入私有仓库资源:
$ cat /etc/docker/daemon.json
...
"registry-mirrors": [ "172.17.140.123:5000" ],
"insecure-registries": [ "172.17.140.123:5000" ],
...
重启 Docker 使之生效:
$ systemctl daemon-reload
$ systemctl restart docker
将当前某个镜像,加上本地仓库tag,并推送到服务器上:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry 2 cfb4d9904335 10 months ago 25.4MB
registry latest cfb4d9904335 10 months ago 25.4MB
$ docker tag registry 172.17.140.123:5000/registry
$ docker push registry 172.17.140.123:5000/registry
在 push 的时候,可能会遇到类似下面的报错:
http: server gave HTTP response to HTTPS client
这是由于 Docker 镜像拉取与推送服务默认使用的是https 协议,但是本地私有仓库服务器上面还没配置https。可以确认/修改 Docker 客户端配置,改用 http 协议通信。
$ cat /etc/docker/daemon.json
...
"insecure-registries": [ "172.17.140.123:5000" ],
...
确保有上述 insecure-registries 这行配置,重启 Docker 再重试应该就可以了。
再次拉取本地仓库上的镜像,确认无误:
$ docker pull registry 172.17.140.123:5000/registry
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
172.17.140.123:5000/registry latest cfb4d9904335 10 months ago 25.4MB
registry 2 cfb4d9904335 10 months ago 25.4MB
registry latest cfb4d9904335 10 months ago 25.4MB
以上。
Enjoy GreatSQL :)
文章推荐:
想看更多技术好文,点个“在看”吧