[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
댓글