본문 바로가기

개발/인프라

도커 네트워크 bridge, host 모드

도커 네트워크 시스템은 OS에 상관없이 배포하는 서비스들의 네트워크를 간단하게 제어해준다.
드라이브를 사용하는 플러그인 방식이며, bridge 드라이브가 기본값이다. 
사용해 본 모드는 bridge 와 host이다. 설명과 실습은 도커 독스를 참고했다.


# bridge

도커에서 브릿지 모드는 컨테이너들을 같은 (실제) 브릿지 네트워크로 연결해 통신할 수 있게 한다.
컨테이너 a와 b가 (같은 도커 데몬의) 도커 브릿지 네트워크 A를 사용하고 컨테이너 c 가 도커 브릿지 네트워크 C를 사용하면,
컨테이너 a 와 b는 통신할 수 있지만, c는 a와 b에게 통신할 수 없다는 뜻이다.

아래는 두 컨테이너 alphine1, alphine2 를 하나의 브릿지 네트워크로 설정해보는 일련의 명령어들이다.

docker network create alpine-net
docker network ls
docker network inspect bridge
docker network inspect alpine-net

docker run -dit --name alpine1 --network alpine-net alpine ash
docker run -dit --name alpine2 --network alpine-net alpine ash
docker run -dit --name alpine3 alpine ash
docker run -dit --name alpine4 alpine ash

docker network inspect bridge
docker network inspect alpine-net

docker container attach alpine1
ping -c 2 alpine2
ping -c 2 {alpine2의 IPv4Address}

ctrl+p ctrl+q

docker container attach alpine3
ping -c 2 alpine2
ping -c 2 {alpine2의 IPv4Address}
ping -c 2 alpine4
ping -c 2 {alpine2의 IPv4Address}

 

* 디폴트 브릿지 네트워크의 이름은 bridge
* 브릿지 네트워크를 inspect 했을 때 IPAM.config [0]. gateway는 도커 데몬과 브릿지 네트워크 사이의 api gateway의 IP address
* 컨테이너의 IPv4Address 는 컨테이너 내부에서 ip addr show로 확인할 수 있는 IP address와 같은 값이다
* 사용자가 정의한 브릿지 네트워크에선 디폴트 브릿지 네트워크와 다르게 컨테이너들의 컨테이너 이름으로 통신이 가능하다
* 같은 브릿지 네트워크 내 컨테이너들끼리는 통신 가능하지만 다른 브릿지 네트워크의 컨테이너와는 통신할 수 없다


# host

호스트 모드는 컨테이너의 네트워크가 호스트로부터 고립되지 않고 호스트의 네트워크 네임스페이스와 IP address를 할당받는다.
컨테이너가 80번 포트와 바인딩 되어있고 호스트 모드를 사용하면 호스트 IP의 80번 포트를 사용하게 된다.

호스트 모드는 성능면에서 좋은 데, 컨테이너마다 포트를 열기 위해 ip 주소를 다른 주소로 매핑(network address translation NAT)할 필요가 없기 때문이다. (그런 이유로 호스트 모드를 보통 사용했다.) 리눅스에서만 사용할 수 있다.

호스트 모드에서 다른 컨테이너와 http 통신을 하고 싶다면 (호스트의 네트워크 설정마다 다르겠지만) http://localhost:{port_number} 나 http://{real_ip}:{port_number}와 같은 주소 요청할 수 있다. 

아래는 호스트모드로 컨테이너 실행해보는 명령어들이다.

docker run --rm -d --network host --name my_nginx nginx
docker network ls
docker network inspect host
ip addr show
sudo netstat -tulpn | grep :80
docker container stop my_nginx

 

'개발 > 인프라' 카테고리의 다른 글

Git Action 으로 배포 자동화하기  (1) 2022.04.03
유저에게 도커 권한 주기  (0) 2022.03.20
계정 별 SSH 설정  (0) 2022.03.20
TLS 1.0 은 취약하다!  (0) 2022.03.19
파일 권한 관리  (0) 2022.03.06