Docker Network, ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ (1)

2022. 2. 9. 17:00ใ†BACKEND/Docker & Kubernetes

๐Ÿ“Œ  Docker Series

Docker Engine, ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ (1) -  docker engine deep dive

Docker Engine, ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ (2) - namespace, cgroup

> Docker Network, ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ (1) - libnetwork

Docker Network, ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ (2) - bridge, host, none drivers

Docker, ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ - Commands

 

 

์•ˆ๋…•ํ•˜์„ธ์š”.

์˜ค๋Š˜์€ Docker Network๋ฅผ Deep Diveํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์ง€๋‚œ Docker ์‹œ๋ฆฌ์ฆˆ๋กœ Docker Engine์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๊ณ  3๋ถ€๋กœ ์ง„ํ–‰ํ•˜๋ ค ํ–ˆ๋˜ Network์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.

๋‚ด์šฉ๋„ ๋งŽ๊ณ  ๊ฐ€๋ฒผ์šด ์ฃผ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๋”ฐ๋กœ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค ใ€ฐ๏ธ

 

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋‚ด์šฉ์„ ์ถฉ๋ถ„ํžˆ ์ตํ˜”๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ๋ชจ๋“  ๊ทธ๋ฆผ์€ ์ง์ ‘ ๊ทธ๋ฆฐ ๊ฒƒ์œผ๋กœ, ์‚ฌ์šฉ์‹œ ์ถœ์ฒ˜ ํ‘œ์‹œ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค ๐Ÿ™๐Ÿป.

 

---------------    INDEX     --------------

 

[ 1๋ถ€ ]

CNM

Libnetwork

Driver

- Bridge

 

[ 2๋ถ€ ]

- Overlay

- Macvlan

 

----------------------------------------------

 

 

 

Docker์˜ ๋„คํŠธ์›Œํ‚น ๊ตฌ์กฐ๋Š” Container Network Model(CNM)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ˜•ํƒœ๋ฅผ ๊ฐ–์ถฅ๋‹ˆ๋‹ค.

์ฆ‰, Docker ๋„คํŠธ์›Œํ‚น์˜ ๋””์ž์ธ ๊ฐ€์ด๋“œ ์—ญํ• ์„ ํ•˜์ฃ .

 

CNM์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ ๋‚˜๋ฉด, ๊ตฌํ˜„์ฒด์ด์ž Docker Network๋ฅผ ๋‹ด๋‹นํ•˜๋Š” libnetwork์˜ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ดํ•ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ CNM์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋จผ์ € ์•Œ์•„๋ณด๋„๋ก ํ• ๊ฒŒ์š”.

ํ•ด๋‹น ๋งํฌ๋ฅผ ํ†ตํ•ด ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

CNM

Container Network Model

 

CNM์€ ๋””์ž์ธ ์ŠคํŽ™specification์ž…๋‹ˆ๋‹ค.

์ด CNM์€ Docker Network์˜ ์•„์ฃผ ๊ทผ๋ณธ์ ์ธ ์•„์›ƒ๋ผ์ธ์„ ์žก์Šต๋‹ˆ๋‹ค.

 

๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์ค‘๊ฐœํ•˜๋Š” ๊ฒƒ์€ CNM์ด๊ณ ,

๋„คํŠธ์›Œํ‚น์—์„œ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘์„ฑ๊ณผ ๋ณต์žก์„ฑ์„ ์ถ”์ƒํ™”ํ•˜๋Š” ๊ฒƒ๋„ CNM์ž…๋‹ˆ๋‹ค.

 

์ง€๊ธˆ๋ถ€ํ„ฐ ์•„๋ž˜์˜ CNM ๊ตฌ์„ฑ ์„ฑ๋ถ„์˜ ์ฃผ์š” ์„ธ๊ฐ€์ง€์ธ Sandbox, Endpoint, Network๋ฅผ ๊ฐ™์ด ์‚ดํŽด๋ณผ๊ฒŒ์š”.

 

 

