Centos7配置代理安装最新版Docker并拉取镜像

项目介绍

"cat"不过多介绍就是你想的那个代理软件 温馨提示文章中所有名字已被修改为"cat",自行修改为原样

侵权联系删除,软件来自于魔戒,感谢魔戒官方提供的软件包

此项目是通过使用开源项目(https://github.com/Dreamacro/`"cat"`)作为核心程序,再结合脚本实现简单的代理功能。

主要是为了解决我们在服务器上下载GitHub等一些国外资源速度慢的问题。

使用须知

  • 运行本项目建议使用root用户,或者使用 sudo 提权。
  • 使用过程中如遇到问题,请优先查已有的 issues
  • 在进行issues提交前,请替换提交内容中是敏感信息(例如:订阅地址)。
  • 本项目是基于 "cat"yacd 进行的配置整合,关于"cat"、yacd的详细配置请去原项目查看。
  • 此项目不提供任何订阅信息,请自行准备"cat"订阅地址。
  • 运行前请手动更改.env文件中的"cat"_URL变量值,否则无法正常运行。
  • 当前在RHEL系列和Debian系列Linux系统中测试过,其他系列可能需要适当修改脚本。
  • 支持 x86_64/aarch64 平台

注意 :当你在使用此项目时,遇到任何无法独自解决的问题请优先前往 Issues 寻找解决方法。由于空闲时间有限,后续将不再对Issues中 "已经解答"、"已有解决方案" 的问题进行重复性的回答。

使用教程

下载项目

bash 复制代码
$ git clone https://github.com/wanhebin/"cat"-for-linux.git

进入到项目目录,编辑.env文件,修改变量"cat"_URL的值。

bash 复制代码
$ cd "cat"-for-linux
$ vim .env

注意: .env 文件中的变量 "cat"_SECRET 为自定义 "cat" Secret,值为空时,脚本将自动生成随机字符串。

启动程序

直接运行脚本文件start.sh

  • 进入项目目录
bash 复制代码
$ cd "cat"-for-linux
  • 运行启动脚本
bash 复制代码
$ sudo bash start.sh

正在检测订阅地址...
"cat"订阅地址可访问!                                      [  OK  ]

正在下载"cat"配置文件...
配置文件config.yaml下载成功!                              [  OK  ]

正在启动"cat"服务...
服务启动成功!                                             [  OK  ]

"cat" Dashboard 访问地址:http://<ip>:9090/ui
Secret:xxxxxxxxxxxxx

请执行以下命令加载环境变量: source /etc/profile.d/"cat".sh

请执行以下命令开启系统代理: proxy_on

若要临时关闭系统代理,请执行: proxy_off
bash 复制代码
$ source /etc/profile.d/"cat".sh
$ proxy_on
  • 检查服务端口
bash 复制代码
$ netstat -tln | grep -E '9090|789.'
tcp        0      0 127.0.0.1:9090          0.0.0.0:*               LISTEN     
tcp6       0      0 :::7890                 :::*                    LISTEN     
tcp6       0      0 :::7891                 :::*                    LISTEN     
tcp6       0      0 :::7892                 :::*                    LISTEN
  • 检查环境变量
bash 复制代码
$ env | grep -E 'http_proxy|https_proxy'
http_proxy=http://127.0.0.1:7890
https_proxy=http://127.0.0.1:7890

以上步鄹如果正常,说明服务"cat"程序启动成功,现在就可以体验高速下载github资源了。

重启程序

如果需要对"cat"配置进行修改,请修改 conf/config.yaml 文件。然后运行 restart.sh 脚本进行重启。

注意:

重启脚本 restart.sh 不会更新订阅信息。

停止程序

  • 进入项目目录
bash 复制代码
$ cd "cat"-for-linux
  • 关闭服务
bash 复制代码
$ sudo bash shutdown.sh

服务关闭成功,请执行以下命令关闭系统代理:proxy_off
bash 复制代码
$ proxy_off

然后检查程序端口、进程以及环境变量http_proxy|https_proxy,若都没则说明服务正常关闭。

"cat" Dashboard

  • 访问 "cat" Dashboard

通过浏览器访问 start.sh 执行成功后输出的地址,例如:http://192.168.0.1:9090/ui

  • 登录管理界面

API Base URL一栏中输入:http://<ip>:9090 ,在Secret(optional)一栏中输入启动成功后输出的Secret。

点击Add并选择刚刚输入的管理界面地址,之后便可在浏览器上进行一些配置。

  • 更多教程

此 "cat" Dashboard 使用的是yacd项目,详细使用方法请移步到yacd上查询。

常见问题

  1. 部分Linux系统默认的 shell /bin/sh 被更改为 dash,运行脚本会出现报错(报错内容一般会有 -en [ OK ])。建议使用 bash xxx.sh 运行脚本。

  2. 部分用户在UI界面找不到代理节点,基本上是因为厂商提供的"cat"配置文件是经过base64编码的,且配置文件格式不符合"cat"配置标准。

    目前此项目已集成自动识别和转换"cat"配置文件的功能。如果依然无法使用,则需要通过自建或者第三方平台(不推荐,有泄露风险)对订阅地址转换。

  3. 程序日志中出现error: unsupported rule type RULE-SET报错,解决方法查看官方WIKI

无法登录Web界面

确保 RESTful API 正确

shell 复制代码
[root@localhost "cat"-for-linux-master]# vim conf/config.yaml 

# HTTP 代理端口
port: 7890

# SOCKS5 代理端口
socks-port: 7891

# Linux 和 macOS 的 redir 代理端口
redir-port: 7892

# 允许局域网的连接
allow-lan: true

# 规则模式:Rule(规则) / Global(全局代理)/ Direct(全局直连)
mode: rule

# 设置日志输出级别 (默认级别:silent,即不输出任何内容,以避免因日志内容过大而导致程序内存溢出)。
# 5 个级别:silent / info / warning / error / debug。级别越高日志输出量越大,越倾向于调试,若需要请自行开启。
log-level: silent
# "cat" 的 RESTful API
external-controller: '0.0.0.0:9090'

# RESTful API 的口令
secret: 'Abc@1234'

配置Docker代理

Dockerd 代理

在执行docker pull时,是由守护进程dockerd来执行。因此,代理需要配在dockerd的环境中。而这个环境,则是受systemd所管控,因此实际是systemd的配置。

shell 复制代码
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf

在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下内容:

shell 复制代码
cat > /etc/systemd/system/docker.service.d/proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
EOF

要换成可用的免密代理。通常使用 cntlm 在本机自建免密代理,去对接公司的代理。可参考《Linux下安装配置Cntlm 代理》

Container 代理

在容器运行阶段,如果需要代理上网,则需要配置 ~/.docker/config.json。以下配置,只在Docker 17.07及以上版本生效。

shell 复制代码
mkdir ~/.docker/
cat > ~/.docker/config.json << EOF
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:7890",
     "httpsProxy": "http://127.0.0.1:7890",
     "noProxy": "localhost,127.0.0.1,.example.com"
   }
 }
}
EOF

