[따배도] 9-1. Container간의 Network (이론)

( 참고 : 따배도 https://www.youtube.com/watch?v=NLUugLQ8unM&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi )


Contents

  1. container는 어떻게 통신하나요?
  2. container 포트를 외부로 노출
  3. container network 추가
  4. 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 주소가 할당됨

figure2


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

figure2


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에도 자동 저장 )

figure2