Container Network Model

 

โœ”๏ธ Sandboxes

Sandbox๋Š” ๊ฒฉ๋ฆฌ๋œ Network Stack์ž…๋‹ˆ๋‹ค.

 

Network Namespace๋‚˜ FreeBSD Jail๋“ฑ์„ ํ†ตํ•œ ๊ฒฉ๋ฆฌ๋œ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์œผ๋กœ ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Container์˜ ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ routing table, DNS ์„ธํŒ… ๋“ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

Sandbox๋Š” ๋งŽ์€ ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ์˜ ๋งŽ์€ Endpoints๋“ค์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โœ”๏ธ Endpoints

Endpoint๋Š” Sandbox์™€ ๋„คํŠธ์›Œํฌ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. veth์™€ ๊ฐ™์€ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

๋‹จ ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ์™€ ํ•˜๋‚˜์˜ Sandbox๋งŒ์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

 

โœ”๏ธ Networks

๋„คํŠธ์›Œํฌ๋Š” ๋‹ค์ˆ˜์˜ Endpoint๋กœ ๊ตฌ์„ฑ๋œ, Switch(802.1d bridge)๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

๋”ฐ๋ผ์„œ, ์„œ๋กœ ํ†ต์‹ ํ•ด์•ผ ํ•˜๋Š” Endpoint ๊ทธ๋ฃน์„ ๊ทธ๋ฃนํ™”ํ•˜๊ฑฐ๋‚˜ ๊ฒฉ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

 

 

์œ„์™€ ๊ฐ™์€ ๊ตฌ์„ฑ์œผ๋กœ ๋งˆ์น˜ ๊ฒฉ๋ฆฌ๋œ ๊ฒƒ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ ,

์„ค์ •์— ๋”ฐ๋ผ ๋กœ์ปฌ ์ปจํ…Œ์ด๋„ˆ๋‚˜ ์›๊ฒฉ ์ปจํ…Œ์ด๋„ˆ์™€ ํ†ต์‹ ํ•  ์ˆ˜๋„ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ด์ œ ์‹ค์ œ๋กœ ๊ตฌํ˜„๋œ ๋‚ด์šฉ์„ ์•Œ์•„๋ณด๋ฉฐ ์ œ๋Œ€๋กœ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

Libnetwork

CNM์ด ์„ค๊ณ„ ๋ฌธ์„œ๋ผ๋ฉด, libnetwork๋Š” ๊ทธ์— ๋Œ€ํ•œ ํ‘œ์ค€ ๊ตฌํ˜„์ฒด์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๊ตฌํ˜„๋˜์–ด Docker Network์˜ ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํ‚น์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์ฃ .

 

Libnetwork๋Š” ์œ„์—์„œ ์†Œ๊ฐœํ•œ Sandboxes, Endpoints, Networks๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜, libnetwork๋Š” ์˜คํ”ˆ์†Œ์Šค์ด๋ฉฐ, Go๋กœ ์ž‘์„ฑ๋˜์–ด cross-flatform์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

libnetwork Repository์—์„œ ์˜คํ”ˆ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

libnetwork

 

โœ”๏ธ History

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ ์ž ์‹œ ๋‹ค๋ค˜๋˜ ๊ฒƒ์ฒ˜๋Ÿผ, ์ดˆ๊ธฐ ๋„์ปค์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์—ญํ• ์„ ๋„์ปค ๋ฐ๋ชฌ์ด ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํ‚น๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋„คํŠธ์›Œํ‚น์— ๊ด€๋ จ๋œ ์ฝ”๋“œ๊ฐ€ ๋ฐ๋ชฌ ๋‚ด์— ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ ๋ฐ๋ชฌ์€ ์ ์  ๋ฌด๊ฑฐ์›Œ์กŒ๊ณ , ๋ฌด์—‡๋ณด๋‹ค ๋ฆฌ๋ˆ…์Šค ์›์น™์„ ๋”ฐ๋ฅด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ž‘์€ ๊ฒƒ์ด ์•„๋ฆ„๋‹ต๋‹ค”๋ผ๋Š” ๋ฆฌ๋ˆ…์Šค ์›์น™์€ ๋…๋ฆฝ์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•˜๋Š” ์ž‘๊ณ  ๋ชจ๋“ˆํ™”๋œ ๋ณตํ•ฉ์ ์ธ ๋„๊ตฌ๋“ค์„ ๊ฐœ๋ฐœํ•œ๋‹ค๋Š” ์ฒ ํ•™์œผ๋กœ,

