도커는 컨테이너에 내부 아이피를 순차적 할당하며, 이 아이피는 컨테이너를 재시작할때마다 변경 될 수 있다.
내부 아이피는 도커가 설치된 호스트, 즉 내부망에서 쓸수 있는 아이피이며 외부와 연결될 필요가 있다.
도커는 각 컨테이너에 외부와의 네트워크를 제공하기 위하여 컨테이너마다 가상 네트워크 인터페이스를 호스트에 생성하며 이 인터페이스의 이름은 veth로 시작한다.
veth 인터페이스는 사용자가 직접 생성 할 필요가 없으며 컨테이너가 생성될 때 자동으로 생성된다.
veth에너 v는 virtual 을 말하며 virtual eth라는 의미를 뜻한다.
네트워크 인터페이스를 확인하면 실행중인 컨테이너 수만큼 veth..로 시작하는 인터페이스가 생성된 것을 확인 할 수 있다.
[root@localhost ~]# ifconfig docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::42:38ff:fed0:6cc8 prefixlen 64 scopeid 0x20<link> ether 02:42:38:d0:6c:c8 txqueuelen 0 (Ethernet) ... enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::a1d2:4e3f:6bf5:cf81 prefixlen 64 scopeid 0x20<link> ether 08:00:27:64:2d:57 txqueuelen 1000 (Ethernet) ... enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.56.101 netmask 255.255.255.0 broadcast 192.168.56.255 inet6 fe80::d51c:762f:19c5:b23f prefixlen 64 scopeid 0x20<link> ether 08:00:27:ff:a2:e2 txqueuelen 1000 (Ethernet ... lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) ... vethaed9a9f: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::2419:b4ff:fe4e:37d prefixlen 64 scopeid 0x0<link> ether 26:19:b4:4e:03:7d txqueuelen 0 (Ethernet) ...
veth.. 인터페이스뿐아니라 docker0 이라는 브릿지도 존재한다.
docker0 브릿지는 각 veth 인터페이스와 바인딩되어 호스트의 인터페이스와 연결시켜주는 역할을 한다.
컨테이너의 인터페이스는 호스트의 veth 라는 인터페이스와 연결되었으며 veth 인터페이스는 docker0 브릿지와 바인딩되어 외부와 통신할 수 있다.
brctl를 사용하여 docker0 브릿지에 veth이 실제 바인딩 되었는지 확인 할 수 있다.
[root@localhost ~]# brctl show docker0 bridge name bridge id STP enabled interfaces docker0 8000.024238d06cc8 no vethaed9a9f
brctl 명령어는 별도 유틸설치가 필요하다.
[root@localhost ~]# yum install -y bridge-utils