如何搭建代理镜像仓库

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 不知道各位有没有我这种尴尬:kubernetes搭建过程中需要拉取到一些镜像,比如: dockerhub的镜像,这个还好。毕竟有加速器。but k8s.gcr.io,quay.io.这些怎么搞?正巧搭建kubeadm 1.25,helm安装cilium的时候悲摧了。下载不动怎么搞?docker时代的时候我还可以直接导入,但是containerd时代了 导入了还是要麻烦一些阿?搜索引擎搜了一下,找到下面三个文章,借鉴一下!

背景:

不知道各位有没有我这种尴尬: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*

如果是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

配置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

启动 Docker

systemctl enable docker && systemctl start docker

安装 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

启动镜像仓库代理

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

git clone https://github.com/findsec-cn/registry-proxy.git

cd registry-proxy

自定义修改配置文件

  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:

依着葫芦画瓢。根据仓库中yaml文件中gcr配置 生成一个quay的配置:

nginx相关配置中link也添加上quay配置:

修改nginx.conf中域名:

sed -i 's/xxx.com/zhangpeng.com/g' nginx.conf

添加quay域名相关配置:

最终配置文件如下:

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;

   }

}

ssl证书

一定记得要上传ssl证书到cert目录下:

当然了你也可以修改docker-compose.yaml.修改nginx中volumes中挂载路径

也可以修改nginx.conf文件中ssl_certificate ssl_certificate_key 文件名:

启动镜像仓库代理

docker-compose up -d

docker-compose logs -f

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

解析域名  

我的域名用的dnspod

使用镜像仓库代理

本地工作环境为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


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

接下来可以进阶的:

image的清理

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

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

防白嫖认证

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

apt-get install apache2-utils


htpasswd -c passwd zhangpeng

然后修改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;

   }

}


重启docker-compose服务:

注:当前registry目录下

docker-compose down

docker-compose up -d

本地测试:

还拿pause镜像为例,恩显示认证失败了

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

podman login k8s-gcr.zhangpeng.com

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

如下图,pull成功:

其他的?

容器运行时配置的配置,参照米开朗基杨大佬:

https://blog.csdn.net/alex_yangchuansheng/article/details/113855809#t10

感谢各位大佬的踩坑,后人能那么方便的使用!

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
7月前
|
安全 应用服务中间件 数据安全/隐私保护
企业实战(5) Docker私有镜像仓库Harbor的部署与使用详解
企业实战(5) Docker私有镜像仓库Harbor的部署与使用详解
287 0
|
7月前
|
数据安全/隐私保护 Docker 容器
分分钟搞定阿里云私有Docke镜像仓库的搭建
分分钟搞定阿里云私有Docke镜像仓库的搭建
1957 0
|
存储 网络协议 Linux
Podman 部署私有镜像仓库
Podman 部署私有镜像仓库
|
2月前
阿里云配置dcoker镜像仓库
阿里云配置dcoker镜像仓库
112 0
|
应用服务中间件 Shell Docker
Docker Hub 公有镜像在国内拉取加速配置
通过加速,国内用户能够快速访问最流行的 Docker 镜像。 仓库 registry.docker-cn.com 包含流行的公有镜像。私有镜像仍需要从 Docker Hub 镜像库中拉取。 以下命令直接从镜像加速地址进行拉取: $ docker pull registry.
32109 0
|
3月前
|
Java 测试技术 Maven
云效问题之构建docker镜像从容器仓库拉取镜像报错如何解决
云效镜像是指存储在阿里云效服务中的容器镜像,它们可以用于持续集成和持续部署(CI/CD)流程中;本合集将介绍如何在云效平台上管理和使用镜像资源,以及常见的镜像问题和解决办法。
71 0
|
4月前
|
NoSQL 应用服务中间件 数据安全/隐私保护
Docker镜像创建及管理(Hub官方仓库使用及私有注册中心搭建)
Docker镜像创建及管理(Hub官方仓库使用及私有注册中心搭建)
|
4月前
|
存储 JSON 算法
docker私有镜像仓库的搭建及认证
docker私有镜像仓库的搭建及认证
230 0
|
Shell Docker 容器
docker--从仓库下载镜像到推送自己的项目到仓库步骤详解
怎样从仓库下载的镜像,变成容器,并在容器中制作项目,再将容器变成镜像,然后将镜像推送到仓库?        一:从官网下载镜像        官方的https://hub.docker.
3731 0
|
8月前
|
存储 安全 数据安全/隐私保护
企业级镜像仓库Harbor的安装与配置
Harbor是一个开源的容器镜像仓库管理系统,具有丰富的安全和管理功能。它可以在企业环境中搭建私有仓库,并提供可信度、多租户支持、定制性等特点。
539 1