도커/개념 및 실습

05장-1, 도커 네트워크 유형

Jaden Park 2021. 6. 2. 17:44

네트워크 유형

  • 도커에는 다양한 네트워크 드라이버가 있음
  • 용도에 맞게 드라이버를 선택해서 사용
  • 기본 네트워크 드라이버는 bridge, host, null 이 있음
  • docker network ls 명령으로 목록 확인 가능
[root@docker ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
5b8289ce8aa7   bridge    bridge    local
b8cce713f8c0   host      host      local
ba6cb7a8aee9   none      null      local


bridge

  • bridge는 컨테이너가 사용하는 프라이빗 네트워크
  • 같은 bridge 에 연결되어 있으면 컨테이너의 IP 주소로 통신할 수 있음
  • 외부로 통신할 때에는 NAT 통신을 사용하며, 외부에서 bridge 로 통신하려면 포트포워딩을 사용해야함.
  • 도커를 설치하면 이름이 docker0인 리눅스 브릿지가 생성되는데, 이는 docker network ls 명령의 출력에서 이름이 bridge 인 네트워크와 동일
[root@docker ~]# docker inspect bridge

...

            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
  • 마지막 Options 섹션에 bridge 네트워크의 옵션들이 나열되어 있는데 그 중 연결되어 있는 브릿지는 docker0 라고 나와있음.
  • inspect로 확인할 수 있는 정보로는 해당 네트워크의 대역과 연결되어 있는 컨테이너의 목록 및 IP 주소 등을 알 수 있음.

  • bridge 드라이버를 사용하는 네트워크는 여러 개 생성할 수 있으며 docker network create 명령을 사용함.
[root@docker ~]# docker network create --help

Usage:  docker network create [OPTIONS] NETWORK

 

bridge 드라이버를 사용하는 net1 네트워크를 생성

[root@docker ~]# docker network create --subnet 192.168.90.0/24 --gateway 192.168.90.254 net1
dfa411a2c40b61a687fa75cd3598b254ea9345b90bde13763d6226c5ded9ba91
[root@docker ~]# docker network ls | grep net1
NETWORK ID     NAME      DRIVER    SCOPE
dfa411a2c40b   net1      bridge    local

 

다음은 net1을 사용하는 os5 컨테이너 생성 및 확인

[root@docker ~]# docker run --name os5 --network net1 -itd centos
7f34873a260fe18a629f145b239841f2661f48590a087a1e0c6f1ae3664fa62c

[root@docker ~]# docker exec os5 ip a s
...
83: eth0@if84: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:c0:a8:5a:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.90.1/24 brd 192.168.90.255 scope global eth0
       valid_lft forever preferred_lft forever

[root@docker ~]# docker inspect os5 | grep -i IP
...
                    "IPAMConfig": null,
                    "IPAddress": "192.168.90.1",
                    "IPPrefixLen": 24,
...  

host

  • 호스트에서 컨테이너의 네트워크 격리를 해제하여 호스트의 네트워크 정보를 공유해서 사용하는 방법
  • 컨테이너는 호스트 입장에서 하나의 프로세스이기 때문에 가상머신과 다르게 네트워크 정보를 공유할 수 있음.
  • 컨테이너가 이 네트워크를 사용할 때 컨테이너의 포트가 호스트에서 사용하는 포트와 충돌해서는 안됨.

 

host 드라이버를 사용하는 web4 컨테이너를 생성 및 확인

[root@docker ~]# docker run -d --name web4 --network host httpd
33ba113143f3e9801e2aa593b0d41c54db5cb65f344d56c09e44cd837c9cf4cf

[root@docker ~]# curl localhost
<html><body><h1>It works!</h1></body></html>
  • bridge 드라이버를 사용하는 컨테이너는 curl 명령으로 웹 서버에 접근하려면 IP 주소를 알아야했음.
  • web4 컨테이너는 localhost 로 조회 할 수 있음
    • 호스트와 네트워크 정보를 같이 공유하기 때문

null(none)

  • null 드라이버는 컨테이너의 네트워크 기능을 사용하지 않음
  • 사용자 정의 네트워크 드라이버와 함께 사용

 

null 드라이버를 사용하는 os6 컨테이너를 실행하면서 ip a s 명령을 실행하고 종료

[root@docker ~]# docker run -it --name os6 --rm --network none centos ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever

[root@docker ~]# docker ps -a | grep os6

overlay

  • overlay 드라이버는 서로 다른 도커 호스트의 컨테이너가 서로 통신할 수 한다.
  • 단일 호스트인 경우에 사용하지 않으며 도커 스웜(Docker Swarm)과 같은 클러스터 서비스에 사용

macvlan

  • macvlan 드라이버는 MAC 주소를 컨테이너에 할당하여 도커 데몬이 트래픽을 컨테이너의 MAC 주소로 라우팅할 수 있게 한다.
  • 호스트의 네트워크를 통해 라우팅 하는 것이 아니라 컨테이너가 실제 네트워크에 직접 연결해야 할 때 사용

macvlan 아이피 확인

  • macvlan 드라이버를 사용하려면 호스트의 인터페이스 중 하나의 네트워크 주소를 알아야 함.
  • 컨테이너는 이 인터페이스와 같은 네트워크 대역을 IP를 할당받기 때문
[root@docker ~]# ip a show enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:a8:29:a3 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.4/24 brd 10.0.2.255 scope global noprefixroute dynamic enp0s3
       valid_lft 520sec preferred_lft 520sec
    inet6 fe80::b20:a37b:ec1b:15a5/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

[root@docker ~]# ip link set enp0s3 promisc on

[root@docker ~]# ip a s enp0s3
2: enp0s3: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:a8:29:a3 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.4/24 brd 10.0.2.255 scope global noprefixroute dynamic enp0s3
       valid_lft 441sec preferred_lft 441sec
    inet6 fe80::b20:a37b:ec1b:15a5/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

macvlan 네트워크 생성

  • 부모 인터페이스 카드를 지정하여 새로운 macvlan 네트워크를 생성
[root@docker ~]# docker network create -d macvlan --subnet=10.0.2.0/24 --gateway=10.0.2.1 --ip-range=10.0.2.64/26 -o parent=enp0s3 macvlan1
79d0ccc647c17fc58f6b5db0cfee90b2d743de14e06269ae4d2e386afb21d3ae

[root@docker ~]# docker network ls
NETWORK ID     NAME       DRIVER    SCOPE
...
79d0ccc647c1   macvlan1   macvlan   local

macvlan 드라이버를 사용하는 컨테이너 생성 후 IP 주소 확인 + 기능 확인

[root@docker ~]# docker run -itd --name os5 --network macvlan1 centos
f7efc97a35a8896e031f7d06f4603e892ae9e626e9ca8f19be3d33257e238d7e

[root@docker ~]# docker inspect os5 | grep -i IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAMConfig": null,
                    "IPAddress": "10.0.2.64",

[root@docker ~]# docker run -itd --name os6 --network macvlan1 centos
e8d3df4fa54cd738d02dfd90450b342d80e64307503fd0e22c4b9a8407302a3c

[root@docker ~]# docker inspect os6 | grep -i ipaddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "10.0.2.65",

[root@docker ~]# docker exec -it os5 ping -c3 10.0.2.65
PING 10.0.2.65 (10.0.2.65) 56(84) bytes of data.
64 bytes from 10.0.2.65: icmp_seq=1 ttl=64 time=0.081 ms
64 bytes from 10.0.2.65: icmp_seq=2 ttl=64 time=0.132 ms
64 bytes from 10.0.2.65: icmp_seq=3 ttl=64 time=0.131 ms

--- 10.0.2.65 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.081/0.114/0.132/0.026 ms

'도커 > 개념 및 실습' 카테고리의 다른 글

06장-1, 이미지 제작 및 업로드  (0) 2021.06.03
05장-2, 컨테이너의 통신  (0) 2021.06.02
04장, 도커 볼륨  (0) 2021.06.02
1, 2, 3장 연습문제  (0) 2021.06.02
03장-3, 컨테이너 관리  (0) 2021.06.02