通过学习Docker的基础知识(),我们已经可以徒手创建一个VPP的Docker镜像,并成功运行起来了()。
但介于环境问题,VPP的转发性能相对低一些,我现在是先在ESXi中部署了EVE-NG(),又在EVE-NG中部署的Ubuntu系统();切换到直接运行在ESXi的Ubuntu系统中性能应该会好一些。
既然如此,我们可以尝试操作一下Docker容器的迁移,说是迁移Docker容器,其实Docker容器是基于Docker镜像来运行的,那就成了迁移Docker镜像。
正常来讲,Docker镜像本身是跨系统版本兼容的,但需要确保目标系统的Docker版本不低于源系统,且Docker镜像未绑定特定Linux内核版本。
源操作系统系统版本、内核版本和Docker版本信息如下:
目标操作系统系统版本、内核版本和Docker版本信息如下:
可以看到,两个操作系统的Docker版本均为28.1.1,Ubuntu 24.04.2 LTS的内核版本高于22.04.5,但是我们在制作Docker镜像时,指定了基础镜像使用Ubuntu 22.04,应该问题不大。
Docker镜像迁移的第一步就是从源主机导出Docker镜像(),需要用到镜像ID,使用docker images命令或docker image ls命令来查看:
然后使用docker save命令或docker image save命令,使用-o选项根据镜像ID将Docker镜像导出为tar存档文件。
docker save -o vpp-docker.tar 6655b1f1d646
接下来,我们需要将镜像传输到目标主机,可以把文件下载下来,再从目标主机上传;或者可以使用SCP工具直接将文件上传到目标主机,我们需要先在目标主机创建好文件的存储路径,如/root/docker。
则上传文件的命令为:
scp vpp-docker.tar root@192.168.1.77:/root/docker
内网传输还是挺快的,3秒就传完了。
然后切换到目标主机,使用docker load -i选项指定读取tar存档文件,并完成Docker镜像的导入:
docker load -i vpp-docker.tar
呃。。。REPOSITORY和TAG怎么显示为空呢?这个时候我们就用到docker tag命令了,根据镜像ID重新给镜像标记REPOSITORY和TAG。
docker tag 6655b1f1d646 vpp-docker:latest
接下来,跟上次一样(),我们使用docker run来运行VPP容器()。因为VPP需要直接管理物理网卡,建议网络模式选择host模式,这样容器共享宿主机网络栈,可以直接访问物理接口。
docker run -itd --name vpp
--network host --privileged
-v /dev/hugepages:/dev/hugepages
vpp-docker:latest
可以查看到VPP容器启动成功,我们使用docker exec运行命令/usr/bin/vppctl直接以TYY终端的形式进入VPP进程,检查一下VPP的运行状态。
docker exec -it vpp /usr/bin/vppctl
可以看到,Docker容器运行正常,不过因为环境迁移,之前的接口不见了,我们需要重新为Docker容器分配新的接口。
然后重启Docker容器,再次查看网卡。
OK,网卡添加成功。我们配置一下IP地址,测试一下是否可用。
set interface state eth1 up
set interface ip address eth1 10.12.1.2/24
set interface state eth2 up
set interface ip address eth2 10.23.1.2/24
show interface addr
没有问题,到外面的主机也是通的。再切换到下挂的主机上测试一下业务连通性。
状态正常,没有问题。切换回VPP容器,看一下网卡的硬件信息。
可以看到,切换为VMXNET3网卡之后,已经显示网卡速率为万兆,那实际性能有没有提升呢?我们再简单测试一下。
可以看到,在VPP容器中的转发性能最高达到了4.67 Gbps,平均带宽也达到了4.5 Gbps,比上次测试的10倍还要多一点。观察打流过程中的系统西能,发现docker里面的VPP一直占满了一个核心,过程中波动也比较小。
考虑到我们算是单网卡进、单网卡出,绑定CPU和NUMA应该对提升性能没什么变化,不过这超过4 Gbps的转发性能应该也是够用了。
***推荐阅读***
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...