코딩무비

[Docker] 4. 도커 네트워크

by 코딩무비
반응형

네트워크 구조는 ifconfig을 입력하면 확인할 수 있습니다

ifconfig

 

결과

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:e9ff:febd:3bab  prefixlen 64  scopeid 0x20<link>
        ether 02:42:e9:bd:3b:ab  txqueuelen 0  (Ethernet)
        RX packets 7286  bytes 4714301 (4.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7360  bytes 28000373 (28.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 172.31.7.74  netmask 255.255.240.0  broadcast 172.31.15.255
        inet6 fe80::ef:30ff:fec4:8080  prefixlen 64  scopeid 0x20<link>
        ether 02:ef:30:c4:80:80  txqueuelen 1000  (Ethernet)
        RX packets 109138  bytes 104527344 (104.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 47995  bytes 10976999 (10.9 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 188  bytes 19890 (19.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 188  bytes 19890 (19.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth070fa41: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::4e1:bdff:feb3:df15  prefixlen 64  scopeid 0x20<link>
        ether 06:e1:bd:b3:df:15  txqueuelen 0  (Ethernet)
        RX packets 125  bytes 79444 (79.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 185  bytes 51657 (51.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth17f45d6: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::2849:9eff:fe6b:7b5  prefixlen 64  scopeid 0x20<link>
        ether 2a:49:9e:6b:07:b5  txqueuelen 0  (Ethernet)
        RX packets 4373  bytes 293031 (293.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4960  bytes 25164567 (25.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

도커는 각 컨테이너에 외부와의 네트워크를 제공하기 위해 가상의 네트워크 인터페이스를 호스트에 생성

 

 

ifconfig 설명

 

veth 인터페이스
  • 컨테이너를 시작할 때마다 호스트에서 veth...라는 네트워크 인터페이스 생성
  • 컨테이너와 외부를 연결하기 위함
  • 도커 엔진이 자동으로 생성
eth0
  • 실제로 외부와 통신할 수 있는 호스트의 네트워크 인터페이스
docker0 브리지
  • 각 veth 인터페이스와 바인딩돼 호스트의 eth0 인터페이스와 이어주는 역할
lo
  • 시스템이 자기 자신과의 통신을 하기 위한 가상 이더넷장치
 

도커 네트워크

 

 

도커가 제공하는
네트워크 드라이버
  • 브리지(bridge)
  • 호스트(host)
  • 논(none)
  • 컨테이너(container)
  • 오버레이(overlay)

 

 

 

도커 네트워크를 다루는 명령어 : docker network

 

 

도커 네트워크 목록

docker network ls

결과

NETWORK ID     NAME                         DRIVER    SCOPE
834b000be3b2   bridge                       bridge    local
b181b89dc20f   docker_server_test_default   bridge    local
9fa15d4fd8f7   host                         host      local
4e76cc6c8dd1   none                         null      local

브리지 네트워크는 컨테이너를 생성할 때 자동으로 연결되는 docker0 브리지를 활용하도록 설계

이 네트워크는 172.17.0.x IP 대역을 컨테이너에 순차적으로 할당

 

네트워크 검사

docker network inspect bridge

결과

 생략...
 
 "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },

생략...

Config 항목의 서브넷과 게이트웨이가 127.17.0.0/16과 172.17.0.1로 설정되어 있습니다

또한 Contianer 항목에서 해당 브리지 네트워크를 사용 중인 컨테이너 목록을 볼 수 있습니다.

 "Containers": {
            "2a48b6072df0ffb2d51fac6c2d80b0478db11bc8435f9e6ba8c83c17381b7cfe": {
                "Name": "wordpressdb_hostvolume",
                "EndpointID": "2806f12b4062d97b6142774c8ef8bd1825e1508c84c50372f972bcb03015                                    ee72",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            },
            "84a1141607ac5f4591bd10de1429a4751bfa67ac61e2be166405877d6d2b4509": {
                "Name": "wordpress_hostvolume",
                "EndpointID": "d546e65f5a40bdd44d4b61ba8cdf29ea800839b6641b8e8198d7ba7e0901                                    0181",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            },

 

 

브리지 네트워크

컨테이너는 연결된 브리지를 통해 외부와 통신 가능

 

생성
docker network create --driver bridge mybridge
mybridge을 사용하는 
컨테이너 생성
 docker run -it --name mynetwork_container \
 --net mybridge \
 ubuntu:18.04
컨테이너 내부에서
ifconfig
root@d701c61be2fc:/# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.19.0.2  netmask 255.255.0.0  broadcast 172.19.255.255
        ether 02:42:ac:13:00:02  txqueuelen 0  (Ethernet)
        RX packets 4107  bytes 25181384 (25.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3720  bytes 249948 (249.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 6  bytes 644 (644.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6  bytes 644 (644.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 172.19.0.2라는 새로운 IP 대역 할당된 것 확인

네트워크의 서브넷, 게이트웨이, IP 할당 범위 임의로 설정

docker network create --driver=brdige \
--subnet=172.72.0.0/16 \
--ip-range=172.72.0.0/24 \
--gateway=172.72.0.1 \
my_custom_network

단 --subnet과 --ip-range는 같은 대역이어야 함

 

 

 

호스트 네트워크
    • 네트워크를 호스트로 설정시 네트워크 환경을 그대로 사용 가능
    • --net옵션을 host로 입력
    • 컨테이너의 네트워크를 호스트로 설정시 컨테이너 내부의 애플리케이션을 별도의 포트 포워딩 없이 바로 서비스 가능
 docker run -it --name network_host --net host ubuntu:18.04

 

 

논 네트워크
  • 아무런 네트워크를 쓰지 않는 컨테이너
  • --net옵션을 none으로 입력
docker run -it --name network_none --net none ubuntu:18.04
컨테이너 네트워크
  •  --net옵션으로 conatainer을 입력하면 다른 컨테이너의 네트워크 네임스페이스환경을 공유 가능
  • 공유 속성 : 내부 IP, 네트워크 인터페이스의 맥(MAC) 주소 등
  • --net옵션의 값으로 container:[컨테이너ID] 입력

 

 

출처

 

시작하세요! 도커/쿠버네티스

반응형

'도커' 카테고리의 다른 글

aws cloudwatch  (5) 2022.04.14
컨테이너 로깅  (6) 2022.03.30
3. 컨테이너 애플리케이션 구축  (4) 2022.03.22
2. 이미지, 컨테이너  (4) 2022.03.21
[Docker] 1. 도커란?  (1) 2022.03.17

블로그의 정보

코딩무비

코딩무비

활동하기