在Linux和Arm64搭建Docker Proxy

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 &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山下小僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值