一、镜像下载
进入docker功能模块,点击 镜像管理 – 镜像仓库 ,输入iperf3,
找到下载量和推荐等级最高的networkstatic/iperf3 版本,点击下载

选择安装版本-默认安装版本latest

等待镜像下载成功-点击完成(也可点击后台静默下载,期间请确保NAS网络稳定)

完成后,可到 本地镜像 里面 核对是否已完成镜像下载,点击右上角 刷新 查看已下载的镜像

二、容器创建
进入docker功能模块,点击 容器管理 ,点击 添加

选择 刚刚下载的iperf3镜像,开启高级模式,其他参数按需设置,点击下一步

创建容器的具体配置有7个分页
其中 基础设置 、 网络 、 存储空间 、 链接 、 环境 这5个,可以按照默认配置,无需额外操作
由于我们的iperf3作为测速服务器部署在我们的NAS上,所以是作为服务器端部署
因此,需要在 命令 分页中,将iperf的部署,配置为服务端,如下图,输入 “ -s ”即可

在 端口设置 分页中,默认本地端口为 自动 ,容器端口为 5021,端口类型为 TCP

一般建议可以将 本地端口 一栏,配置为与 容器端口 一致的端口号,
本地端口设置为 自动 ,可避免发生端口冲突,自动跳过被占用端口,因而无需再做端口占用检测,
只要端口不冲突,就能正常访问
也可以点击左上角 添加 ,手动再增加一个UDP协议

如需让容器与私有云保持同步,即NAS一开机容器就安排运行的话,可到 基础设置 页,将容器的重启策略,
选择为 容器退出时重启,如下图

点击下一步,作容器创建前参数的最后确认,也可勾选上 创建后启动容器,点击 完成 创建容器

也可点击 容器管理 找到容器,点击 启动,如果没看到容器,可点右上角 刷新

点击 启动 ,iperf3即作为测速服务端启动,下一步可以转到客户端上操作了

点击 详情 可查看当前Docker的配置信息
通常情况下,在客户端设备上,点击快捷访问,可快速访问容器主界面
但iperf3在这里是作为服务端部署的,因此,我们还需要运行客户端,才可以建立有效访问
三、容器访问
测速客户端设备,需要先到官方站点下载客户端: https://iperf.fr/iperf-download.php
找到对应客户端,下载、解压,然后我们转到命令行下运行
Windows电脑:Win键+R,输入cmd,回车或点确定运行
MacOS电脑:到启动台—其他—终端,打开运行
Android:到GoogleStore中,搜索http://HE.NET Network Tools安装客户端运行
iOS:到App Store中,搜索http://HE.NET Network Tools安装客户端运行
Linux设备:可通过官网下载包安装运行
以Windows为例
在命令行中,输入 cd+空格+路径 ,然后回车,先进入iperf3中exe的路径,如图是把客户端解压后放在桌面

进入路径后,输入iperf3,回车,如出现下图,则已完成客户端的部署

四、运行实例
通过命令行启动了客户端以后,就可以测试客户端到服务器之间(NAS)的速度了
例如,接着输入:iperf3 -c (设备的IP地址),如图

如上图,测得的网速,带宽为948 Mbits/sec,即 948 Mbps = 118.5MB/s
(物理上带宽与速度之间的理论换算为1MB/s = 8Mbps,实际换算会更低,可以理解为速度是带宽的十分之一)
由于实际传输情况,涉及多文件传输,上述测得的速度,实际传输中,最为接近的是单向、单一、连续大文件的传输
实际情况下的传输速度,只会比测出的这个值低,而不会更高
iperf使用简介如下,常用命令已翻译出,仅供参考
Usage: iperf [-s|-c host] [options]
iperf [-h|--help] [-v|--version]
Server or Client:
-p, –port # server port to listen on/connect to
(指定端口号,需要和服务端指定的端口号一致)
-f, –format [kmgKMG] format to report: Kbits, Mbits, KBytes, MBytes
(指定带宽单位)
-i, –interval # seconds between periodic bandwidth reports
(设置每次报告之间的时间间隔,单位为秒,默认为0,如果设置了了秒数,会按时间间隔报告)
-F, –file name xmit/recv the specified file
-B, –bind bind to a specific interface
-V, –verbose more detailed output
-J, –json output in JSON format
(输出JSON格式的测试结果)
–logfile f send output to a log file
(将测试结果输出到文档)
-d, –debug emit debugging output
-v, –version show version information and quit
-h, –help show this message and quit
Server specific:
-s, –server run in server mode
-D, –daemon run the server as a daemon
-I, –pidfile file write PID file
-1, –one-off handle one client connection then exit
Client specific:
-c, –client run in client mode, connecting to
(表示以客户端启动,并在后面填写服务端的IP地址)
-u, –udp use UDP rather than TCP
(指定测试协议为UDP协议)
-b, –bandwidth #[KMG][/#] target bandwidth in bits/sec (0 for unlimited)
(default 1 Mbit/sec for UDP, unlimited for TCP)
(optional slash and packet count for burst mode)
-t, –time # time in seconds to transmit for (default 10 secs)
(可以指定传输测试的持续时间,默认是10秒钟,在此时间段内,重复发送指定长度的数据包测试)
-n, –bytes #[KMG] number of bytes to transmit (instead of -t)
-k, –blockcount #[KMG] number of blocks (packets) to transmit (instead of -t or -n)
-l, –len #[KMG] length of buffer to read or write
(default 128 KB for TCP, 8 KB for UDP)
–cport bind to a specific client port (TCP and UDP, default: ephemeral port)
-P, –parallel # number of parallel client streams to run
-R, –reverse run in reverse mode (server sends, client receives)
(反向传输)
-w, –window #[KMG] set window size / socket buffer size
-M, –set-mss # set TCP/SCTP maximum segment size (MTU – 40 bytes)
-N, –no-delay set TCP/SCTP no delay, disabling Nagle’s Algorithm
-4, –version4 only use IPv4
-6, –version6 only use IPv6
-S, –tos N set the IP ‘type of service’
-Z, –zerocopy use a ‘zero copy’ method of sending data
-O, –omit N omit the first n seconds
-T, –title str prefix every output line with this string
–get-server-output get results from server
–udp-counters-64bit use 64-bit counters in UDP test packets
[KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga-
iperf3 homepage at: http://software.es.net/iperf/
Report bugs to: https://github.com/esnet/iperf
备注:
对于客户端上的端口,也可提前在部署iperf的客户端设备上,通过命令,查看当前本地的端口有否被占用
Windows下查看端口是否被占用的命令为netstat -ano | findstr “端口号”
Linux下查看端口是否被占用的命令为netstat -anp | grep “端口号”
(此处以6746端口为例)

如发现端口被占用,可记录下占用该端口的程序PID(如上图6746端口,被占用的程序PID为3152),
如图,可以通过任务管理器查找对应PID程序

(由于进程关掉前忘记截图了,重新打开后端口已再次自动分配,所以如需通过命令关闭程序,请谨慎操作)
或通过输入 tasklist |findstr “PID” 查找对应程序,如图

如需通过命令关闭占用对应端口的程序,可输入taskkill -PID “xxxx” -F,如图

这样客户端设备上就没有端口冲突了