[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 인 네트워크와 동일
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