在CentOS上搭建自己的Docker镜像加速器

在CentOS上搭建自己的Docker镜像加速器

使用国内的Docker镜像加速源实在太憋屈了,比刚有互联网那会找代理服务器的IP地址还麻烦,于是决定自建Docker镜像加速器,这样玩转Docker会舒服一些。

在海外有个云服务器节点,是CentOS 7.9的操作系统,就选它了。

要在CentOS上搭建自己的Docker镜像加速器,可以使用Docker官方提供的Registry镜像缓存功能。这种方案允许我创建一个本地的镜像缓存服务器,它会从官方镜像源拉取镜像并缓存到本地,后续的拉取请求将直接从本地缓存获取,从而加速镜像下载过程。

一、环境准备

  1. 安装Docker

    确保CentOS已安装Docker,若未安装,可执行以下命令:

    1
    2
    3
    4
    5
    sudo yum install -y yum-utils
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo yum install docker-ce docker-ce-cli containerd.io
    sudo systemctl start docker
    sudo systemctl enable docker
  2. 开放端口

    确保防火墙开放5000端口(Registry默认端口):

    1
    2
    sudo firewall-cmd --add-port=5000/tcp --permanent
    sudo firewall-cmd --reload

    上面是基于firewalld的防火墙设置,如果你的系统用的还是iptables,使用以下命令打开端口:

    1
    2
    3
    4
    sudo iptables -I INPUT -p tcp --dport 5000 -j ACCEPT
    sudo service iptables save

    sudo iptables --list

    如果找不到iptables服务,可能是指定目录了,修改以上命令:

    1
    2
    3
    4
    sudo /sbin/iptables -I INPUT -p tcp --dport 5000 -j ACCEPT
    sudo service iptables save

    sudo /sbin/iptables --list

二、部署Registry缓存服务

使用Docker运行一个Registry容器作为缓存服务:

1
2
3
4
5
6
7
sudo docker run -d \
-p 5000:5000 \
--restart=always \
--name registry-cache \
-v /data/docker_registry:/var/lib/registry \
-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
registry:2

参数说明:

  • -p 5000:5000:将容器的5000端口映射到宿主机的5000端口
  • -v /data/docker_registry:/var/lib/registry:将镜像缓存数据存储到宿主机的/data/registry目录
  • -e REGISTRY_PROXY_REMOTEURL:指定上游镜像源为Docker官方镜像库

三、配置客户端使用本地镜像加速器

在需要使用该镜像加速器的Docker客户端上(包括本机),修改/etc/docker/daemon.json配置文件:

1
2
3
{
"registry-mirrors": ["http://your-server-ip:5000"]
}

其中your-server-ip是运行Registry缓存服务的服务器IP地址。

配置完成后,重启Docker服务:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

四、验证配置

  1. 检查镜像源配置

    1
    docker info | grep Mirrors

    输出应显示:

    1
    Registry Mirrors: http://your-server-ip:5000/
  2. 测试拉取镜像

    1
    docker pull nginx
  3. 查看缓存数据
    在Registry服务器上,检查缓存目录是否有内容:

    1
    ls -la /data/registry/docker/registry/v2/repositories/

五、配置HTTPS(可选但推荐)

默认情况下,Docker要求镜像加速器使用HTTPS连接。若要启用HTTPS,可按以下步骤操作:

  1. 生成自签名证书

    1
    2
    3
    4
    5
    6
    7
    8
    9
    mkdir -p /certs
    openssl req \
    -newkey rsa:4096 \
    -nodes \
    -sha256 \
    -keyout /certs/domain.key \
    -x509 \
    -days 365 \
    -out /certs/domain.crt
  2. 重启Registry服务并启用HTTPS

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    sudo docker stop registry-cache
    sudo docker rm registry-cache

    sudo docker run -d \
    -p 443:5000 \
    --restart=always \
    --name registry-cache \
    -v /data/registry:/var/lib/registry \
    -v /certs:/certs \
    -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
    -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
    registry:2
  3. 更新客户端配置
    将客户端的daemon.json修改为:

    1
    2
    3
    {
    "registry-mirrors": ["https://your-server-ip"]
    }

六、高级配置选项

1. 限制缓存大小

在启动Registry时添加以下环境变量:

1
2
3
-e REGISTRY_STORAGE_DELETE_ENABLED=true \  # 启用删除功能
-e REGISTRY_STORAGE_CACHE_BLOBDESCRIPTORS=inmemory \ # 缓存描述符
-e REGISTRY_STORAGE_FILESYSTEM_MAXSIZE=10737418240 \ # 限制最大10GB

2. 配置多镜像源

若需缓存多个镜像源(如Google Container Registry),可使用第三方工具如distribution/distributionmirrorbits

七、维护与监控

  1. 清理旧镜像

    1
    2
    3
    4
    5
    6
    7
    8
    # 停止Registry服务
    sudo docker stop registry-cache

    # 垃圾回收(删除未使用的层)
    sudo docker run --rm -v /data/docker_registry:/var/lib/registry registry:2 garbage-collect /etc/docker/registry/config.yml

    # 重启服务
    sudo docker start registry-cache
  2. 监控缓存使用情况

    1
    du -sh /data/docker_registry

通过以上步骤,您可以在CentOS上成功搭建自己的Docker镜像加速器,显著提高内部网络环境下的镜像拉取速度。


在CentOS上搭建自己的Docker镜像加速器
https://jycpp.github.io/24-05-19-自建Docker镜像加速器.html
作者
Jet Yan
发布于
2024年5月19日
许可协议