[따배도] 9-1. Container간의 Network (이론)
( 참고 : 따배도 https://www.youtube.com/watch?v=NLUugLQ8unM&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi )
Contents
- container는 어떻게 통신하나요?
- container 포트를 외부로 노출
- container network 추가
- container 간의 통신
Q1. container는 어떻게 통신하나요?
Container Network Model
리눅스 도커 HOST
도커 데몬이 start 되면, docker0라는 docker network interface가 생긴다.
Docker0
- virtual ethernet bridge : 172.17.0.0/16
- 역할 : container와 host 장비 연결 고리
- L2 통신 지원
- container 생성 시, veth 인터페이스 생성
- 모든 container는 이를 통해 외부와 통신 가능
- container running시, 172.17.X.Y로 IP 주소가 할당됨
Q2. container 포트를 외부로 노출
포트 포워딩 (Port-Forwarding)
- container 포트를 외부로 노출시켜서 연결을 가능하게 함
- eth0 인터페이스를 통해서, veth0,veth1에 접속 가능
- iptables rule을 통한 포트 노출
-p hostPort:containerPort
-p containerPort
-P
- example :
docker run --name web -d -p 80:80 nginx:1.14
iptables -t nat -L -n -v
Q3. container network 추가
user-defined bridge network
-
container의 static ip 할당 가능?
( 기본적으로는 불가능! )
-
대신, 원한다면, user-defined network를 더 만들 수 있다!
-
docker network create --driver bridge \ --subnet 192.168.100.0/24 \
--gateway 192.168.100.254 mynet
-
docker network ls
Example ( default : bridge 드라이버 )
docker run -d --name web -p 80:80 nginx:1.14
curl local host
Example 2 ( mynet 드라이버)
-
docker run -d --name appjs \ --net mynet --ip 192.168.100.100 \ -p 8080:8080 smlinux/appjs
-
curl localhost:8080
Q4. container 간의 통신
wordpress가 동작되기 위해선 mysql DB가 필요!
-
--link
통해서 연결하기! -
wordpress에서 만들어지는 모든 데이터는 mysql에 저장,
( + mount된 HOST의 db에도 자동 저장 )