当前位置:   article > 正文

如何搭建代理镜像仓库_vps搭建docker镜像代理

vps搭建docker镜像代理

背景:

不知道各位有没有我这种尴尬:kubernetes搭建过程中需要拉取到一些镜像,比如: dockerhub的镜像,这个还好。毕竟有加速器。but k8s.gcr.io,quay.io.这些怎么搞?正巧搭建kubeadm 1.25,helm安装cilium的时候悲摧了。下载不动怎么搞?docker时代的时候我还可以直接导入,但是containerd时代了 导入了还是要麻烦一些阿?搜索引擎搜了一下,找到下面三个文章,借鉴一下!
参照:搭建Docker镜像仓库代理
搭建容器仓库的镜像服务器(gcr, ghcr, quay, k8s-gcr)
真◉彻底解决 gcr、quay、DockerHub 镜像下载难题!

搭建镜像代理仓库

其中米开朗基杨大佬写的真◉彻底解决 gcr、quay、DockerHub 镜像下载难题!搭建一个k3s集群搞比较全国,但是我国外服务器就一台,还是轻量级的服务器…开始就是下载镜像然后上传到国内harbor仓库的…这里就用搭建Docker镜像仓库代理的方式去操作了!

前提条件

服务器在国外
四个域名 以及ssl证书

安装Docker

注意:我这台服务器为轻量服务器,ubuntu操作系统(docker我之前其实早安装了…)

apt-get update
apt-get upgrade
apt-get install docker*
  • 1
  • 2
  • 3

如果是**centos **请参照:

yum update
 
yum install -y yum-utils device-mapper-persistent-data lvm2
 
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

配置Docker

  1. 设置 Docker 的日志格式为 json,日志文件大小为 100M,最多保存 3 个日志;
  2. 设置 Docker 镜像私有仓库和官方镜像加速地址;
  3. 设置 Docker 的数据目录到 /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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

启动 Docker

systemctl enable docker && systemctl start docker
  • 1

安装 Docker Compose

看版本吧,我没有安装什么最新的 ,毕竟能跑起来就可以对我来说

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
  • 1
  • 2
  • 3
  • 4

image.png
启动镜像仓库代理

git clone 相关registry-proxy仓库配置文件

 git clone https://github.com/findsec-cn/registry-proxy.git
 cd registry-proxy
  • 1
  • 2

自定义修改配置文件

  1. 将域名的证书放置到 cert 目录下,并把证书文件名称命名为该目录下的server名称;
  2. 其中 server.crt 为 ssl 证书文件, server.key 为 ssl 私钥。
  3. 注意:证书一定要是对应域名的,不然进行下载镜像会提示x509
  4. 修改 nginx.conf 配置文件,将配置文件中的域名替换成自己的域名(xxx.com)
docker-compose.yaml修改

我这里先修改以下docker-compose.yaml,原github项目只代理了gcr.io,k8s.gcr.io,恩我这里主要是使用代理quay.io仓库,如果代理其他仓库可类似方法!

version: '2'
services:
  local:
    container_name: reg-local
    image: findsec/registry-proxy:latest
    restart: always
    environment:
      - DELETE_ENABLED=true
    volumes:
      - ~/data/registry:/var/lib/registry
    ports:
      - 5000:5000
    networks:
      - registry-net
  quay:
    container_name: reg-quay
    image: findsec/registry-proxy:latest
    restart: always
    environment:
      - PROXY_REMOTE_URL=https://quay.io
    volumes:
      - ~/data/registry:/var/lib/registry
    networks:
      - registry-net
  gcr:
    container_name: reg-gcr
    image: findsec/registry-proxy:latest
    restart: always
    environment:
      - PROXY_REMOTE_URL=https://gcr.io
    volumes:
      - ~/data/registry:/var/lib/registry
    networks:
      - registry-net
  k8s-gcr:
    container_name: reg-k8s-gcr
    image: findsec/registry-proxy:latest
    restart: always
    environment:
      - PROXY_REMOTE_URL=https://k8s.gcr.io
    volumes:
      - ~/data/registry:/var/lib/registry
    networks:
      - registry-net
  ui:
    container_name: reg-ui
    image: findsec/registry-ui:latest
    restart: always
    links:
      - local:reg-local
    environment:
      - REGISTRY_TITLE=My Private Docker Registry
      - REGISTRY_URL=http://reg-local:5000
      - DELETE_IMAGES=true
    networks:
      - registry-net
  nginx:
    container_name: reg-nginx
    image: nginx:alpine
    restart: always
    ports:
      - 80:80
      - 443:443
    links:
      - ui:reg-ui
      - gcr:reg-gcr
      - quay:reg-quay
      - k8s-gcr:reg-k8s-gcr
       
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - ./cert:/etc/nginx/ssl
    networks:
      - registry-net

networks:
  registry-net:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77

