일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 도커
- database
- OSI7계층
- 리눅스
- 라우팅프로토콜
- Cosmos
- osi7layer
- 라우팅
- 코딩테스트
- Container
- TDD
- 스노트 룰
- 코딩 테스트
- docker
- programmers
- db
- Routing
- 스노트
- 데이터베이스
- Router
- MySQL
- 라우터
- Snort Rule
- 트레바리
- 프로그래머스
- coding test
- Linux
- 컨테이너
- Python
- snort
- Today
- Total
Simple is IT, 누구나 보고 누구나 깨닫는 IT
Docker Network 구조는 어떨까, 그리고 종류는? (1/2) 본문
Docker Network 구조와 종류는 어떨까? - 1/2
많은 엔지니어, 개발자들이 사용하는 도커임에도 추상적인 네트워크에 대해 이해가 어려울 때가 많을 거에요.
그런 분들을 위해
이 두루뭉실한 네트워크 구조와 종류를 확실하게 파악하는 것이 포스팅의 목적이에요.
- Docker Network의 구조를 파악해보자 !
컨테이너 내부에서 인터페이스를 확인 해봅시다.
docker exec [container-id] ifconfig
output:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 4093 bytes 14274253 (14.2 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3092 bytes 171175 (171.1 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 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
확인해보니 일반 호스트와 다를게 없네요? eth0, lo Interface와 172.17.0.0/16 대역을 갖고 있음을 확인 했어요.
'172.17.0.2'는 해당하는 Subnet(172.17.0.0/16)에서 컨테이너에 순차적으로 IP를 할당하게 되어있어요.
또, 재시작 시 변경될 수도 있답니다.
해당 Subnet은 Docker Container 내부에서 할당하는 대역이에요. 즉, 바깥과 통신하기 위한 무언가가 필요하다는 말이죠.
HOW?
그렇다면 이 대역은 어떻게 바깥 네트워크 대역과 통신이 가능할까요?
이런 과정은 'Host'에서 컨테이너를 실행할 때마다 생성되는 veth... Interface와 연관이 있어요.
Docker는 각 컨테이너의 외부 연결을 위해 컨테이너마다 가상 인터페이스를 하나씩 생성해주어야 합니다.
따로 생성해주지 않아도 네트워크는 잘 되는데요?
맞아요! 사실 가상 인터페이스는 사용자가 직접 생성하는 것이 아닌 도커 엔진에서 자동을 생성한답니다. veth...라는 이름으로 말이죠.
veth : virtual ethernet
컨테이너를 생성한 'Host'에서 인터페이스를 확인해봅시다.
ifconfig
output:
docker0 Link encap:Ethernet HWaddr 02:42:bf:83:fa:71
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::42:bfff:fe83:fa71/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3092 errors:0 dropped:0 overruns:0 frame:0
TX packets:4085 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:127887 (127.8 KB) TX bytes:14273605 (14.2 MB)
ens33 Link encap:Ethernet HWaddr ...
lo Link encap:Local Loop...
veth23890e1 Link encap:Ethernet HWaddr 32:14:59:53:c6:30
inet6 addr: fe80::3014:59ff:fe53:c630/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3092 errors:0 dropped:0 overruns:0 frame:0
TX packets:4093 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:171175 (171.1 KB) TX bytes:14274253 (14.2 MB)
end33, lo, veth.. 그리고 docker0 Interface가 확인되었어요.
생성된 가상 인터페이스는 docker0이라는 'Bridge'도 존재하는데, 이 인터페이스는 각 veth...와 바인딩 되어 호스트 외부 인터페이스와 이어주는 역할을 해요.
아래 구성을 보시면 이해가 더 쉬울겁니다!
실제로 바인딩이 되었는지 확인
# brctl show docker0
bridge name bridge id STP enabled interfaces
docker0 8000.0242bf83fa71 no veth23890e1
이번 포스팅은 Docker Network 구조에 대해서 알아보았습니다 !
정말 흥미로운 친구이지만 그 만큼 알아야 할 부분도 많겠지요.
다음 포스팅에서 Docker Network 구조를 기반으로 어떤 종류의 네트워크가 사용되는지를 알아볼게요.
감사합니다.
'Simple is IT > Cloud & Container' 카테고리의 다른 글
K8S(kubernetes) 공식 문서 (0) | 2020.06.06 |
---|---|
Docker Network 구조는 어떨까, 그리고 종류는? (2/2) (0) | 2020.06.02 |
Docker Swarm을 이용한 효율적인 컨테이너 배포 (0) | 2020.05.21 |
가장 빨리만나는 도커(Docker) (0) | 2020.05.07 |
아마존 웹 서비스를 다루는 기술 (0) | 2020.05.07 |