⭐️ Table of Contents
- Tech 1. 브리지(Bridge) Network
- Tech 2. 브리지(Bridge) Network를 사용한 컨테이너 간 통신 설정
Tech 1. 브리지(Bridge) Network
브리지 네트워크란 Docker에서 컨테이너들이 서로 통신할 수 있도록 해주는 네트워크 드라이버다. 브리지 네트워크를 통해 각 컨테이너가 독립된 IP 주소를 가지며, 네트워크를 격리하고 관리할 수 있게 해 준다. 브리지 네트워크 상의 컨테이너들은 외부 네트워크와 통신할 때 호스트의 IP주소를 사용해 데이터를 전송할 수 있다.
브리지(Bridge) 네트워크
- docker0이 아닌 사용자 정의 브리지를 새로 생성해 각 컨테이너에 연결하는 네트워크 구조
- 물리적 스위치를 가상으로 구현한 OSI Layer 디바이스다.
- MAC 주소를 기반으로 트랙픽을 전달한다.
- Bridge network 기본 대역
- 172. {17-31}. 0.0 /16 (65536개)
- 192.168. {0-240}. 0/20 (4096개)
Tech 2. 브리지(Bridge) Network를 사용한 컨테이너 간 통신 설정
Docker 컨테이너의 네트워크 설정을 확인해 볼 것이다. 이 과정에서 Bridge 네트워크를 사용하고 이를 통해 컨테이너 네트워크가 어떻게 동작하는지 이해해 볼 것이다.
ubuntu@docker :~$ docker network ls
네트워크 리스트를 출력해 보았다. 기본적으로 네트워크에서는 Bridge, host, none 네트워크를 확인할 수 있었다.
bridge는 컨테이너가 이 네트워크를 통해서 연결되어 통신할 수 있게 해주는 것 같다. host는 컨테이너가 호스트의 네트워크와 동일한 네트워크 네임스페이스를 사용하고, none은 그냥 없는 상태인 것 같다.
* Network namespace
네트워크 네임스페이스는 도커 네트워크를 통해 구성된 경우가 아니면 동일한 호스트의 두 컨테이너가 서로 통신하거나 호스트 자체와 통신할 수 없도록 보장해 주는 것 같다.
ubuntu@docker : ~$ sudo apt install bridge-utils
ubuntu@docker : ~$ brctl show
먼저 bridge-utils 패키지를 설치해줬다. 이 패키지를 설치하면 docker0과 같이 브리지 네트워크 상태을 확인할 수 있다. 다음로 brctl 명령어를 사용하여 브리지 네트워크의 상태를 확인했다. 먼저 브리지의 이름은 docker0이고 브리지의 고유ID는 8000이다. 도커 이미지를 만들지 않았을 때에는 인터페이스가 연결이 안되어 있었지만, 이미지를 만들고 보니 docker0은 2개의 가상 인터페이스가 연결되었다.
ubuntu@docker : ~$ docker run -it -d --name=my-ubuntu ubuntu:14.04
ubuntu@docker : ~$ docker exec -it my-ubuntu ip addr
ubuntu14.04 이미지를 기반으로 my-ubuntu라는 이름의 컨테이너를 백그라운드(-d)에서 실행했다.
다음으로 ip addr 명령을 사용하여 my-ubuntu 컨테이너 내 네트워크 인터페이스의 상태를 확인했다. eth0 인터페이스의 mac 주소와 IP주소를 확인할 수 있었다. IP주소는 172.17.0.2 / MAC은 02:42:ac:11:00:02 이다.
ubuntu#docker :~$ docker exec -it my-ubuntu route
컨테이너가 외부 네트워크와 어떻게 연결되어 있는지, 어떤 네트워크 인터페이스를 통해 트래픽이 나가는지를 확인해야하기 때문에 호스트 시스템에서 라우팅 테이블을 확인해보았다. 지금 게이트웨이를 보면 172.17.0.1 주소는 컨테이너에서 외부 네트워크로 트래픽을 보낼 때 이 IP 주소를 통해 나가는데, 이게 브리지 네트워크에서 사용되는 게이트웨이 주소가 될 것이다.
ubuntu@docker:~$ route
>> 결과
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 100 0 0 ens160
link-local 0.0.0.0 255.255.0.0 U 1000 0 0 ens160
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
호스트 시스템의 라우팅 테이블을 보았다. docker0 인터페이스가 172.17.0.0 네트워크를 관리하고 있다. 또 디폴트 게이트웨이가 ens160이라는 네트워크 인터페이스가 모든 네트워크를 관리하는 것 같다.
ubuntu@docker :~$ docker network inspect bridge
inspect 명령어이다. bridge 네트워크를 좀 더 자세히 확인해보았다. 서브넷는 172.17.0.0이다. 즉, Docker 컨테이너들이 이 서브넷 내에서 IP 주소를 할당받고 통신해주는 역할을 해주는 것 같다. 게이트웨이는 172.17.0.1 주소에서 브리지 네트워크에 연결된 컨테이너들이 외부 네트워크와 통신할 때 사용하는 경로를 제공해주고 있다. 컨테이너 주소는 172.17.0.2인데 브리지 네트워크에 연결된 특정 컨테이너의 IP 주소를 나타내어 주고 있고, 이 컨테이너를 통해 다른 컨테이너나 호스트와 통신할 수 있다.
이 과정을 이해해려고 컨테이너 설정을 해보았다. :) 브리지 네트워크에 대해서 잘 이해한 것 같다. 브리지 네트워크에 대해서 좀 더 배우면 추가적으로 포스팅을 해보겠다.
'OS > Docker' 카테고리의 다른 글
[Docker] - Nginx를 활용한 프록시 구성 (0) | 2024.10.14 |
---|---|
[Docker] - Container Proxy (0) | 2024.10.14 |
[Docker] Docker Network란 (1) | 2024.10.07 |
[Docker] Container 관리를 위한 CLI 명령어 (4) | 2024.09.30 |
[Docker] Image 삭제 & 전체 삭제 (0) | 2024.09.23 |