这个是用户级的配置,除了 proxies,docker login 等相关信息也会在其中。而且还可以配置信息展示的格式、插件参数等。

此外,容器的网络代理,也可以直接在其运行时通过 -e 注入 http_proxy 等环境变量。这两种方法分别适合不同场景。config.json 非常方便,默认在所有配置修改后启动的容器生效,适合个人开发环境。在CI/CD的自动构建环境、或者实际上线运行的环境中,这种方法就不太合适,用 -e 注入这种显式配置会更好,减轻对构建、部署环境的依赖。当然,在这些环境中,最好用良好的设计避免配置代理上网。

Docker Build 代理

虽然 docker build 的本质,也是启动一个容器,但是环境会略有不同,用户级配置无效。在构建时,需要注入 http_proxy 等参数。

shell 复制代码
docker build . \
    --build-arg "HTTP_PROXY=http://127.0.0.1:7890/" \
    --build-arg "HTTPS_PROXY=http://127.0.0.1:7890/" \
    --build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
    -t your/image:tag

注意:无论是 docker run 还是 docker build,默认是网络隔绝的。如果代理使用的是 localhost:3128 这类,则会无效。这类仅限本地的代理,必须加上 --network host 才能正常使用。而一般则需要配置代理的外部IP,而且代理本身要开启 Gateway 模式。

命令行代理

shell 复制代码
docker run -it --env HTTP_PROXY="http://127.0.0.1:7890" --env HTTPS_PROXY="http://127.0.0.1:7890" ubuntu bash

查看Docker配置信息

shell 复制代码
[root@localhost "cat"-for-linux-master]# docker info | grep -i proxy
...
 HTTP Proxy: http://127.0.0.1:7890
 HTTPS Proxy: http://127.0.0.1:7890
 No Proxy: localhost,127.0.0.1,.example.com
...

重启服务

shell 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

NO_Proxy优化