依着葫芦画瓢。根据仓库中yaml文件中gcr配置 生成一个quay的配置:
image.png
nginx相关配置中link也添加上quay配置:
image.png

修改nginx.conf中域名:
 sed -i 's/xxx.com/zhangpeng.com/g' nginx.conf
  • 1

image.png
添加quay域名相关配置:
image.png
最终配置文件如下:

server {
    listen       80;
    listen       443 ssl;

    server_name  hub.zhangpeng.com;

    proxy_connect_timeout 600;
    proxy_send_timeout    600;
    proxy_read_timeout    600;
    send_timeout          600;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location / {
        proxy_pass   http://reg-ui:80;

        proxy_buffering off;
        proxy_request_buffering off;
    }
}
server {
    listen       80;
    listen       443 ssl;

    server_name  gcr.zhangpeng.com;

    proxy_connect_timeout 600;
    proxy_send_timeout    600;
    proxy_read_timeout    600;
    send_timeout          600;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location / {
        proxy_pass   http://reg-gcr:5000;

        proxy_buffering off;
        proxy_request_buffering off;
    }
}
server {
    listen       80;
    listen       443 ssl;

    server_name  k8s-gcr.zhangpeng.com;

    proxy_connect_timeout 600;
    proxy_send_timeout    600;
    proxy_read_timeout    600;
    send_timeout          600;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location / {
        proxy_pass   http://reg-k8s-gcr:5000;

        proxy_buffering off;
        proxy_request_buffering off;
    }
}
server {
    listen       80;
    listen       443 ssl;

    server_name  quay.zhangpeng.com;

    proxy_connect_timeout 600;
    proxy_send_timeout    600;
    proxy_read_timeout    600;
    send_timeout          600;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location / {
        proxy_pass   http://reg-quay:5000;

        proxy_buffering off;
        proxy_request_buffering off;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
ssl证书

一定记得要上传ssl证书到cert目录下:
image.png
当然了你也可以修改docker-compose.yaml.修改nginx中volumes中挂载路径
image.png
也可以修改nginx.conf文件中ssl_certificate ssl_certificate_key 文件名:
image.png

启动镜像仓库代理

docker-compose up -d
docker-compose logs -f
  • 1
  • 2

可能会出现证书配置不对的报错,哈哈哈自己解决以下…

解析域名

我的域名用的dnspod
origin_img_v2_0e20064c-f43a-47fc-9278-58b75349bb7g.jpg

使用镜像仓库代理

本地工作环境为rocky 8.5安装了podman 使用podman进行测试:

###要下载镜像
[root@zhangpeng ~]# podman pull k8s.gcr.io/pause:3.6
###通过镜像仓库代理方式下载:
[root@zhangpeng ~]# podman pull k8s-gcr.zhangpeng.com/pause:3.6

  • 1
  • 2
  • 3
  • 4
  • 5

image.png
访问hub.zhangpeng.com。可以看到我们下载的镜像被缓存了
image.png

接下来可以进阶的:

image的清理

不能一直缓存吧,空间写满了怎么办,最苯的方法写一个crontab:


* * */2 * * /usr/bin/rm -rf /var/lib/registry/* &>/dev/null
  • 1
  • 2

防白嫖认证

服务器镜像代理被白嫖怎么办?最简单的搞一个htpasswd搞一下:

 apt-get install apache2-utils

  • 1
  • 2

image.png

htpasswd -c passwd zhangpeng
  • 1

image.png
然后修改nginx.conf文件,我这里为了演示只修改了k8s-gcr这一个的相关配置,其他的都如此就可以:

server {
    listen       80;
    listen       443 ssl;

    server_name  k8s-gcr.zhangpeng.com;

    proxy_connect_timeout 600;
    proxy_send_timeout    600;
    proxy_read_timeout    600;
    send_timeout          600;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    auth_basic "请输入用户和密码"; # 验证时的提示信息
    auth_basic_user_file /etc/nginx/passwd; # 认证文件
    location / {
        proxy_pass   http://reg-k8s-gcr:5000;

        proxy_buffering off;
        proxy_request_buffering off;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

image.png
重启docker-compose服务:
注:当前registry目录下

docker-compose down
docker-compose up -d
  • 1
  • 2

本地测试:
还拿pause镜像为例,恩显示认证失败了

 podman pull k8s-gcr.zhangpeng.com/pause:3.5
  • 1

image.png

podman login k8s-gcr.zhangpeng.com
podman pull k8s-gcr.zhangpeng.com/pause:3.5
  • 1
  • 2

如下图,pull成功:
image.png
image.png

其他的?

容器运行时配置的配置,参照米开朗基杨大佬:
https://blog.csdn.net/alex_yangchuansheng/article/details/113855809#t10
image.png
感谢各位大佬的踩坑,后人能那么方便的使用!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/774777
推荐阅读
相关标签
  

闽ICP备14008679号