使用docker加速阿里云ECS下载

引言

公司正式服务器在阿里云上,为节省成本;公司购买的是1M小水管.运行服务跑跑网站的时候倒也够用;一旦遇到从服务器下载大文件的需求时就捉急了.

最近服务器上内存占用异常,为分析内存占用原因;需要将dump文件下载下载本地分析.一个dump有6G大,就算压缩后也有500M;

粗算一下也要1H,实际服务器有其它网络请求的情况下我花3小时才下载下来.

那有什么下载加速的方法吗?

解决方案

网络传输受限公网带宽,除了加钱没什么直接方案;不过阿里云内网里面没有网络限制,只要我们找到一种可以内网上传+外网下载不限速的服务就可以了,要是还免费就更佳.

  • 文件传输最优方案应该是阿里云盘,毕竟是阿里的云盘;可惜我不知道阿里云盘的内网地址,此方案PASS.
  • 还有一种可靠方案,就是对象存储OSS(ECS实例通过OSS内网地址访问OSS资源);临时上传下载要不了多少钱,不过我没有开通此服务,因此此方案优先级较低
  • 阿里云还提供有免费的镜像仓库服务,同时它提供内网地址;只要你在内网有linux服务器;通过服务器docker build push本地docker pull就可以间接将文件传回本地

操作步骤

首先在阿里云中开通容器镜像服务,创建命名空间和镜像仓库;在访问凭证中设置固定密码用于账号登录;在基本信息中可查看操作指南;据此可以编写上传下载的命令.

  • 阿里云内网linux服务器用于文件上传.

这里我写出我用的命令:

1
2
3
4
5
6
7
8
9
10
11
12
#先cd到空目录并将文件拷贝到这里
#info.log是要上传的文件
echo -e 'FROM hello-world\n COPY info.log /info.log \n CMD ["hello"] ' > Dockerfile

docker build -t upload .

#根据你的操作指南选择合适的内网镜像仓库地址
docker login [email protected] registry-vpc.cn-hangzhou.aliyuncs.com

#zzzz是命名空间,download是我创建的用于文件传输的仓库名称
docker tag upload registry-vpc.cn-hangzhou.aliyuncs.com/zzzz/download
docker push registry-vpc.cn-hangzhou.aliyuncs.com/zzzz/download
  • 本地使用docker cp命令将文件拷到本地,

这里贴出我用的powershell命令(windows)

1
2
3
4
5
6
7
8
9
10
11
12
#docker login xxxxx
#windows
$container= 'registry.cn-hangzhou.aliyuncs.com/zzzz/download'
docker pull $container
$id=$(docker create $container)
$fileName= 'info.log'

$cp_arguments = @("cp", `
"$($id):$($fileName)", `
"D:\Work\docker\${fileName}")
docker $cp_arguments
docker rm -v $id

使用docker传输确实略显麻烦,不过临时用用肯定比等三个小时强;毕竟服务器不是每天都需要dump.

同理,腾讯云或者其它的只要提供免费docker服务的一般都可以用此方法.

参考资料


使用docker加速阿里云ECS下载
http://blog.wangshuai.app/2023-06-16-阿里云ECS下载加速/
作者
王帅
发布于
2023年6月16日
许可协议