[Docker] 컨테이너간 통신(Network-이론)

99winnmin·2023년 2월 3일
0

Docker

목록 보기
15/16

컨테이너는 어떻게 통신하나?

Container Network Model

  • docker0
    • virtual ethernet bridge : 172.17.0.0/16
    • L2 통신기반
    • container 생성 시 veth 인터페이스 생성(sandbox)
    • 모든 컨테이너는 외부 통신을 docker0를 통해 진행
    • container runnging 시 172.17.X.Y 로 IP 주소할당

컨테이너 포트를 외부로 노출할 수 있나?

  • port-forwarding
    • container port를 외부로 노출시켜 외부 연결 허용
    • iptables rule을 통한 포트 노출
      • -p hostPort:containerPort
      • -p containerPort -> hostPort는 random으로 열리게 됨
      • -P -> randomPort가 자동으로 만들어지게 됨
    • $ docker run --name web -d -p 80:80 nginx:latest : client가 nginx에 접근하려면 host network interface를 거쳐야함(ex: eth0) + port-forwarding이 요구됨
    • $ iptables -t nat -L -n -v

컨테이너 네트워크를 추가할 수 있나?

  • user-defined bridge network 생성

    • $ docker networkt create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.254 mynet : driver의 default값은 bridge임

    • $ docker network ls

    • $ docker run -d --name web -p 80:80 nginx:latest : 기본 docker0를 통하게됨

    • $ curl localhost

    • $ docker run -d --name appjs --net mynet --ip 192.168.100.100 -p 8080:8080 smlinux/appjs : user-defined network을 통하게 하기

    • $ curl localhost:8080

컨테이너끼리 통신은 어떻게 이루어지는가?

  • 컨테이너를 이용한 server & client 서비스 운영

# docker run -d --name mysql -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=wordpress -e MYSQL_PASSWORD=wordpress mysql:latest
# docker run -d --name wordpress --link mysql:mysql -e WORDPRESS_DB_PASSWORD=wordpress -p 80:80 wordpress:4

profile
功在不舍

0개의 댓글

관련 채용 정보