Docker / Kubernetes / 云原生

搭建 Docker 镜像仓库代理

温馨提示:本文最后更新于2021-10-18 10:25:42,某些文章具有时效性,若有错误或已失效,请在下方留言或问题自助查询
当前位置: 首页 » 云原生 » Docker » 搭建 Docker 镜像仓库代理
浅时光博客 · 10月18日 · 2021年 本文2666个字,预计阅读7分钟 26189次已读

一、场景说明


在部署K8S集群时,最大的一个难题就是镜像下载的问题,由于好多镜像是保存在k8s.gcr.io这个仓库的,因为国内的GFW拦截,这个网站在国内是完全无法访问的;有些镜像可以通过阿里云上用户同步的k8s.gcr.io上的镜像解决国内无法下载gcr镜像的问题,但是有些镜像还是在阿里云镜像仓库上搜索不到的,这个时候我们就需要自己动手解决了。

二、解决思路


三、操作步骤


1、环境说明

  • 一台国外服务器
  • 一个域名和域名相关的SSL证书(docker pull 镜像时需要验证域名证书)

2、安装Docker

(1)添加 Docker yum 仓库

[root@dqzboy ~]# yum update

[root@dqzboy ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
 
[root@dqzboy ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

(2)安装 Docker

#可以查看所有仓库中所有docker版本,并选择特定版本安装
[root@dqzboy ~]# yum list docker-ce --showduplicates | sort -r

[root@dqzboy ~]# yum install -y docker-ce

(3)配置 Docker

  1. 设置 Docker 的日志格式为 json,日志文件大小为 100M,最多保存 3 个日志;
  2. 设置 Docker 镜像私有仓库和官方镜像加速地址;
  3. 设置 Docker 的数文章来源(Source):浅时光博客据目录到 /data/docker
  4. 设置 Docker 的 Storage Driver 为 overlay2
[root@dqzboy ~]# mkdir /etc/docker
[root@dqzboy ~]# cat << EOF > /etc/docker/daemon.json
{
  "log-driver": "json-file",
    "log-opts": {
      "max-size": "100m",
      "max-file": "3"
    },
  "insecure-registry": [
    "hub.dqzboy.com"
  ],
  "registry-mirror": "https://a7ye1cuu.mirror.aliyuncs.com",
  "data-root": "/data/docker",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

(4)启动 Docker

[root@dqzboy ~]# systemctl enable docker && systemctl start docker

(5)安装 Docker Compose

[root@dqzboy ~]# curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

[root@dqzboy ~]# chmod +x /usr/local/bin/docker-compose
[root@dqzboy ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
[root@dqzboy ~]# docker-compose --version

(6)启动镜像仓库代理

【1】启动前准备
  • 从 github 下载 registry-proxy 配置文件:
[root@dqzboy ~]# git clone https://github.com/findsec-cn/registry-proxy.git
[root@dqzboy ~]# cd registry-proxy
  1. 将域名的证书放置到 cert 原文链接:https://www.dqzboy.com目录下,并把证书文件名称命名为该目录下的server名称;
  2. 其中 server.crt 为 ssl 证书文件, server.key 为 ssl 私钥。原文链接:https://www.dqzboy.com
  3. 注意:证书一定要是对应域名的,不然进行下载镜像会提示x509
  4. 修改 nginx.conf 配置文件,将配置文件中的域名替换成自己的域名(dqzboy.com)
[root@dqzboy ~]# sed -i 's/xxx.com/dqzboy.com/g' nginx.conf

#确认更换后的域名
[root@dqzboy registry-proxy]# grep com nginx.conf 
    server_name  hub.dqzboy.com;
    server_name  gcr.dqzboy.com;
    server_name  k8s-gcr.dqzboy.com;
【2】启动镜像仓库代理
#启动镜像仓库代理:
[root@dqzboy registry-proxy]# docker-compose up -d

#查看启动日志:
[root@dqzboy registry-proxy]# docker-compose logs -f

文章来源(Source):浅时光博客

(7)解析域名

  • 将 hub.dqzboy.com、gcr.dqzboy.com、k8s-gcr.dqzboy.com解析到此服务器的地址上。
  • 通过 http://hub.dqzboy.com 查看镜像仓库缓存的镜像;
  • 通过gcr.dqzboy.com下载镜像文章来源(Source):https://www.dqzboy.com

(8)使用镜像仓库代理

比如我们要下载镜像:
[root@dqzboy ~]# docker pull k8s.gcr.io/pause:3.1

可以如下通过镜像仓库代理下载:
[root@dqzboy ~]# docker pull gcr.dqzboy.com/google-containers/pause:3.1
搭建 Docker 镜像仓库代理-浅时光博客
  • 访问hub.dqzboy.com页面就可以看到上面我们下载的镜像已经被缓存了
搭建 Docker 镜像仓库代理-浅时光博客

(9)修改docker配置

  • 在docker的daemon.json配置文件中添加上我们的代理服务的域名,然后重启docker程序
{
    "registry-mirrors": [
        "https://gcr.dqzboy.com"
    ]
}

#重启docker
systemctl restart docker




关注本站官方微信公众号『精彩程序人生』

扫描左侧二维码关注我们的微信公众帐号,在微信公众帐号中回复【资料】获取IT技术文档。
关注博主不迷路~


本文作者:浅时光博客
原文链接:https://www.dqzboy.com/8709.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以超链接形式标明文章原始出处和作者信息
免责声明:本站发布的内容(图片、视频和文字)以及一切破解补丁、注册激活和软件解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。访问和下载本站内容,说明您已同意上述条款!


1 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

  1. Devops小白安徽·合肥2022-5-17 · 23:26

    这台服务器应该是国外的吧

本站已稳定运行: | 耗时 0.224 秒 | 查询 84 次 | 内存 11.20 MB