[Docker] 2. Docker network

Nam_JU·2022년 10월 2일
0

KaKao Cloud School

목록 보기
19/19

Docker Info

docker info : 도커 정보를 볼 수 있는 명령어

도커엔진은 클라이언트와 서버로 구분된다

  • 도커 클라이언트 : 도커 명령을 받고 결과를 출력하는 역할
  • 도커 서버 : 도커 데몬(도커 엔진)을 이용해 컨테이너 시작, 운영, 정지 등을 담당

도커의 네트워크 종류는 bridge, host, none등이 있다


Docker Network Model

  • 도커를 처음 설치하고 나면 docker0이 생성되어있다
  • 도커 데몬(엔진)이 실행(start)하게 되면 docker network Interface인 docker0이 생성된다
  • 여기서 docker0는 virtual ethernet bridge이다 bridge네트워크를 지원해주는 가상 네트워크. 컨테이너 ip와 호스트의 ip를 연결해주는 역할이 bridge이다.
  • 모든 컨테이너는 외부통신을 docker0을 통해 진행된다


컨테이너는 외부와 통신하기 위해 2개의 네트워크 인터페이스를 함께 생성한다. 컨테이너 내부 Namesapce에 할당되는 고유한 eth0 인터페이스.
나머지는 docker0에 바인딩되는 veth(가상의)인터페이스이다.
컨테이너가 생성될때 veth와 eth0은 1:1로 생성된다

docker0 브릿지는 veth 가상 인터페이스와 호스트의 eth0 인터페이스를 연결해주는 역할을 한다. 컨테이너안의 eth0 인터페이스는 veth 가상 인터페이스를 통해 외부와 통신이 가능해진다


CIDR Classless Inter Domain Routing

CIDR 클래스 없는 도메인간 라우팅 기법

  • 발생배경
  1. IPv4는 32비트의 숫자로 구성되어 있으며 제한적인 갯수로 인해 Private network를 사용하게 되었다
    집에 핸드폰, 노트북, 테블릿등 다양한 기기를 사용하고 점점 주소가 부족해짐. 이를 대표자 하나만 묶자. 이것이 공유기의 역할. 이들은 모두 유일한 ip인 pirvate ip이다.


  2. private ip는 지정된 대역의 ip만 사용이 가능하다 여기서 공유기가 pulbic ip로 NAT(포트를 변경하여 사용)
    외부에서는 private을 보지 않고 대표 ip인 public ip만 주고받는다.

  3. 여기서 ip를 또다시 계층화 시킨게 클래스이다
  • 네트워크 ID와 호스트 ID를 분리시켰다.
    네트워크 ID는 어떤 네트워크를 사용하는지, 호스트 ID는 해당 네트워크의 어느 기기인지를 나타낸다


    서울에 사는 펭수, 부산에 사는 펭수, 서울에 사는 뽀로로가 있다
    지역은 네트워크 id, 이름은 호스트 id이다
    서울에 사는 펭수와 부산에서 사는 펭수는 연락 못함
    서울에 사는 펭수와 서울에 사는 뽀로로는 연락 가능
    부산에 사는 펭수와 서울에 사는 뽀로로는 연락 못함
    같은 지역의 다른 이름만 통신이 가능하다

  1. 이런 클래스 없이 ip를 할당하는 새로운 방법이 CIDR이다
    ip주소 뒤에 /로 구분하고 서브넷 마스크의 비트수를 적어 표시한다

    docker0 은 172.17.0.0/16 16비트이며 172.17.0.1부터 172.17.255.254가지 65534 컨테이너 생성이 가능하다

3-tire MSA 실습

  • bridge newtwork 생성, mongodb 컨테이너 생성
ubuntu@jupiter:~$ docker network create devapp-net
e482a71bb154207fdd3e27e8be82497bb6349ce9475575dbc7f7fbea1f70b8db
ubuntu@jupiter:~$ 
ubuntu@jupiter:~$ docker run -d \
> --name=mongodb \
> -p 17017:27017 \
> --restart=always \
> --network=devapp-net \
> mongo:4
  • backend container 생성
ubuntu@jupiter:~$ docker run -d \
> --name=backend \
> --network=devapp-net \
> --restart=always \
> -e PORT=8000 \
> -e GUESTBOOK_DB_ADDR=mongodb:27017 \
> leecloudo/guestbook:backend_1.0
Unable to find image 'leecloudo/guestbook:backend_1.0' locally
backend_1.0: Pulling from leecloudo/guestbook
  • frontend container 생성
ubuntu@jupiter:~$ docker run -d \
> --name=frontend \
> -p 3000:8000 \
> --network=devapp-net \
> --restart=always \
> -e PORT=8000 \
> -e GUESTBOOK_API_ADDR=backend:8000 \
> leecloudo/guestbook:frontend_1.0
Unable to find image 'leecloudo/guestbook:frontend_1.0' locally


front, backend, mongodb 컨테이너 생성
devapp-net bridge 네트워크로 연결



참고자료
https://yohanpro.com/posts/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-IP%EC%A3%BC%EC%86%8C%EC%9D%98%20%EA%B5%AC%EC%A1%B0/
https://jonnung.dev/docker/2020/02/16/docker_network/

profile
개발기록

0개의 댓글