Cloud/Docker

4. Docker 네트워크 (리눅스 용)

jinkwon.kim 2019. 1. 31. 10:59
728x90
반응형

4. Docker 네트워크 (리눅스 용)

 

 

관련 포스트

1. Docker 가상화 서버 개념 (리눅스용)

2. Docker 가상화 서버 설치 및 image 다운로드 (리눅스용)

3. Docker Container 관리 (리눅스 용)

4. Docker 네트워크 (리눅스 용)

5. Docker Image 만들기 / 삭제 (Linux 용)

6. Docker cluster - swarm (리눅스 용)

 

 

- Docker version 18.09.1, build 4c52b90

- 이번 포트스에서는 Docker 4가지 네트워크 구현 방식 중 기본인 

   bridge 네트워크 방식을 알아 보겠습니다.

 

 

Docker의 네크워크 구현 방식

 

 네트워크 종류   설명
 host 호스트이 네트워크 환경을 대로 사용하는 방식
 bridge - 새로운 bridge를 생성하여 container를 bridge 에 연결하여 사용하는 방식 
- Docker에서는 기본적으로 bridge 방식을 제공합니다. 
 overlay  물리적으로 떨어진 서버에서 Docker만의 네트워크를 구성하기 위한 네트워크 입니다.
 none 네트워크에 연결되어 있지 않은 상태

 

 


 

 

Docker의 네트워크 - bridge 방식(기본 방식)

 

1. Docker 네트워크 구조

  - container 별로 가상의 NIC를 할당 받아 통신 할 수 있습니다

<네트워크 전체 구조 그림>

 

  - Docker는 독립 된 네트워크를 구성 하기위하여 3가지 기술을 사용 합니다.

 

  1) network namespace

    - contianer안의NIC와 Container의 NIC와 pair 되는 VNIC를 만드는데 사용 합니다.

    * 자세한 설명(실습가능) : https://www.joinc.co.kr/w/man/12/NetworkNamespace#toc

 

  2) bridge

    - llinux에서 software로 구현 한 bridge

    - bridge하나 당 개별 네트워크를 구성 할 수 있습니다.

    - container에 bridge를 2개 할 당하면 Container는 2개의 NIC를 가질 수 있습니다.

    - L2 통신만을 지원 합니다.

 

  3) iptables

    - Container가 외부 네트워크 통신을 하기 위해서 사용 됩니다.

    - NAPT를 이용하여 통신을 한다.

    *NAPT 란 ?

      - 내부 사설 IP와 Port를 공용 IP와 Port로 변경 시켜주는 기능입니다.

 

2. Docker 네트워크 통신 과정

  1) 내부 통신 

    - container는 같은 bridge에 한해서L2 통신을 수행 합니다.

    - bridge가 다른 container 끼리는 통신 할 수 없습니다.

      즉, container0 과 container2는 통신 불 가 합니다.

 

  1) 외부 통신 

    (1)  container -> 외부      

        - bridge까지는 L2 통신을 한 후 Iptables의  POSTROUTING 을 거쳐 MASQUERADE 되어 외부로 나갑니다.   

    (2) 외부 -> container     

       - Docker host에 들어온 패킷이 PREROUTING chain 을 통해 DOCKER Chain 으로 전달하고,

         Docker Chain에서는 DNAT로 8080 포트로 들어온 요청을 172.17.0.2 IP를 가진 container 의 80 포트로 포워딩 되는 것을 알 수 있다.    

        - 참고싸이트 https://bluese05.tistory.com/53

 

 

3. Docker 기본 Container 생성시 네트워크 정보

  1). 현재의 네트워크 확인

    #docker network ls

 

  2). 기본 으로 생성한 container의 네트워크 상태

    (1). 생성 

      # docker run -itd --name centos-original centos

      c0a18ce89a58d80b2cf46e61b82a107bd279d9a5e10b00b81b8a14c9e9373c20

 

    (3). container 네트워크 확인

      #docker container inspect centos-original

      - host(docker가 실행되고 있는 서버)에서 ping으로 IP 연결 상태 확인

        #ping 172.17.0.2 

 


 

Docker의 네트워크 - 사용자 정의 네트워크

 

1. Docker 사용자 정의 네트워크 관리 [bridge 방식]

 

  - Docker에서는 사용자 정의 네트워크를 생성 할 수 있게 해주는 기능을 제공 합니다.

  - 이 기능으로 Docker 자체만으로 다양한 네트워크 망을 구성 할 수 있습니다.

 

  1) 사용자 정의 네트워크 생성 (network create)

    (1) 생성

      #docker network create --driver=bridge  {생성할 bridge 이름}

      - driver옵션을 사용하여 생성할 네트워크를 지정 할 수 있습니다.

      - brctl show를 통하여 bridge 정보 확인

      *brctl 이 없으면  yum install bridge-utils 로 설치

 

    (2) docker에서 확인

      #docker network ls 를 통하여 bridge 정보 확인

      - docker network inspect {생성한 bridge 명} 를 사용하여 상세 내역 확인

 

  2) 사용자 정의 네트워크 삭제 (rm)

    (1) 삭제

      #docker network rm {삭제 할 bridge 이름}

 

    (2) 유의 사항

      - 해당 bridge를 사용하고 있는 container가 구동 중이면 삭제가 되 지 않습니다.

 

 

 

