ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker : Network
    공부합시다!/Container 2022. 12. 15. 11:29
    728x90

    Docker 에서 사용하는 대표적인 네트워크는 크게 3가지로 구성되어 있습니다.!

     

    1. Bridge

    2. Host

    3. None

    하나씩 살펴보도록 할께요!

     

     

    1. Bridge

    docker 0

     1.1. 쉽게 표현하면 우리가 알고 있는 NAT 기능을 수행합니다.

     1.2. Bridge에 무슨 NAT냐 하실텐데 iptables의 Masquerade 기능을 이용하여 DNAT과 SNAT을 구현하고 있습니다.

    NAT와 Port Fowarding

       1.2.1. 위의 그림에서 보시면 httpd 컨테이너를 실행하면 외부의 모든 소스가 내부의 172.17.0.2의 TCP HTTPD로의 통신이 가능하게끔 자동적으로 iptables가 설정 됩니다. 

     1.3. 물론 스위치의 기능도 당연히 수행합니다. - 동일 네트워크에서의 통신(요걸로 Container간 통신이 가능합니다.)

     1.4. Container를 실행하면 Bridge에 포트가 하나 생성이 되며 이것은 Container의 네트워크 카드와 연결이 됩니다.

     1.5. Network Card명명 규칙

      1.5.1. Docker 0 측 Port

       1.5.1.1. veth + 임의의 숫자 7자라 + @ Container Network Card 

       1.5.1.2. 예: veth1234567@if5

      1.5.2. Container측 NIC 

       1.5.2.1. eth0 + @ Bridge Port 번호

       1.5.2.2. 예: eth0@if4

    NIC 명령 규칙

     1.6. 그리고 마지막으로 Container에 IP를 자동으로 할당하는 DHCP 기능도 구현되어 있습니다.

     1.7. NAT Network 추가하기

      1.7.1. 서브넷: 192.168.0.0/24, 게이트웨이: 192.168.0.254, 네트워크 이름: babo

    # docker network create --subnet 192.168.0.0/24 --gateway 192.168.0.254 babo

     

      1.7.2. 생성한 Network 확인

    # docker network ls
    # ip address

      1.7.3. 새로운 컨테이너에 할당

    # docker run -itd --net babo -p 61080:80 --name h2 httpd
    # docker inspect

      1.7.4. NAT Network 삭제

       1.7.4.1. 활성화된 Container가 존재하는 네트워크 삭제 시 Error 발생

       1.7.4.2. 반드시 활성화된 Container 정지 또는 삭제 후 네트워크 삭제

    # docker rm -f h2
    # docker network rm babo
    # docker network ls

     

    2. Host

     2.1. host network는 말그대로 Host의 IP Address를 Container가 그대로 사용합니다. 

     2.2. Container는 IP는 HOST와 동일하지만 Port는 반드시 달라야 합니다. 

     2.3. 하나의 Network Card를 Container 끼리 공유하기 때문입니다. 

     2.4. Host Network의 추가는 불가능 합니다. 

    Host Network

     2.5. 사용법

    # docker run -itd --net host --name h1 httpd
    # docker run -itd --net host -e MYSQL_ROOT_PASSWORD=It12345z! --name m1 mysql

    3. None

     3.1. Container에 Network없이 사용하는 구조 입니다.

     3.2. 오로지 Console로만 접속이 가능합니다.

     3.3. 왜 이런 카드를? 

      3.3.1. 악성코드등을 동적 분석(악성코드 실행 후 행위분석)으로 사용할 때를 생각하시면 이해가 쉽겠죠!

     3.4. none Network 역시 추가 불가능 입니다.

     3.5. 사용법

    # docker run -itd --net none --name a1 alpine
    # docker attach a1

     

    이렇게 해서 Docker의 Network를 살펴보았습니다.

    개발자분들이 가장 난감해 하고 어려워 하는 부분입니다.

    서브넷 이해를 어느 정도 하셔야 느낌이 온답니다. 고생하세요!

    728x90

    '공부합시다! > Container' 카테고리의 다른 글

    PODMAN: Copy와 Volume Mount  (0) 2022.12.19
    PODMAN: Registry와 Search  (0) 2022.12.16
    PODMAN: POD 구성 및 wordpress + mysql  (0) 2022.12.15
    PODMAN: POD  (0) 2022.12.14
    PODMAN 일반적인 사용법  (0) 2022.12.13
Designed by Tistory.