在配置 NO_PROXY 时,你需要确保它覆盖到所有你不希望通过代理的域名和 IP 地址。通常情况下,NO_PROXY 可以包括以下几类:

  1. 本地主机localhost, 127.0.0.1, ::1 (IPv6 本地地址)
  2. 内部网络 :常见的内部网络 IP 段如 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 等。
  3. 特定域名:如果你的内部服务使用特定域名或者子域名,可以将它们添加进去。

以下是一个优化的 NO_PROXY 配置示例:

bash 复制代码
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export NO_PROXY=localhost,127.0.0.1,::1,.example.com,.localdomain,.aliyun.com,mirrors.aliyun.com,mirrors.aliyuncs.com,mirrors.cloud.aliyuncs.com
解释:
  • localhost,127.0.0.1,::1:本地环回地址。
  • 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16:常见的私有 IP 地址范围,用于确保内网流量不会通过代理。
  • .example.com:对于 example.com 的所有子域名都不使用代理。
  • .localdomain:假设你有一个内网的局域网域名,可以像这样添加。
  • .aliyun.com 覆盖所有阿里云的子域名。
  • mirrors.aliyun.commirrors.aliyuncs.commirrors.cloud.aliyuncs.com 是你的 YUM 源配置文件中提到的阿里云镜像站的域名。

配置Containerd代理

创建文件

  1. 创建 containerd.service.d 目录:
bash 复制代码
mkdir -p /etc/systemd/system/containerd.service.d/
  1. 创建或编辑 /etc/systemd/system/containerd.service.d/http-proxy.conf 文件 :
    使用 cat 命令创建或编辑 http-proxy.conf 文件:
bash 复制代码
cat > /etc/systemd/system/containerd.service.d/http-proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,::1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local,<nodeCIDR>,<APIServerInternalURL>,<serviceNetworkCIDRs>,<etcdDiscoveryDomain>,<clusterNetworkCIDRs>,<platformSpecific>,<REST_OF_CUSTOM_EXCEPTIONS>,.example.com,.localdomain,.aliyun.com,mirrors.aliyun.com,mirrors.aliyuncs.com,mirrors.cloud.aliyuncs.com"
EOF

重启 containerd 服务

  1. 重新加载 systemd 配置:
bash 复制代码
systemctl daemon-reload
  1. 重启 containerd:
bash 复制代码
systemctl restart containerd

NO_PROXY 的推荐配置

NO_PROXY 中配置以下地址和网段可以确保这些流量不会经过代理:

  • 本地地址和网段:

    • localhost
    • 127.0.0.1
    • ::1
    • 127.0.0.0/8
  • Kubernetes 的默认域名后缀:

    • .svc
    • .cluster.local
  • Kubernetes Node 网段 : <nodeCIDR>

    • 这个网段代表所有 Kubernetes 节点的 IP 地址范围。
  • APIServer 的内部 URL : <APIServerInternalURL>

    • 这通常是集群内部用于访问 Kubernetes API Server 的地址。
  • Service Network 网段 : <serviceNetworkCIDRs>

    • Kubernetes Service 的网络范围。
  • etcd 的 Discovery Domain : <etcdDiscoveryDomain>

    • 如果有使用 etcd 的发现服务,需要添加对应的域名。
  • Cluster Network 网段 : <clusterNetworkCIDRs>

    • 这个代表集群中使用的网络范围。
  • 其他内网网段:

    • 10.0.0.0/8
    • 172.16.0.0/12
    • 192.168.0.0/16
  • 其他特定平台相关网段 : <platformSpecific>

    • 例如 DevOps 工具的网段,Git 仓库等。
  • 其他自定义 NO_PROXY 网段 : <REST_OF_CUSTOM_EXCEPTIONS>

    • 任何需要特殊处理的例外网段。
相关推荐
朝九晚五ฺ6 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
Kkooe7 小时前
GitLab|数据迁移
运维·服务器·git
wuxingge8 小时前
k8s1.30.0高可用集群部署
云原生·容器·kubernetes
久醉不在酒8 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql
志凌海纳SmartX9 小时前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总9 小时前
nacos与k8s service健康检查详解
云原生·容器·kubernetes
BUG弄潮儿9 小时前
k8s 集群安装
云原生·容器·kubernetes
意疏9 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker
虚拟网络工程师9 小时前
【网络系统管理】Centos7——配置主从mariadb服务器案例(下半部分)
运维·服务器·网络·数据库·mariadb
墨鸦_Cormorant9 小时前
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
redis·nginx·docker