Docker의 Container 네트워크

1. container에 사용자 정의 네트워크 설정 (--net)

    1) container를 생성시 기본 네트워크로 설정

      - {--net}옵션을 사용하여 사용자 정의 네트워크를 기본 네트워크로 설정 할 수 있습니다.

      #docker run -itd --net=mybridge --name=centos-network-1 centos  

    2) container의 네트워크 상태 확인 

      #docker container inspect centos-network-1

      - mybridge로 네트워크가 설정 된것을 확인 할 수 있습니다.

2. container에 사용자 정의 네트워크 추가 (connect)

    - 핵심 : container에 할당 된 network 를 추가 시켜 주면 됩니다.

 

    1) container에 네트워크 추가

      #docker network create --driver=bridge mybridge

      #docker network connect mybridge-1 centos-network-1

    2) container에 네트워크 추가된 네트워크 확인

      #docker attach {container이름}

        - docker attach centos-network-1

      - docker에 접속하여 ifconfig로 NIC가 2개 가된것을 확인 할 수 있습니다.

        *ifconfig가 없을 시"yum install net-tools" 로 설치 하시면 되십니다.

        (현재 테스트 하면서 캡쳐를 한거라 Network ID가 다릅니다. NAME으로 구분 하시면 되십니다.)

 

 

 

 

3. container에 사용자 정의 NIC 삭제 (disconnect)

    - 핵심 : container에 할당 된 network 를 끊어 주면 됩니다.

 

    1) NIC 삭제 

      #docker network disconnect {삭제할 bridge 이름} {container이름}

      Ex) #docker network disconnect mybridge-1 centos-network-1

  

    2)docker 로 Container Network  확인

      #docker container inspect centos-network-1


 Docker의 네트워크 주소 관리

 

1. 네트워크 대역 관리

    - Docker는 Bridge에 할당된 네트워크 대역을 사용하여 Container에 IP가 할당 됩니다.

    - Docker에서는 Bridge를 생성 할 때만다 네트워크 대역을 자동으로 1씩 증가 시킵니다. 

      Ex)

          첫번째 brdige : 172.17.0.0/24 

          두번째 brdige : 172.18.0.0/24 

 

    - bridge에 container가 추가 될 떄 만다 자동으로 IP 번호가 증가 하여 할당 됩니다.

      Ex) 

          첫번째 container : 172.17.0.2

          두번째 container : 172.17.0.3

 

2. 네트워크 대역 변경

    1) 사용자 정의 네트워크를 생성시 IP 대역을 변경 할 수 있습니다. 

      #docker network create 

        --driver=bridge \

        --subnet=172.1.0.0/16 \

        --ip-range=172.1.0.0/24 \

        --gateway=172.1.0.1 \

        mybridge

 

 

3. Container IP 설정

    1) container 생성시 설정

       #docker run -itd --ip 172.1.0.5 --net=mybridge --name=centos-network-1 centos       --ip  : container에 할당 할 IP 설정       --net : 

container 할당 할 IP가 속해 있는 network 대역을 가진 bridge 설정

 

    2) container 생성 후 변경

      < 핵심 >

        - container의 network를 삭제 후 다시 등록

 

      < 정보>

        - contianer 명 : centos-network-1

  

      < 절차 >

        - container 종료

          #docker container stop centos-network-1

        - container에서 네트워크 삭제

          #docker network disconnect mybridge centos-network-1

        - container에 네트워크 추가

          #docker network connect mybridge --ip=172.1.0.10 centos-network-1

        - container 시작 

        #docker container start centos-network-1


도커(Docker) 각티슈 케이스

docker를 공부하다가 아주 귀여운 container 형태의 각티슈 케이스 협찬을 받았습니다. ㅎㅎ 

막상 받아보니 괜찮습니다. 회사 분들도 일단 무척이나 신기해 합니다.

일단 제품 조립도 쉽고 안에 휴지를 위로 밀어주는 철판 같은게있어서 사용하기는 매우 편할꺼 같더라구요.

마침 ㅎㅎ 각티슈 케이스 필요했는데 다행이더라구요 ㅎㅎ. 

책상 인테리어로 괜찮은거 같아요.

 

요건 정면 사진~!!

요건 모서리 사진~!! (옆에 container 문짝 디테일 살아있습니다.!!!!)

마지막 배랑 같이 찍은 사진 ㅋㅋㅋ 뭔가 container 라면 배가 필요할꺼 같아서 같이 찍어봤습니다.ㅎㅎ

 

회사 분들이 지나갈때 마다 ㅋㅋ 한번 씩 관심 가질꺼 같습니다. ㅎㅎ

 

 

 

* 참고 자료 

https://www.joinc.co.kr/w/man/12/docker/InfrastructureForDocker/network

https://bluese05.tistory.com/15

https://bluese05.tistory.com/53

http://www.i3s.unice.fr/~urvoy/docs/VICC/3_vicc.pdf

https://www.slideshare.net/JamesAhnutm_campaign=profiletracking&utm_medium=sssite&utm_source=ssslideview

 

728x90
반응형