컨테이너 통신
컨테이너 네트워크 모델
컨테이너 이미지는 readonly이며, 컨테이너에 추가되는 데이터들은 별도의 RW레이어에 저장
컨테이서 삭제시 데이터도 삭제된다.
따라서 컨테이너 삭제와 상관없이 보존할 수 있는 볼륨마운트가 필요.
- docker0
- virtual ethernet bridge : 172.17.0.0/16
- L2통신기반
- container 생성시 veth 인터페이스 생성
- 모든 컨테이너는 외부통신을 docker0 통해 전달
- container running시 172.17.O.O로 IP 할당
포트포워딩
container port를 외부로 노출시켜 외부 연결 허용
iptables rule을 통한 포트 노출
→ iptables -t nat -L -n -v
# host 80에서 컨테이너 80으로 연결
docker run --name web1 -d -p 80:80 nginx:1.14
# host 임의의 포트(docker ps 등으로 확인가능)에서 컨테이너 80으로 연결
docker run --name web2 -d -p 80 nginx:1.14
# host 임의의 포트에서 컨테이너 dockerfile에 expose한 포트로 연결
docker run --name web3 -d -P nginx:1.14
user-defined bridge network
컨테이너 이미지는 readonly이며, 컨테이너에 추가되는 데이터들은 별도의 RW레이어에 저장
컨테이서 삭제시 데이터도 삭제된다.
따라서 컨테이너 삭제와 상관없이 보존할 수 있는 볼륨마운트가 필요.
- 유저 네트워크 생성
docker network ls
docker network create --driver bridge \
--subnet 192.168.100.0/24 \
--gateway 192.168.100.1 \
mynet
docker network inspect mynet
docker network ls
- 유저 네트워크 기반으로 컨테이너 실행
#기본네트워크에서 컨테이너 실행
docker run -d --name web4 -p 8081:80 nginx:1.14
docker inspect web4
...
...
"NetworkSettings": {
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "3a46df6fea536bb67e0dd000e0cc1a9655366321963176ba6b2072842b088ea3",
"EndpointID": "7c572d13a7e447039f6857742e6c45bd07b7b392f0f2fdeef5d3d60541b01bab",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
#유저네크워크에서 컨테이너 실행
docker run -d --name web5 --net mynet -p 8082:80 nginx:1.14
docker inspect web4
...
...
"NetworkSettings": {
"Networks": {
"mynet": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"b5104160cb4b"
],
"NetworkID": "4db7371c6b142c2066c9b6a082571f03eac411e03cc5d8fdd5b5a2814436f4d1",
"EndpointID": "cd8c3fd6cbf086c99d50069fd334cf54c0b16ccc6f9529e060cf6c0ee8ecd61e",
"Gateway": "192.168.100.1",
"IPAddress": "192.168.100.2",
"IPPrefixLen": 24,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:c0:a8:64:02",
"DriverOpts": null
}
}
}