์ด๋กœ์ธํ•ด ๋„์ปค ๋„คํŠธ์›Œํ‚น์ด ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ํ™œ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑ๋˜์ง€๋„ ์•Š์•˜์Šต๋‹ˆ๋‹ค (์žฌ์‚ฌ์šฉ ๋ถˆ๊ฐ€)

 

 

โœ”๏ธ Nowadays

๊ฒฐ๊ณผ์ ์œผ๋กœ, CNM์— ๊ธฐ๋ฐ˜์„ ๋‘” libnetwork ์™ธ๋ถ€์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ฆฌํŒฉํ„ฐ๋ง๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ˜„์žฌ๋Š” ๋ชจ๋“  ํ•ต์‹ฌ ๋„์ปค ๋„คํŠธ์›Œํ‚น ์ฝ”๋“œ๋Š” libnetwork์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

libnetwork๋Š” ๋…๋ฆฝ์ ์ด๊ณ , ๋ชจ๋“ˆํ™”๋˜์–ด ์กฐ๋ฆฝํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ Service Discovery, ์ˆ˜์‹  ๊ธฐ๋ฐ˜์˜ingress-based ์ปจํ…Œ์ด๋„ˆ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ, ๋„คํŠธ์›Œํฌ ์ œ์–ด๋ถ€๋ถ„์™€ ๊ด€๋ฆฌ๋ถ€๋ถ„ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

Driver

Libnetwork๊ฐ€ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•ด ์ œ์–ดํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค๋ฉด ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Libnetwork์˜ ์ด์‹์„ฑ์ด ์ปค์ง„๋ฐ์—๋Š” Driver์˜ ํฐ ์˜ํ–ฅ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” Driver๊ฐ€ ํ”Œ๋Ÿฌ๊ทธํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ธํ•ด ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

๋„์ปค์—์„œ๋Š” ํ”Œ๋Ÿฌ๊ทธํ˜•์˜ ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”.

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ค ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ• ์ง€ ์•Œ์•„๋ด์•ผ๊ฒ ์ฃ ?

 

๋“œ๋ผ์ด๋ฒ„๋Š” ์ด์ œ๋ถ€ํ„ฐ ์•Œ์•„๋ณผ Docker Engine์— ํฌํ•จ๋œ ๋‚ด์žฅ ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์žˆ๊ณ ,

ํ˜น์€ ๋„คํŠธ์›Œํ‚น ๋ฒค๋”์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ฒ„๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

Docker Network Drivers

 

๋‚ด์žฅ ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ฒ„๋Š” bridge, overlay, macvlan ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ํฌ์ŠคํŒ…์—์„œ๋Š” container๋ฅผ ์‹คํ–‰ํ•  ๋•Œ default๋กœ ์„ค์ •๋˜๋Š” ๋‚ด์šฉ์— ๋Œ€ํ•œ ํฐ ๊ทธ๋ฆผ์„ ๋‹ค๋ฃจ๊ณ ,

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ driver์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

Docker Container๋ฅผ ์•„๋ฌด๋Ÿฐ ์„ค์ •์—†์ด ์‹คํ–‰ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์ด ๋˜๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ docker0๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ• ๊ฒŒ์š”.

 

 

โœ”๏ธ docker0

๋„์ปค๋ฅผ ์ฒ˜์Œ ์„ค์น˜ํ•˜๊ฒŒ ๋˜๋ฉด ๋„์ปค ํ˜ธ์ŠคํŠธ์— docker0๋ผ๋Š” ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

