Docker Networks: Concepts for Private and Public Comms in Containers

서재환·2022년 2월 25일
0

Docker

목록 보기
8/12

Docker Network 개념 이해를 위해 필요한 선행 개념

이더넷

장치와 장치간 서로 통신할 수 있게 해주는 기술이다.

대개 이더넷 기술의 경우 장치들은 케이블(유선)을 통해 서로 통신하여 무선 네트워크
보다 속도, 안정성이 높다.

가상 네트워크

LAN과 WAN이 유선 케이블을 통해 장치간 서로 통신을 할 수 있는 네트워크 환경이라면
가상 네트워크는, 유선이라면 장치간 통신의 거리가 한정적일 수 밖에 없는 한계를 인터넷
기술을 통해 장치간 원거리에서 서로 통신할 수 있게 해주는 네트워크 환경이다.

물리적 네트워크

네트워크를 구성하는 그리고 이와 관련된 물리적 장치들의 총 모음을 물리적 네트워크라고 한다.

네트워크 브릿지

역할
네트워크를 부분 부분으로 나눠주는 장치이다. 각 부분 영역은 서로 다른 collision domain
을 나타낸다. 브릿지로 인해 네트워크 안에서의 충돌이 감소한다.

특정 호스트가 목적지로 하는 호스트로 frame을 보낼 때 해당 프레임을 검사하고 목적지 호스트
가 속한 네트워크로 전달하는 역할을 수행한다(?)

기능
네트워크 브릿지로 인해 Collision Domain은 고유의 대역폭(bandwith: 특정 기능 수행할 
수 있는 주파수 범위)을 갖게 되어 네트워크의 성능을 높여주는 역할을 수행한다.

NAT(Network Address Translation) FIREWALL

NAT FIREWALL

위치
라우터에 위치한다.

기능
클라이언트가 보낸 요청이 지정한 목적지로 가게 하는 역할
목적지에서 응답한 데이터를 클라이언트에게 전달하는 역할
클라이언트의 사설 IP주소를 숨겨주는 역할을 한다.
들어오는 악의적인 데이터 패킷을 차단한다.

클라이언트의 요청과 응답 과정에서 NAT 기능 살펴보기

1. 클라이언트가 데이터 패킷으로 요청을 보내면 라우터에 있는 firewall이 해당 패킷에 
   있는 사설 IP 주소를 공용 IP 주소로 그 정보를 바꾼다.

2. NAT가 위 과정을 감지하고 NAT forwarding table에 기록한다.

3. 클라이언트가 요청한 데이터가 라우터에 도달하면 NAT는 포워딩 테이블을 참고해서 누가
   요청을 보냈는지 확인하는 작업을 통해 요청 보낸 클라이언트를 찾는다.

4. firewall은 공용 IP를 다시 사설 IP로 바꾸고 요청을 보낸 장치로 해당 데이터를 다
   시 보내준다.

Docker Networks Defaults

- 각각의 컨테이너는 가상 사설 네트워크 'bridge'에 연결된다.

- 각각의 가상망은 사용자의 IP와 관련한 NAT 방화벽과 연결된다.

- 가상망에 있는 모든 컨테이너는 -p 옵션 없이 상호작용할 수 있다.

- 만약 -p 옵션 없이 가상의 망에 몇개의 컨테이너를 구성했을 때 컨테이너
  간의 통신은 가능하지만 그 안에 있는 컨테이너는 외부와 소통을 할 수 없
  다.

Docker Networks Exercise

docker container run -p port_numA:port_numB --name create_name -d img

-p (--publish)
HOST:CONTAINER format
docker container run -p 80:80 --name webhost -d nginx

로컬 포트 80 열어 네트워크와 통신하고 webhost도 포트 80을 열어놓은 상태다.

위 그림에서 Container 1에 해당한다.
docker container port webhost

해당 명령어로 로컬포트와 컨테이너가 통신하는 포트 번호를 확인할 수 있다.
여기서는 각각 80(HOST), 80(CONTAINER)이 되겠다.

Docker에 연결된 나의 host IP와 MAC가 서로 다른 이유?

docker container inspect --format '{{ .NetworkSettings.IPAddress }}' 
webhost -> A

ifconfig | grep 'ether' | awk '{print $2}' | head -1 -> B

A != B
내 맥주소와 container ip 주소가 다른 이유를 아직 잘 모르겠음

0개의 댓글