Docker / Kubernetes / 云计算

搭建 Docker 镜像仓库代理

温馨提示:本文最后更新于2021-10-18 10:25:42,某些文章具有时效性,若有错误或已失效,请在下方留言或提交工单提交工单
浅时光 · 10月18日 · 2021年 本文2666个字,预计阅读7分钟 3992次已读

一、场景说明


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

二、解决思路


三、操作步骤


1、环境说明

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

2、安装Docker

(1)添加 Docker yum 仓库

[[email protected] ~]# yum update

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

(2)安装 Docker

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

[[email protected] ~]# yum install -y docker-ce

(3)配置 Docker

  1. 设置 Docker 的日志格式为 json,日志文件大小为 100M,最多保存 3 个日志;
  2. 设置 Docker 镜像私有仓库和官方镜像加速地址;
  3. 设置 Docker 的数据目录到 /data/docker
  4. 设置 Docker 的 Storage Driver 为 overlay2
[[email protected] ~]# mkdir /etc/docker
[[email protected] ~]# 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

[[email protected] ~]# systemctl enable docker && systemctl start docker

(5)安装 Docker Compose

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

[[email protected] ~]# chmod +x /usr/local/bin/docker-compose
[[email protected] ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
[[email protected] ~]# docker-compose --version

(6)启动镜像仓库代理

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

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

#查看启动日志:
[[email protected] registry-proxy]# docker-compose logs -f

(7)解析域名

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

(8)使用镜像仓库代理

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

可以如下通过镜像仓库代理下载:
[[email protected] ~]# 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




本文作者:浅时光
原文链接:https://www.dqzboy.com/8709.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可
转载时请以超链接形式标明文章原始出处和作者信息

0 条回应

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

    本站已稳定运行: | 耗时 0.403 秒 | 查询 10 次 | 内存 38.10 MB