侧边栏壁纸
博主头像
jinn博客博主等级

行动起来,活在当下

  • 累计撰写 15 篇文章
  • 累计创建 5 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

docker代理搭建

jinn
2025-06-19 / 0 评论 / 0 点赞 / 4 阅读 / 3440 字

参考文档

1. 前期准备

准备一台国外可以正常访问 Docker 、Google 和 K8s 的服务器,且没有被墙的

2.基础环境安装

  1. 添加 YUM 源
[root@proxy ~]# yum update
[root@proxy ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@proxy ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装 Docker
#可以查看所有仓库中所有docker版本,并选择特定版本安装
[root@proxy ~]# yum list docker-ce --showduplicates | sort -r
[root@proxy ~]# yum install -y docker-ce
  1. 启动 Docker
[root@proxy ~]# systemctl enable docker && systemctl start docker

3. 部署镜像仓库代理

  1. 创建账号密码【可选】

配置账号密码:设置密码认证后,我们在进行拉取镜像时就需要先 docker login登入到我们的自建的代理镜像仓库,然后才可以拉取镜像

!!注意:执行htpasswd命令时,请把username和password修改为你自己的账号和密码

  1. 添加docker-compose.yml文件
  • 如果你要开启Proxy认证的话请把 #- ./htpasswd:/auth/htpasswd 注释取消掉

下载项目

git clone https://github.com/dqzboy/Docker-Proxy.git
  1. 启动
docker compose up -d
  1. nginx反向代理
    ● 进入 clone 项目的 nginx 目录,修改文件registry-proxy.conf中域名的信息
    ● 若没有域名申请一个,或者使用 CF 代理 HTTPS
    ● 启动 Nginx

  2. 通过 UI.YOU_DOMAIN 访问

image-dico.png

4. 自动化脚本配置

#!/bin/bash

# 检查环境类型
if command -v k3s &>/dev/null || systemctl status k3s &>/dev/null; then
  ENV="k3s"
  CERTS_DIR="/var/lib/rancher/k3s/agent/etc/containerd/certs.d"
elif command -v kubelet &>/dev/null; then
  ENV="k8s"
  CERTS_DIR="/etc/containerd/certs.d"
else
  echo "❌ 无法识别 Kubernetes 环境(既不是 k3s,也不是标准 kubelet)"
  exit 1
fi

echo "✅ 检测到环境类型:$ENV"
echo "📝 镜像代理配置目录:$CERTS_DIR"

# 镜像代理主机 IP
MIRROR_IP="192.168.17.222"

# registry => 端口映射
declare -A REGISTRY_PORTS=(
  [docker.io]=51000
  [ghcr.io]=52000
  [gcr.io]=53000
  [k8s.gcr.io]=54000
  [registry.k8s.io]=55000
  [quay.io]=56000
  [mcr.microsoft.com]=57000
  [docker.elastic.co]=58000
  [nvcr.io]=59000
)

# 是否强制覆盖(可选参数)
FORCE=false
if [[ "$1" == "--force" ]]; then
  FORCE=true
  echo "⚠️ 启用强制覆盖模式"
fi

# 遍历并生成 hosts.toml
for REGISTRY in "${!REGISTRY_PORTS[@]}"; do
  PORT=${REGISTRY_PORTS[$REGISTRY]}
  MIRROR_URL="http://${MIRROR_IP}:${PORT}"
  DIR="${CERTS_DIR}/${REGISTRY}"
  FILE="${DIR}/hosts.toml"

  sudo mkdir -p "$DIR"

  CONTENT=$(cat <<EOF
server = "https://${REGISTRY}"

[host."${MIRROR_URL}"]
  capabilities = ["pull", "resolve"]
EOF
)

  if [[ -f "$FILE" && "$FORCE" == false ]]; then
    CURRENT=$(sudo cat "$FILE")
    if [[ "$CURRENT" == "$CONTENT" ]]; then
      echo "✅ 已存在且相同: $FILE,跳过"
      continue
    else
      echo "⚠️ 文件已存在但内容不同: $FILE,使用 --force 参数可覆盖"
      continue
    fi
  fi

  echo "$CONTENT" | sudo tee "$FILE" > /dev/null
  echo "✅ 写入完成: $FILE"
done

# 提示用户是否需要重启服务
if [[ "$ENV" == "k3s" ]]; then
  echo "✅ 配置完成。请重启 K3s:sudo systemctl restart k3s"
else
  echo "✅ 配置完成。请重启 containerd:sudo systemctl restart containerd"
fi
0

评论区