본문 바로가기

Dev/Docker

[Docker] Container 생성 및 OVS 연결

글 작성 시기 Docker 최신 버전 :

글 작성 시기 OVS 최신 버전 :


목표 : DPKD 사용 유무에 따른 OVS의 Throughput 측정

Docker Container(Ubuntu)를 생성하고 OVS(DPDK)의 성능을 측정 하였다.

결과적으로 Container의 설정을 잘못하여 DPDK의 정확한 성능을 측정할 수 없었다.

(추후 포스팅 예정)


1. Container 생성

Docker의 Network설정은 여러가지가 있다.

Docker Bridge를 사용하지 않고 임의로 가상NIC을 만들어야 하기 때문에 net=none 옵션을 사용하였다.

docker run --net=none --name vm -i -t -d --privileged=true ubuntu /bin/bash
docker run --net=none --name [Container ID] -i -t -d --privileged=true [사용할 image] /bin/bash

2. Container 내부 IP Forwarding 설정


(Server) docker attach vm
(Container) echo net.ipv4.ip_forward=1 > /etc/sysctl.conf
(Ubuntu) docker start vm
(Ubuntu) docker exec vm sysctl -p

3. 가상 NIC 생성 및 설정

veth-a와 veth-b가 peer이고 veth-c와 veth-d가 peer이므로 

아래의 과정 중 veth 생성 과정은 각각 반복하여야 한다.

또한 MAC주소와 IP 충돌도 일어나지 않도록 다르게 설정하여야 한다.

docker inspect -f '{{State.Pid}}' vm
pid=3822
echo $pid
mkdir -p /var/run/netns
ln -s /proc/$pid/ns/net /var/run/netns/$pid
(veth-a 와 veth-b 설정)
ip link add veth-a type veth peer name veth-b
ovs-vsctl add-port br0 veth-a
ip link set veth-a up
ovs-vsctl show

ip link set veth-b netns $pid
ip netns exec $pid ip link set dev veth-b name eth0
ip netns exec $pid ip link set eth0 address 12:34:56:78:9a:bc
ip netns exec $pid ip link set eth0 up
ip netns exec $pid ip addr add 172.17.42.4/32 dev eth0
ip netns exec $pid ip route add 172.17.42.0/24 via 172.17.42.4
(veth-c 와 veth-d 설정)
ip link add veth-c type veth peer name veth-d
ovs-vsctl add-port br0 veth-c
ip link set veth-c up
ovs-vsctl show

ip link set veth-d netns $pid
ip netns exec $pid ip link set dev veth-d name eth1
ip netns exec $pid ip link set eth1 address 12:34:56:78:9a:de
ip netns exec $pid ip link set eth1 up
ip netns exec $pid ip addr add 172.17.41.4/32 dev eth1
ip netns exec $pid ip route add 172.17.41.0/24 via 172.17.41.4

4. Flow Rule

OVS에 추가한 veth-a, veth-c를 이용하여 Flow Rule을 내리고 사용한다.

'Dev > Docker' 카테고리의 다른 글

[Docker] 설치 및 콘테이너 생성  (0) 2017.08.17