[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
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 |
블로그의 정보
코딩무비
코딩무비