# docker host
$ ip link show docker0
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc...
    link/ether 02:42:af:f9:eb:4f brd ff:ff:ff:ff:ff:ff

 

docker0๋Š” ์ผ๋ฐ˜์ ์ธ ๊ฐ€์ƒ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•„๋‹ˆ๋ฉฐ,

๋„์ปค๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ฒ„ ์ค‘ ๋ธŒ๋ฆฌ์ง€(Bridge)์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ฆฌ์ง€์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์š”์•ฝํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

Bridge ?

์ผ๋ฐ˜์ ์ธ ๋„คํŠธ์›Œํ‚น์—์„œ ๋ธŒ๋ฆฌ์ง€๋Š” ๋„คํŠธ์›Œํฌ ์„ธ๊ทธ๋จผํŠธ ๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•˜๋Š” ๋งํฌ ๊ณ„์ธต ์žฅ์น˜์ž…๋‹ˆ๋‹ค. 

๋ธŒ๋ฆฌ์ง€๋Š” ํ•˜๋“œ์›จ์–ด ์žฅ์น˜์ผ ์ˆ˜๋„ ์žˆ๊ณ  ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์˜ ์ปค๋„ ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์น˜์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

*๋„คํŠธ์›Œํฌ ์„ธ๊ทธ๋จผํŠธ : ๋„คํŠธ์›Œํฌ ์„ธ๊ทธ๋จผํ…Œ์ด์…˜์€ ๋„คํŠธ์›Œํฌ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„ธ๊ทธ๋จผํŠธ๋‚˜ ์„œ๋ธŒ๋„ท์œผ๋กœ ๋‚˜๋ˆ„๋Š” ์•„ํ‚คํ…์ฒ˜ ๋ฐฉ์‹์œผ๋กœ, ๊ฐ๊ฐ์ด ์†Œ๊ทœ๋ชจ ๋„คํŠธ์›Œํฌ ์—ญํ• ์„ ํ•จ

 

Docker์—์„œ ๋ธŒ๋ฆฌ์ง€๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ธŒ๋ฆฌ์ง€ ์ž…๋‹ˆ๋‹ค. 

๋™์‹œ์—, ์„œ๋กœ ๋‹ค๋ฅธ ๋ธŒ๋ฆฌ์ง€ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋œ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฒฉ๋ฆฌ๋ฅผ ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

์ž, ๋‹ค์‹œ docker0์— ์ง‘์ค‘ํ•ด๋ณผ๊ฒŒ์š”.

 

๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ด docker0 ๋ธŒ๋ฆฌ์ง€๋ฅผ ํ™œ์šฉํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด์šฉ์„ ์ž์„ธํžˆ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

