文章目录
1.1 Docker Proxy简介
Docker Proxy 指的是代理软件或代理服务器,也可以认为是一种网络访问方式。代理类,用来进行事物不想或不能进行的其他操作,比如当你对数据库进行操作时,代理可以在你对数据库操作完后,记录下你所进行的操作。docker使用proxy分两种情况:
- docker client希望使用代理,也就是在执行docker pull、docker push等操作时通过代理来访问镜像仓库
- 容器实例希望使用代理,也就是在容器内部希望通过代理来访问网络
1.2 Docker Proxy 框图
1.3 Docker Proxy功能
1.3.1 file操作
upload: 从客户端上传文件到服务端主机,经过实测速率为7.7mb/s左右。
delete: 删除服务端主机指定路径下的目标文件。
1.3.1 image操作
load: 加载image
ls: 查看images
remove: 移除image
1.3.1 container操作
create: 创建容器
exec: 在运行容器中运行命令
list: 列出正在运行的容器
logs: 获取容器的日志
remove: 删除指定容器
restart: 重启容器
start: 启动容器
stop: 停止容器
1.4 搭建Docker Proxy环境流程
1.4.1在ubuntu搭建Docker Proxy环境执行流程
1.go build 编译Docker Proxy
2.在ubuntu终端执行docker images 查看image
3.选择images中的一个docker镜像执行 docker run --name b2 -it --network host --rm alpine:latest
4.docker ps
查看docker容器是否运行起来
5.telnet 127.0.0.1 2375
测试本地2375端口是已经打开
6.在终端执行 ./docker-proxy
运行服务端
7.进入到exampls路径下,go run xx.go
运行客户端
1.4.2在ARM64搭建Docker Proxy环境执行流程
1.GOARCH=arm64 go build 编译Docker Proxy
2.在T507执行docker images 查看image
3.打开板子的SSH连接窗口,选择images中的一个docker镜像执行 docker run --name b2 -it --network host --rm busybox:latest
4.docker ps
查看docker容器是否运行起来
5.telnet 127.0.0.1 2375
测试本地2375端口是已经打开
6.在终端执行 ./docker-proxy
运行服务端
7.在ubuntu进入到exampls路径下,go run xx.go
运行客户端
1.5使用过程遇到的问题及解决方法
- 【问题】编译DockerProxy
解决:在终端运行 GOARCH=arm64 go build 编译arm64环境;运行 go build 编译x64环境;
- 【问题】DockerProxy 配置文件 conf.ini 说明
解决:
[server] port = 8087 指代grpc的端口,客户端服务端需协商保持一致;
[docker] service_url = tcp://127.0.0.1:2375 指代docker的管理服务地址。
- 【问题】客户端调用DockerProxy接口时报拒绝连接错误
解决: 如果想通过远端主机会客户端访问docker的话,需开启Docker 2375端口,并关闭远端主机防火墙。解决此问题需要在远端主机进行以下操作:
1.编辑docker服务文件:/lib/systemd/system/docker.service
2.修改ExecStart内容为:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
3.重新加载docker配置:systemctl daemon-reload
// 加载docker守护线程
systemctl restart docker // 重启docker
4.telnet2375端口: telnet 127.0.0.1 2375
- 【问题】客户端调用DockerProxy接口时报找不到docker demo的错误
解决: DockerProxy为服务端代理,需要在服务端主机上先docker run一个容器,才可通过DockerProxy对其进行操作。
1.首先docker images 查看主机上已经加载的image,或者直接 docker load 一个tar包,再 docker build ;
2.选择 images 列表中的其中一个执行 docker run --name b2 -it --network host --rm alpine:latest
我这里选择的是 alpine ,添加 --network host 指定host 网络模式打开;
3.执行docker ps 就可以看到正在运行的docker了
- 【问题】客户端调用DockerProxy接口时报client version 1.41 is too new. Maximum supported API version is 1.40的错误
解决: 此问题为docker客户端版本过高导致服务端不支持客户端API接口,需要降低客户端版本。在DockerProxy服务端运行时会创建一个docker client,代码在docker.go 中提现,需要修改源码指定创建docker client时指定client版本。
cli, err := client.NewClientWithOpts(client.WithHost(docker.serviceUrl),client.WithVersion("1.40"))
此问题在搜索解决方法时,大多解决方法是一是改变主机docker版本配置执行 export DOCKER_API_VERSION=1.39 增加临时配置或在~/.bashrz中加 export DOCKER_API_VERSION=1.39 持久化。但亲测并不起作用,最好在源码中指定版本修改。
- 【问题】在arm64上打开2375端口
解决: 在etc/init.d/rcS 开机脚本中添加:
dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock &