Cloud/Docker

[따배도] 9. 컨테이너간 통신(네트워크)

Tony Lim 2022. 1. 21. 14:19

docker0 = network interface , NAT 와 포트포워딩 서비스를 지원한다. (iptables를 통해)

bridge = docker host1의 네트워크 인터페이스와 veth0,1 을 연결해주는 역할을 한다.

enp0s3가 현재 VM의 host ip 가 된다. docker0 는 브릿지 역할을 한다.

 

host로부터 80포트로 들어오는 모든 패킷은 nginx 컨테이너 80port로 다 포트포워딩이 된다.

포트는 항상 일대일 매핑이다.

 

docker0 네트워크 인터페이스안에는 static하게 고정ip 를 주는게 불가능하다.

새로운 bridge를 만들면된다. default gateway 는 subnet이 저런 상태일때는 192.168.100.1 이 된다. 0은 identifier ,255는 broadcast인걸 기억하자

--net 을 통해 어떤 bridge를 쓸건가 고를 수 있고 --ip를 통해 원하는 static network를 할당 가능하다. 기본은 1부터 할당 된다.

 

 

컨테이너끼리 통신을 하기위해 --link를 명렁어가 존재한다.

-e == set environment variable이다.

 

 

실습

docker 0 가 bridge 역할을 하는걸 확인

busybox라는 이미지를 실행시킨것이다. docker0를 통하니 172.17.0.2 , 3 이렇게 ip가 할당 되었다. 순차적인거 확인~

 

docker inspect c1을 통해 networksetting을 살펴보면 sandbox에서 이런 네트워크 세팅을 해준다. endpointID 가 네트워크 인터페이스 카들르 의미하고 gateway ,ipaddress 등 잘 할당되어 있는 것을 확인 가능하다.

172.17.0.0/16 에 해당 되는 IP들은 destination 이 어디든간에 source 가 host ip로 바꿔서 나갈것이다. 

 

docker run 할떄 port fowarding option을 주면 docker ps했을때 PORTS에 설명이 나온다.

dockerfile 에서 expose <Port> 가 있으면 -P (대문자) 옵션으로 알아서 들어오는 포트를 랜덤으로 지정해준다.

 

wordpress와 msyql 이 연동이 되었다.

https://docs.docker.com/network/links/

 

Legacy container links

 

docs.docker.com

-- link는 legacy 다. 없어질지도 모름

https://docs.docker.com/network/bridge/#differences-between-user-defined-bridges-and-the-default-bridge

 

Use bridge networks

 

docs.docker.com

user bridge를 통해 network connect 명령어를 통해 연결해야한다.