$ docker network inspect bridge
[
    {
        "Name": "bridge",
        ...
        "IPAM": {
	        ...
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        ...
        "Options": {
            ...
            "com.docker.network.bridge.name": "docker0",
            ...
        },
        "Labels": {}
    }
]

 

 

docker0 ์ธํ„ฐํŽ˜์ด์Šค๋Š” 172.17.0.0/16 ์„œ๋ธŒ๋„ท์„ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ด ๋Œ€์—ญ ์•ˆ์—์„œ IP๋ฅผ ํ• ๋‹น๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (์˜ˆ: 172.17.0.2172.17.0.3)

 

 

โœ”๏ธ Big Picture

Docker Container๋ฅผ ์‹คํ–‰ run ํ•˜๊ฒŒ ๋˜๋ฉด, ๊ฐ€์žฅ ๋จผ์ € Container ๊ธฐ์ˆ ๋กœ ์„ค์ •๋œ ํ™˜๊ฒฝ์„ ๊ฒฉ๋ฆฌ์‹œํ‚ต๋‹ˆ๋‹ค.

์ด๋•Œ, Container ๊ธฐ์ˆ ์ด๋ผ๊ณ  ํ•˜๋ฉด ์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ค˜๋˜ Linux Namespace์™€ Cgroup์„ ํ†ตํ•œ ๊ฒฉ๋ฆฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

 

"docker0" bridge network

 

 

๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ lo, eth0 ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง€๋Š”๋ฐ์š”.

๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ eth0์—๋Š” 127.17.x.x/16 ๋Œ€์—ญ์— ํ•ด๋‹นํ•˜๋Š” IP๋ฅผ ํ• ๋‹น ๋ฐ›์Šต๋‹ˆ๋‹ค.

์ด ๋Œ€์—ญ์€ ํ˜ธ์ŠคํŠธ ๋‚ด๋ถ€์˜ ์‚ฌ์„ค IP์ด๋ฏ€๋กœ ์™ธ๋ถ€์—์„œ ์ ‘์†์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Container์— ํ• ๋‹น๋˜๋Š” IP๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žฌ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๊ทธ๋ž˜์„œ ๋„์ปค ์—”์ง„์—์„œ๋Š” ํ˜ธ์ŠคํŠธ์— veth ๋ผ๋Š” ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ eth0์™€ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

 

 

์ •๋ฆฌํ•˜์ž๋ฉด, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฒ˜์Œ ์‹คํ–‰๋  ๋•Œ ๋„์ปค ์—”์ง„์€ ์™ธ๋ถ€ ํ™˜๊ฒฝ๊ณผ ํ†ต์‹ ์„ ์œ„ํ•ด ํ•œ์Œ(2๊ฐœ)์˜ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

โœ”๏ธ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ Namespace์— ํ• ๋‹น๋˜๋Š” eth0 ์ธํ„ฐํŽ˜์ด์Šค

โœ”๏ธ ํ˜ธ์ŠคํŠธ ๋„คํŠธ์›Œํฌ ๋ธŒ๋ฆฌ์ง€ docker0์— ๋ฐ”์ธ๋”ฉ๋  vethXXXXXXX ์ด๋ฆ„์„ ๊ฐ–๋Š” veth ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค

veth: virtual ethernet

 

์ปจํ…Œ์ด๋„ˆ์˜ eth0์ธํ„ฐํŽ˜์ด์Šค์™€ ํ˜ธ์ŠคํŠธ์˜ veth ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ ,

veth ์ธํ„ฐํŽ˜์ด์Šค๋“ค์€ ํ˜ธ์ŠคํŠธ์˜ docker0 ๋ธŒ๋ฆฟ์ง€์— ๋ฐ”์ธ๋”ฉ๋˜์–ด ์™ธ๋ถ€์™€์˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

์ด docker0 bridge๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ๊ฒŒ์ดํŠธ์›จ์ด ์—ญํ• ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๊ฒฐ๊ตญ docker0 ๋ธŒ๋ฆฌ์ง€๋Š” veth ๊ฐ€์ƒ ์ธํ„ฐํŽ˜์ด์Šค์™€ ํ˜ธ์ŠคํŠธ์˜ eth0 ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์–ด์ฃผ๋Š” ์ค‘๊ฐ„ ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์ฃ .

docker0 Bridge์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋๋‹ค๋ฉด, ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃฐ User-defined Bridge Networks์— ๋Œ€ํ•œ ์ดํ•ด๋„ ์•„์ฃผ ์‰ฌ์šธ ๊ฑฐ์—์š”.

 

 

 

์ด๋ ‡๊ฒŒ docker network 1 ํฌ์ŠคํŒ…์„ ๋งˆ๋ฌด๋ฆฌ ํ•˜๊ณ , 

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋“œ๋ผ์ด๋ฒ„์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ •์‚ฌํ•ญ์ด๋‚˜ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์€ ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ™Œ๐Ÿป

 

 

 

์ฐธ๊ณ 

https://www.docker.com/blog/understanding-docker-networking-drivers-use-cases/

https://docs.docker.com/network/