docker对网络和程序速度的影响解读

 更新时间:2025年01月02日 11:23:04   作者:后会无期77  
本文通过对比分析,测试了在宿主机和Docker容器中部署Spring Boot程序的性能差异,在网络延迟方面,Docker容器比宿主机慢0.1~0.2毫秒,在程序运行速度方面,宿主机和Docker容器的平均运行时间相近,单次运行时间存在较大差异,无法确定Docker容器在速度上优于宿主机

前言

程序即可以部署在容器内,也可以部署在docker容器中,那么两者有什么区别?

部署在容器中相对于直接部署在宿主机上,网络速度是否会变慢?程序运行是否会慢?

环境说明

测试使用的服务器是百度智能云轻量级服务器,2核4G,6M宽带。

  • 系统: centos 7.9
  • docker版本: Docker version 20.10.13, build a224086
  • springboot版本: 2.7.3
  • JDK版本: 均为JDK8 (大版本相同避免了JDK大升级对程序运行产生较大影响,也是为了尽量公平)

网络延迟测试

两个标签窗口,上图直接使用宿主机进行ping 命令,下图docker的容器内进行ping命令,同时ping同一个ip地址。

根据多次ping命令的观察,可以发现在docker容器内进行ping命令速度比宿主机内慢0.1~0.2 ms。

结论:docker 对网络的影响很小,大约比主机慢0.1~0.2毫秒。

程序速度测试

程序运行速度的是,我们使用springboot 的web方式测试,代码是生成一个倒序的数组,例如5,4,3,2,1,通过冒泡排序算法对数组排序(从小到大),得出排序所消耗的时间。

注意:

这里不使用随机算法产生数组作为待排序样本,是为了保证每次排序的样本数组是完全一样,保证每次测试公平。

代码如下:

    @GetMapping("/test/{num}")
    public String test(@PathVariable("num") int num){
        long s=System.currentTimeMillis();
        int[] arr=new int[num];
       for(int i=num;i>0;i--){
           arr[num-i]=i;
       }
        //System.out.println(Arrays.toString(arr));
        BubbleSortMethod(arr);//冒泡排序
       // System.out.println(Arrays.toString(arr));
        long e=System.currentTimeMillis();
        return "排序:"+num+",耗时:"+(e-s)+" ms";
    }

    public static int[] BubbleSortMethod(int[] arr){
        int temp = 0;
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-1 -i; j++) {
                if (arr[j] > arr[j+1]){
                    temp  = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        return arr;
    }

将程序打包为jar包,分别直接部署在宿主机和docker容器内。

为了避免不确定因素,我们需要多次测试,求平均值。

测试num=100000,将10万个数字进行排序。

注:

为了避免服务器不同时刻,可能cpu负载不一样,测试采用的交替方式,即一次宿主机,一次docker,降低可能存在的不同时刻主机负载的问题。

编号宿主机模式(ms)docker模式(ms)
145904869
245854647
347924750
451164615
550875087
650635372
749785120
855165098
951255076
1053465331
平均耗时50125002

平均值计算:去掉一个最大,去掉一个最小,求平均数。

总结:

  • 宿主机和 docker容器运行程序的两种方式,宿主机并没有优势,docker容器运行的方式会尽可能争取主机的资源,虽然从平均值看,docker运行的模式比宿主机直接运行还快一点,但是从单次比较,宿主机最快的一次运行4590毫秒,而docker最快的一次是4647毫秒,这又反向说明docker模式的并不一定比主机模式快,所以docker的平均运行比宿主机快属于运行误差,不能佐证docker在速度上优于主机。
  • 所以主机运行模式和docker容器模式在程序运行效率上没有明显的差异。

关于网上的结论

在做这个测试之前,网上的结论是物理机比docker快很多,或者快百分之多少,但是似乎都是以听说的方式得到的结论。这里试验的目的为了以实际数据来得出结论,而不是靠猜测或者听别人说。也非常希望有人以

实际的试验结论进行辩驳,欢迎用事实依据的方法纠正。

上述试验仅供参考。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker 退出container后保持继续运行的操作

    Docker 退出container后保持继续运行的操作

    这篇文章主要介绍了Docker 退出container后保持继续运行的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 解决Jenkins集成docker插件问题的一些方法

    解决Jenkins集成docker插件问题的一些方法

    本文主要介绍了Jenkins集成docker插件问题的一些方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • docker灵活的构建PHP环境的实现

    docker灵活的构建PHP环境的实现

    这篇文章主要介绍了docker灵活的构建PHP环境的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Docker安装方法与Docker四种网络模式详解

    Docker安装方法与Docker四种网络模式详解

    今天小编就为大家分享一篇关于Docker安装方法与Docker四种网络模式的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-09-09
  • Docker启动mysql服务的实现步骤

    Docker启动mysql服务的实现步骤

    本文主要介绍了Docker启动mysql服务的实现步骤,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Docker 实用技巧总结

    Docker 实用技巧总结

    这篇文章主要介绍了Docker 实用技巧总结的相关资料,需要的朋友可以参考下
    2016-10-10
  • Docker Base Image自己创建具体实现

    Docker Base Image自己创建具体实现

    这篇文章主要介绍了Docker Base Image创建具体实现的相关资料,这里提供了详细的具体步骤,需要的朋友可以参考下
    2016-11-11
  • 使用dockercompose搭建springboot-mysql-nginx应用

    使用dockercompose搭建springboot-mysql-nginx应用

    这篇文章主要介绍了使用dockercompose搭建springboot-mysql-nginx应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • 使用docker compose快速配置一组容器服务详解

    使用docker compose快速配置一组容器服务详解

    这篇文章主要为大家介绍了使用docker- compose快速配置一组容器服务详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 私有云存储Minio Docker镜像无法启动,提示:Adding local Minio host to 'mc' configuration

    私有云存储Minio Docker镜像无法启动,提示:Adding local Minio

    使用Minio在本地搭建私有云存储时出现无法启动,查看日志频繁输出“Adding local Minio host to 'mc' configuration...”,然后停止了,本文给大家分享私有云存储Minio Docker镜像无法启动,提示:Adding local Minio host to 'mc' configuration,感兴趣的朋友一起看看吧
    2023-11-11

最新评论