본문 바로가기
Docker

[Docker] Docker-Network-Bandwidth 대역폭 조절

by moveho 2023. 6. 1.

Docker Network

[IPERF 서버 Docker Container 실행]

kevin@jenkins:~$ docker run  -it --rm --name=iperf3-server -p 5201:5201 networkstatic/iperf3 -s
Unable to find image 'networkstatic/iperf3:latest' locally
latest: Pulling from networkstatic/iperf3
9e3ea8720c6d: Pull complete
4f460bd74fa9: Pull complete
Digest: sha256:92d8b5fe5a54b37bcfb42b18b36016c6d8f039abb8b33095b2600700ef647485
Status: Downloaded newer image for networkstatic/iperf3:latest
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
kevin@jenkins:~$ docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS                            PORTS                                                                                NAMES
a95f5de147f0   networkstatic/iperf3     "iperf3 -s"              22 seconds ago   Up 21 seconds                     0.0.0.0:5201->5201/tcp, :::5201->5201/tcp                                            iperf3-server
kevin@jenkins:~$ docker inspect --format "{{ .NetworkSettings.IPAddress }}" iperf3-server
172.17.0.2

[서버 서비스 ip 주소를 가리키는 클라이언트 컨테이너 생성]

kevin@jenkins:~$ docker run  -it --rm networkstatic/iperf3 -c 172.17.0.2
Connecting to host 172.17.0.2, port 5201
[  5] local 172.17.0.5 port 55328 connected to 172.17.0.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  7.76 GBytes  66.7 Gbits/sec  765    581 KBytes
[  5]   1.00-2.00   sec  7.46 GBytes  64.1 Gbits/sec    0    581 KBytes
[  5]   2.00-3.00   sec  7.36 GBytes  63.3 Gbits/sec    0    583 KBytes
[  5]   3.00-4.00   sec  7.45 GBytes  64.0 Gbits/sec    0    608 KBytes
[  5]   4.00-5.00   sec  7.34 GBytes  63.1 Gbits/sec  218    540 KBytes
[  5]   5.00-6.00   sec  7.31 GBytes  62.8 Gbits/sec  193    612 KBytes
[  5]   6.00-7.00   sec  7.49 GBytes  64.3 Gbits/sec    0    612 KBytes
[  5]   7.00-8.00   sec  7.39 GBytes  63.5 Gbits/sec  225    615 KBytes
[  5]   8.00-9.00   sec  7.39 GBytes  63.5 Gbits/sec  336    424 KBytes
[  5]   9.00-10.00  sec  7.20 GBytes  61.9 Gbits/sec    0    550 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  74.2 GBytes  63.7 Gbits/sec  1737             sender
[  5]   0.00-10.04  sec  74.2 GBytes  63.4 Gbits/sec                  receiver
iperf Done.

[iperf3-server 컨테이너 확인]

-----------------------------------------------------------

Server listening on 5201

-----------------------------------------------------------

Accepted connection from 172.17.0.5, port 55314

[  5] local 172.17.0.2 port 5201 connected to 172.17.0.5 port 55328

[ ID] Interval           Transfer     Bitrate

[  5]   0.00-1.00   sec  7.45 GBytes  64.0 Gbits/sec

[  5]   1.00-2.00   sec  7.47 GBytes  64.1 Gbits/sec

[  5]   2.00-3.00   sec  7.37 GBytes  63.3 Gbits/sec

[  5]   3.00-4.00   sec  7.46 GBytes  64.1 Gbits/sec

[  5]   4.00-5.00   sec  7.32 GBytes  62.8 Gbits/sec

[  5]   5.00-6.00   sec  7.31 GBytes  62.8 Gbits/sec

[  5]   6.00-7.00   sec  7.45 GBytes  64.0 Gbits/sec

[  5]   7.00-8.00   sec  7.45 GBytes  64.0 Gbits/sec

[  5]   8.00-9.00   sec  7.37 GBytes  63.3 Gbits/sec

[  5]   9.00-10.00  sec  7.19 GBytes  61.8 Gbits/sec

[  5]  10.00-10.04  sec   322 MBytes  63.4 Gbits/sec

- - - - - - - - - - - - - - - - - - - - - - - - -

[ ID] Interval           Transfer     Bitrate

[  5]   0.00-10.04  sec  74.2 GBytes  63.4 Gbits/sec                  receiver

-----------------------------------------------------------

Server listening on 5201

-----------------------------------------------------------

 

이로서 도커 네트워크 대역폭을 측정할 있었습니다

kevin@jenkins:~$ docker network --help
Usage:  docker network COMMAND
Manage networks
Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks
Run 'docker network COMMAND --help' for more information on a command.

따로 network 명령어에 bandwith 명령어로 네트워크 대역폭을 조절할 수 있는 건 없습니다.

[Docker Container 네트워크 속도 제한하기 (대역폭 조절)]

[테스트환경]

docker image: ubuntu: 22.04

installed package: iproute2

Docker 실행시 필요 권한 : -cap-add=NET_ADMIN

 

Ubuntu:22.04 이미지를 사용해서 컨테이너를 실행합니다. 패키지를 설치합니다.

 

kevin@jenkins:~$ docker run --cap-add=NET_ADMIN -it --rm ubuntu:22.04 bash
root@012b589e84b5:/# apt update && apt install -y iproute2 iperf net-tools

현재의 네트워크 컨디션을 확인합니다.

root@012b589e84b5:/# iperf -c naver.com -p 443
------------------------------------------------------------
Client connecting to naver.com, TCP port 443
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  1] local 172.17.0.2 port 58626 connected with 223.130.200.107 port 443
[ ID] Interval       Transfer     Bandwidth
[  1] 0.0000-10.0039 sec   108 MBytes  90.6 Mbits/sec

현재의 네트워크 속도는 90 Mb 측정됩니다.

네트워크 속도를 제어하기 위해 네트워크 인터페이스 명을 확인합니다.

 

root@012b589e84b5:/# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 85815  bytes 31090137 (31.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13792  bytes 114266606 (114.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tc 명령어를 사용해서 네트워크 속도를 10Mb 제한해 봅니다.

root@012b589e84b5:/# tc qdisc add dev eth0 root handle 1: htb default 11
root@012b589e84b5:/# tc class add dev eth0 parent 1:1 classid 1:11 htb rate 10mbit
root@012b589e84b5:/# iperf -c naver.com -p 443
------------------------------------------------------------
Client connecting to naver.com, TCP port 443
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[  1] local 172.17.0.2 port 58856 connected with 223.130.195.95 port 443
[ ID] Interval       Transfer     Bandwidth
[  1] 0.0000-10.0674 sec  9.88 MBytes  8.23 Mbits/sec

댓글