docker0네트워크는 bridge네트워크인지 확인
network 확인 커맨드brctl 명령어가 작동되지 않아 추가 설치했습니다.$ sudo apt-get install bridge-utils
$ brctl show

virtual ethernet bridge:172.17.0.0/16L2통신기반container생성 시veth인터페이스 생성(sandbox)- 모든 컨테이너는 외부 통신을
docker0통해 진행containerrunning 시172.17.X.Y로IP주소할당
port-forwarding
- container port를 외부로 노출시켜 외부 연결 허용
- iptables rule을 통한 포트 노출
-p hostPort:containerPort-p containerPort처럼:을 입력하지 않을 경우에는,hostport에 랜덤포트가 열린다.-P만 적을 경우, 랜덤 포트가 작성된다- ex)
docker run --name web -d -p 80:80 nginx:1.14iptables확인 :iptables -t nat -L -n -v
순차적으로 할당되는 ip 확인
docker0bridge networkbusybox는 각기 다른 터미널에서 실행시켜야 합니다. (혹은-d명령어 추가)
$ ip addr
$ brctl show
// ip addr 172.17.0.2
$ docker run --name c1 -it busybox
$ docker inspect c1
// ip addr 172.17.0.3
$ docker run --name c2 -it busybox
$ docker inspect c2
// ip addr 172.17.0.4
$ docker run -d -p 80:80 --name web1 nginx
// ip addr 172.17.0.5
$ docker run --name c3 -it busybox
// 외부 네트워크와 통신 확인
# ping 8.8.8.8
docker inspect c1를 하면NetworkSettings에서SandboxID가 보인다.
Sandbox가 c1이라는 컨테이너의 네트워크 환경을 만들어준거다.EndpointID가 veth0의 네트워크 인터페이스가 만들어진거다.c1네트워크는 172.17.0.1의 docker0의 네트워크를 통해 나간다.172.17.0.1 시스템은 외부로 나갈때 자신의 ip를 host ip로 바꿔서 내보내는 IP Masquerade 서비스 즉, NAT 서비스를 지원하게 된다.IP Masquerade란?
주소변환만 하는것이 아닌 포트번호까지 포트포워딩시켜주는 기능
docker0가anywhere로 나가면 호스트의 ip로 바꿔서 송출해주겠다.
$ iptables -t nat -L -v
