Dockerのコンテナ間通信のスピードを測ってみた！

#...ふと思った
「Dockerコンテナ間のネットワークのスピードってどれぐらい出てるんだ？？」
...測ってみるか！

ってなことで、以下の要領でDockerのコンテナが2つだけ入ったネットワークを作り、そのコンテナ間のネットワークの速度をiperfで測ってみる実験をやってみました！

#実験環境
今回は、下記のようなスペックの実験環境を用意しました。

1. 手元にあるPC
intel Core i7-8750H (4.10GHz)、16GBメモリ、SSD
Debian 10.9
Docker 20.10.6

1. AWS EC2
t2.micro (intel Xeon E5-2686 v4 2.30GHz 1vCPU、1GiBメモリ、汎用SSD)
Debian 10.9 (ami-0adb6517915458bdb)
Docker 20.10.6

それぞれのマシンで次のコマンドを実行し、コンテナを作成しました。
`docker network create speedtest`
`docker container run -d --network speedtest --name debian1 debian` (サーバ側)
`docker container run -d --network speedtest --name debian2 debian` (クライアント側)
この後、それぞれのコンテナにアタッチし、`apt install iperf`を実行しました。

#実験方法
クライアント側のコンテナで`iperf -c [サーバ側のIPアドレス]`を**10秒間隔で3回**実行し、平均値をとる。
そして、ホストを変えることによって CPUなどの違いで速度が変わるのか実験してみました。

#結果
###・手元のPC
```
root@ee984f974c0f:/# iperf -c 172.18.0.2
------------------------------------------------------------
Client connecting to 172.18.0.2, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 172.18.0.3 port 46796 connected with 172.18.0.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  51.8 GBytes  44.5 Gbits/sec

root@ee984f974c0f:/# iperf -c 172.18.0.2
------------------------------------------------------------
Client connecting to 172.18.0.2, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 172.18.0.3 port 46798 connected with 172.18.0.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  51.6 GBytes  44.3 Gbits/sec

root@ee984f974c0f:/# iperf -c 172.18.0.2
------------------------------------------------------------
Client connecting to 172.18.0.2, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  3] local 172.18.0.3 port 46800 connected with 172.18.0.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  52.1 GBytes  44.7 Gbits/sec
```
早えぇ～(心の声)

| / | Transfer | Bandwidth |
|:-:|:-:|:-:|
| Max. | 52.1 GB/10s  | 44.7 Gbit/s|
| Min. | 51.6 GB/10s | 44.3 Gbit/s|
| Avg. | 51.83 GB/10s | 44.5 Gbit/s|
めちゃくちゃ早いやん(心の声)

---

###・AWS EC2
```
root@4cd0a77376b6:/# iperf -c 172.18.0.2                                                     
------------------------------------------------------------                                 
Client connecting to 172.18.0.2, TCP port 5001                                               
TCP window size: 45.0 KByte (default)                                                        
------------------------------------------------------------                                 
[  3] local 172.18.0.3 port 56282 connected with 172.18.0.2 port 5001                        
[ ID] Interval       Transfer     Bandwidth                                                  
[  3]  0.0-10.0 sec  27.9 GBytes  23.9 Gbits/sec
                                             
root@4cd0a77376b6:/# iperf -c 172.18.0.2                                                     
------------------------------------------------------------                                 
Client connecting to 172.18.0.2, TCP port 5001                                               
TCP window size:  122 KByte (default)                                                        
------------------------------------------------------------                                 
[  3] local 172.18.0.3 port 56284 connected with 172.18.0.2 port 5001                        
[ ID] Interval       Transfer     Bandwidth                                                  
[  3]  0.0-10.0 sec  27.4 GBytes  23.5 Gbits/sec       
                                      
root@4cd0a77376b6:/# iperf -c 172.18.0.2                                                     
------------------------------------------------------------                                 
Client connecting to 172.18.0.2, TCP port 5001                                               
TCP window size: 45.0 KByte (default)                                                        
------------------------------------------------------------                                 
[  3] local 172.18.0.3 port 56286 connected with 172.18.0.2 port 5001                        
[ ID] Interval       Transfer     Bandwidth                                                  
[  3]  0.0-10.0 sec  28.1 GBytes  24.2 Gbits/sec       
```

| / | Transfer | Bandwidth |
|:-:|:-:|:-:|
| Max. | 28.1 GB/10s  | 24.2 Gbit/s|
| Min. | 27.4 GB/10s | 23.5 Gbit/s|
| Avg. | 27.8 GB/10s | 23.86 Gbit/s|

#結果総評
驚異の44Gbit/s (5.5GB/s)とか出てて正直びっくりしました。
あと、CPUなどのパーツの違いによって、コンテナ間のネットワークの速度に差が出ることもわかりました。
おもしろい実験だったと思います(自負)。

---
以上になります。
最後までお読みいただき、ありがとうございました！