linux 通过 shadowsocks 代理 下载 docker 镜像
Shadowsocks-libev
是一个轻量级安全 SOCKS5 代理,适用于嵌入式设备和低端设备。
https://github.com/shadowsocks/shadowsocks-libev
为什么要写这篇文章
我有一个香橙派,在下载 docker 镜像时,国内镜像源不稳定,用阿里云的容器加速器,个人免费版下载的镜像又很旧,跟不上官方的更新速度。
所以,就想着用个代理,直接从官网
http://hub.docker.com
下载镜像。
一、linux 服务端(debian amd64)
安装 shadowsocks-libev
1 | apt install -y shadowsocks-libev |
安装后会默认启动
ss-server
服务
1 | # 查看 ss-server 是否运行 |
修改配置文件
注意 server
可以用 ipv4 0.0.0.0
、ipv6 [::0]
来表示本机公网ip
也可以是真实的服务器公网ip,可以使用 curl -s ipinfo.io/ip
获取本机公网ip
但不能是 127.0.0.1
、 [::1]
1 | cat > /etc/shadowsocks-libev/config.json << EOF |
重启 shadowsocks-libev 使配置文件生效
1 | # 重启 |
放行 8388 服务端口
1 | iptables -I INPUT -p tcp --dport 8388 -j ACCEPT |
二、linux 客户端代理(香橙派 debian arm64)
1、安装 shadowsocks-libev
1 | apt install -y shadowsocks-libev |
停止
shadowsocks-libev
默认运行的ss-server
,并禁用开机自启
1 | # 停止掉默认运行的 ss-server |
2、启动 ss-local
客户端(命令行运行)
也可以使用配置文件启动(与服务端的参数和启动方式一样)
参数说明-s "189.28.18.198"
远程服务器ip(服务端的公网ip)-p 8388
服务器端口-l 1080
本地端口-m "aes-256-gcm"
加密-k "password"
密码--fast-open
使用TCP Fast Open
扩展
1 | /usr/bin/ss-local \ |
3、启动 ss-local
客户端(配置文件运行)
/usr/bin/ss-local -c /etc/shadowsocks-libev/config.json
1 | cat > /etc/shadowsocks-libev/config.json << EOF |
3、安装 privoxy
shadowsocks
是 socks5
代理。docker
原生不支持 socks5
,仅支持 http
。
所以需要使用 privoxy
转发 http
。
1 | apt install -y privoxy |
3.1、修改 privoxy 配置文件
1 | # 先备份配置文件 |
关于配置文件,多说一句(为了保持文章的连贯性,暂时可跳过此说明)
1 | # ipv4 和 ipv6 不能同时监听在同一个端口 |
3.2、创建网站放行列表文件 namelist.action
1 | cat > /etc/privoxy/namelist.action << EOF |
在配置文件末尾处追加
actionsfile namelist.action
引入新建的网站放行列表文件
1 | echo -e "\nactionsfile namelist.action" >> /etc/privoxy/config |
3.3、重启 privoxy
1 | systemctl restart privoxy |
4、加速下载镜像 docker 代理配置
适用于直接下载
docker pull
和创建容器时的自动下载docker run
1 | sudo mkdir -p /etc/systemd/system/docker.service.d |
5、使用方法
5.1、使用 curl 测试代理是否生效
注意:代理名是小写的 http_proxy
,https_proxy
1 | # 如果未设置代理直接访问,显示你家里的宽带ip(电信、移动、联通) |
5.2、加速创建镜像
(这里的 ip 地址是默认虚拟网卡 docker0
的地址 172.17.0.1
)
因为容器要与宿主机通信,要访问到宿主机的代理
如果局域网中其他设备,也需要代理,可以使用香橙派的ip 192.168.1.121
(此时香橙派相当于一个代理服务器)
1 | docker build \ |
5.3、容器中加速安装软件
1 | export HTTP_PROXY="http://172.17.0.1:8118" HTTPS_PROXY="http://172.17.0.1:8118" |
或者在创建容器时定义环境变量
1 | docker run -itd \ |
三、windows 客户端代理(PC win10 x64)
让 windows 作为代理服务器,实现香橙派加速下载 docker 镜像
香橙派不需要运行 ss-local
和 privoxy
1、首先要让 windows 可以访问 http://hub.docker.com
下载 windows 客户端 https://github.com/shadowsocks/shadowsocks-windows
操作说明
双击 Shadowsocks.exe
进行如下配置
服务器地址: 189.28.18.198
服务器端口: 8388
密码: password
加密: aes-256-gcm
代理端口: 1080
点击确定,在任务栏右下角找到纸飞机图标,右键 – 系统代理 – PAC模式/全局模式
以上完成,windows 就可以成功访问
http://hub.docker.com
2、允许其他设备连入 windows 客户端
在 windows 任务栏右下角找到纸飞机图标,右键 – 允许其他设备连入。
查看 windows 的本地局域网 ip192.168.1.3
3、香橙派中 docker 代理的配置
3.1、加速下载镜像
适用于
docker pull
直接下载 和docker run
安装时的自动下载
1 | mkdir -p /etc/systemd/system/docker.service.d |
3.2、加速创建镜像(方式一)
docker build -t my_image:tag .
(此配置文件修改保存后即生效,不需要重新启动 Docker)
注意: ~/.docker/config.json
的代理信息,会在随后创建的容器中出现,之前创建的容器不受影响
在容器输入 env
或 export
就可以查看到(代理名称大写和小写都存在 HTTP_PROXY
, http_proxy
等等)
(创建的镜像中并不会存在代理信息,只对本机创建的容器有影响)
1 | # 请确认文件是否存在,如果存在,则需要在原配置中增加 "proxies" 对象 |
3.3、加速创建镜像(方式二)
如果不想修改 ~/.docker/config.json
文件
可以在 docker build --build-arg
后跟上代理设置,创建的容器中不会出现代理信息
1 | docker build \ |
3.4、在容器中加速安装软件
如果你想在容器中加速安装软件,在创建容器时通过
--env
指定代理
1 | docker run -itd \ |
或者在进入容器后,通过
export
指定代理
1 | export HTTP_PROXY="http://192.168.1.3:1080" HTTPS_PROXY="http://192.168.1.3:1080" |
设置代理,需要注意的知识点(为了保持文章的连贯性,暂时可跳过此说明)
如果变量名只有大写的
HTTP_PROXY
HTTPS_PROXY
可以加速安装软件,此时正常使用代理
执行curl myip.ipip.net
返回的是家中宽带的ip(移动/联通/电信)
当前 IP:x.x.x.x 来自于:中国 移动
如果变量名只有小写的
http_proxy
https_proxy
无法加速安装软件,此时无法使用代理
执行curl myip.ipip.net
返回的是服务端的公网ip
当前 IP:189.28.18.198 来自于:美国 加利福尼亚州 洛杉矶
所以,设置代理时,最好把大小写代理名全都设置上
4. 让 docker 代理配置生效
1 | # 只修改 `~/.docker/config.json` 文件,不需要此操作 |
查看代理信息是否修改成功
针对/etc/systemd/system/docker.service.d/http-proxy.conf
文件的配置项
1 | # 方式一 |
5. 应用
5.1、加速下载镜像、创建镜像
1 | # 加速下载镜像(针对增加 `/etc/systemd/system/docker.service.d/http-proxy.conf` 文件) |
5.2、windows 使用 xshell 连接 ipv6 服务器
如果你用 xshell 可以正常访问 ipv4 服务器,在此基础上添加代理即可。
1、在代理
中设置 socks5
代理 127.0.0.1:1080
2、把主机由 ipv4 地址换成 ipv6 地址
修改这两项,你就可以正常的连接 ipv6 服务器了。
四、docker 容器
1 | docker run --name sslocal-rust \ |