Docker ๋คํธ์ํฌ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
๋์ปค ๋คํธ์ํฌ๋ ์ค์ ๋ฆฌ๋ ์ค ๋คํธ์ํฌ ์ธํ๋ผ ์์ ๋ค์ํ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ์ IPAM ๋๋ผ์ด๋ฒ๊ฐ ๊ณ์ธต์ฒ๋ผ ์ฌ๋ผ๊ฐ๊ณ , ๊ทธ ์์์ ๋์ปค ์์ง์ด ๋ ผ๋ฆฌ์ ๋คํธ์ํฌ๋ฅผ ๋ง๋ค์ด ์ปจํ ์ด๋์ ์ฐ๊ฒฐํ๋ค.
Network Infrastructure
- ์ค์ ๋ฆฌ๋ ์ค์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค (eth0, wlan0 ๋ฑ), ๋ธ๋ฆฌ์ง, ๋ผ์ฐํฐ, iptables, ipvs ๊ฐ์ ์ปค๋ ๋คํธ์ํฌ ๊ธฐ๋ฅ์ด ๋์๊ฐ๋ ๊ธฐ๋ฐ ๊ณ์ธต
Network Driver
- ๋คํธ์ํฌ์ ์ข ๋ฅ (bridge, overlay, macvlan ๋ฑ)๋ฅผ ์ ํ๊ณ , ๋ฆฌ๋ ์ค ์ปค๋ ์์ (๋ธ๋ฆฌ์ง ๋๋ฐ์ด์ค, VXLAN ๋ฑ)์ ์ค์ ๋ก ๋ง๋๋ ํ๋ฌ๊ทธ์ธ ๊ณ์ธต
- bridge๋ ๋ก์ปฌ ๋ธ๋ฆฌ์ง, overlay๋ ๋ฉํฐํธ์คํธ ๋ถ์ฐ ๋คํธ์ํฌ, macvlan์ ํธ์คํธ NIC์ฒ๋ผ ๋์
IPAM Driver
- IP Address Management. ๊ฐ ๋คํธ์ํฌ์ IP ํ, ์๋ธ๋ท์ ๊ด๋ฆฌํ๊ณ ์ปจํ ์ด๋๋ง๋ค IP๋ฅผ ํ ๋น
- ๊ธฐ๋ณธ IPAM ์ธ์ ์ธ๋ถ DHCP ๋ฑ ์ปค์คํ ๋๋ผ์ด๋ฒ๋ ๊ฐ๋ฅ
Docker Engine
- ์ ๋๋ผ์ด๋ฒ ๊ณ์ธต์ ํตํฉ
- ์ฌ์ฉ์๊ฐ
docker network create
,docker network connect
๊ฐ์ ๋ช ๋ น์ ๋ด๋ฆฌ๋ฉด ์ค์ ๋คํธ์ํฌ ๋ฆฌ์์ค์ IP ํ ๋น, ๋ผ์ฐํ ์ ์ฑ ๋ฑ์ ์ฒ๋ฆฌ
Docker Network
- ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ง๋ค์ด์ง ๋คํธ์ํฌ ๋จ์
- bridge, overlay, macvlan, host, none ๋ฑ ๋ค์ํ ์ ํ์ด ์๊ณ ์ปจํ ์ด๋๋ฅผ ํน์ ๋คํธ์ํฌ์ ์ฐ๊ฒฐํ๋ฉด, ๋ฆฌ๋ ์ค ๋ด์์ ์ค์ ๋คํธ์ํฌ ๋ฆฌ์์ค (์: ๋ธ๋ฆฌ์ง, VXLAN ๋ฑ)๊ฐ ์์ฑ
Network Sandbox
- ์ปจํ ์ด๋๋ง๋ค ์์ฑ๋๋ ๋คํธ์ํฌ ๊ฒฉ๋ฆฌ ๊ณต๊ฐ
- ๋ค์์คํ์ด์ค๋ก ๊ฒฉ๋ฆฌ๋์ด ์์ ์ ๊ฐ์ ์ด๋๋ท (veth), ๋ผ์ฐํ ํ ์ด๋ธ, iptables ๋ฃฐ, /etc/hosts, /etc/resolv.conf๋ฅผ ๋ฐ๋ก ๋ณด์
Endpoint
- ๋คํธ์ํฌ์ ์ปจํ ์ด๋๊ฐ ๋ถ์ ๋ ๋ง๋ค์ด์ง๋ ์ฐ๊ฒฐ์
- ์ปจํ ์ด๋์ veth ์ธํฐํ์ด์ค ํ ์ชฝ์ด host ๋ธ๋ฆฌ์ง(๋คํธ์ํฌ)๋ก, ํ ์ชฝ์ด ์ปจํ ์ด๋ ๋ค์์คํ์ด์ค๋ก ์ฐ๊ฒฐ
- ํ๋์ ์ปจํ ์ด๋๊ฐ ์ฌ๋ฌ ๋คํธ์ํฌ์ ์ฌ๋ฌ endpoint๋ก ๋์์ ๋ถ์ ์๋ ์์
๋์ปค์์ ์ง์ํ๋ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ
Note
์ด ์ค์์ bridge, host, none์ด ๋ก์ปฌ ๊ธฐ๋ณธ ๋ด์ฅ
overlay, macvlan, ipvlan์ ํ๊ฒฝ/ํ๋ฌ๊ทธ์ธ์ ๋ฐ๋ผ ์ง์(์ผ๋ถ OS์์๋ ์ ํ ์์)
๋๋ถ๋ถ์ ๋คํธ์ํฌ ์๊ตฌ๋ bridge, overlay, host ์กฐํฉ๋ง์ผ๋ก ์ถฉ๋ถํ ํด๊ฒฐ ๊ฐ๋ฅ.
bridge ย
- ๊ธฐ๋ณธ๊ฐ. ๋จ์ผ ํธ์คํธ ๋ด์์ ์ปจํ ์ด๋๋ผ๋ฆฌ ํต์ ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฐ์ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ.
- ๊ฐ ์ปจํ ์ด๋๋ง๋ค ๋ด๋ถ IP ํ ๋น, ํธ์คํธ์๋ NAT๋ก ํต์ .
docker network create
๊ธฐ๋ณธ ์ต์ .- ์ฌ์ฉ ์: ์ฌ๋ฌ ์น์ฑ, DB๋ฅผ ํ ์๋ฒ์์ ๋ฐ๋ก ๋์ธ ๋
host ย
- ์ปจํ ์ด๋๊ฐ ํธ์คํธ์ ๋คํธ์ํฌ ๋ค์์คํ์ด์ค๋ฅผ 100% ๊ณต์ ย
- ๋ณ๋ IP/NAT ์์ด, ํธ์คํธ์์ ์ด๋ ค์๋ ํฌํธ์ ์ง์ ์ ๊ทผ.
- ํฌํธ ๋งคํ(
-p
) ์ต์ ๋ฌด์๋ฏธ - ์ฃผ๋ก ํผํฌ๋จผ์ค ๊ทน๋ํ, ๋ก์ฐ๋ ๋ฒจ ๋คํธ์ํฌ ์ ๊ทผ์ด ํ์ํ ๋ ์ฌ์ฉ
none ย
- ๋คํธ์ํฌ ๋ฏธ์ฐ๊ฒฐ ์ํ
- ์ปจํ ์ด๋๊ฐ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ์์(์ธํฐ๋ท, ๋ด๋ถ ํต์ ๋ชจ๋ ๋ถ๊ฐ)
- ์ธ๋ถ ๋คํธ์ํฌ์ ์์ ํ ๊ฒฉ๋ฆฌ๋ ์คํ, ๋ณด์ ํ๊ฒฝ ๋ฑ์ ์ฌ์ฉ
overlay ย
- ์ฌ๋ฌ ํธ์คํธ(๋ฉํฐ์๋ฒ)์์ ์ปจํ ์ด๋ ๋คํธ์ํฌ๋ฅผ ๊ฐ์์ผ๋ก ์ฐ๊ฒฐ
- VXLAN ๋ฑ ํฐ๋๋ง ๊ธฐ์ ๋ก, ์๋ฒ ๊ฐ ์ปจํ ์ด๋๋ผ๋ฆฌ ๊ฐ์ ๋คํธ์ํฌ์ ์๋ ๊ฒ์ฒ๋ผ ํต์
- Docker Swarm, Kubernetes ๋ฑ ์ค์ผ์คํธ๋ ์ด์ ํ๊ฒฝ์์ ํ์
macvlan ย
- ์ปจํ ์ด๋๊ฐ ์ค์ ๋ฌผ๋ฆฌ NIC์ฒ๋ผ ๋์(๊ณ ์ MAC ์ฃผ์/IP ๋ถ์ฌ)
- ํธ์คํธ ๋คํธ์ํฌ์ ์ปจํ ์ด๋๊ฐ L2 ์ค์์น์ฒ๋ผ ์ง์ ํต์ ๊ฐ๋ฅ
- IoT, ๋ ๊ฑฐ์ ์์คํ ์ฐ๋ ๋ฑ, ๋ฌผ๋ฆฌ๋ง ํตํฉ์ด ํ์ํ ์ํฉ์ ์ ํฉ
ipvlan ย
- macvlan๊ณผ ๋น์ทํ์ง๋ง, IP ์ฃผ์๋ง ๋ถ๋ฆฌํด ์ฌ๋ฌ ์ปจํ ์ด๋์ ๋ถ์ฌ
- MAC ์ฃผ์๋ ๊ณต์ , IP๋ง ๋ ๋ฆฝ
- ๊ณ ์ฑ๋ฅ ๋คํธ์ํฌ ๋ถ๋ฆฌ๊ฐ ํ์ํ ๋ ์ฌ์ฉ
macOS์ Linux์์ ๋์ปค ๋คํธ์ํฌ ๊ตฌ์กฐ ์ฐจ์ด
Linux
- ๋์ปค ๋ฐ๋ชฌ(dockerd)์ด ๋ฆฌ๋ ์ค ์ปค๋์์ ์ง์ ์คํ
- ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ(bridge, overlay ๋ฑ)๊ฐ ๋ฆฌ๋
์ค ๋คํธ์ํฌ ๋ค์์คํ์ด์ค, ๋ธ๋ฆฌ์ง(bridge), veth ํ์ด(veth), iptables, ipvs ๋ฑ ์ปค๋ ๊ธฐ๋ฅ์ ๋ค์ดํฐ๋ธํ๊ฒ ์ฌ์ฉ
- ๋ค์์คํ์ด์ค: ๊ฐ ์ปจํ ์ด๋๋ง๋ค ๋ถ๋ฆฌ๋ ๋คํธ์ํฌ ํ๊ฒฝ์ ์ ๊ณต
- bridge(docker0): ์ฌ๋ฌ ์ปจํ ์ด๋์ ํธ์คํธ๋ฅผ ํ๋์ ๋ด๋ถ ๊ฐ์ ์ค์์น๋ก ๋ฌถ์
- veth pair: ์ปจํ ์ด๋ โ ๋ธ๋ฆฌ์ง(๋๋ ํธ์คํธ) ์ฐ๊ฒฐ์ฉ ๊ฐ์ ์ด๋๋ท ์ผ์ด๋ธ ์ญํ
- enp0sX, eth0 ๋ฑ: ๋ฆฌ๋ ์ค ํธ์คํธ์ ์ค์ ๋ฌผ๋ฆฌ NIC ์ด๋ฆ
- ์ปจํ ์ด๋ ๋คํธ์ํฌ(bridge ๋ฑ)๊ฐ ํธ์คํธ ์์คํ ๋คํธ์ํฌ์ ๊ฑฐ์ 1:1๋ก ๋์
- ์ฑ๋ฅ, ํธํ์ฑ, ์ปค์คํ ๋คํธ์ํฌ ํ๋ฌ๊ทธ์ธ์์ ์ ์ฝ์ด ์์
macOS
- ๋ฆฌ๋ ์ค ์ปค๋์ด ์์ โ ์ง์ง dockerd๊ฐ ์ง์ ๋ชป ๋์๊ฐ
- Docker Desktop์ด ๋ฆฌ๋ ์ค ๊ฐ์๋จธ์ (์์ ์ HyperKit, ์ต๊ทผ์ Apple Silicon์ฉ Lima/VM, QEMU ๋ฑ) ์์ dockerd์ ์ปจํ ์ด๋๋ฅผ ๋๋ฆผ
- ์ค์ ์ปจํ
์ด๋ ๋คํธ์ํฌ๋ VM ๋ด๋ถ์์๋ง ๋ง๋ค์ด์ง (ex: ๋ฆฌ๋
์ค VM ์์ bridge, veth, iptables)
- bridge, veth, ๋ค์์คํ์ด์ค ๋ฑ ๋คํธ์ํฌ ๊ตฌ์กฐ๊ฐ ๋ชจ๋ ๊ฐ์๋จธ์ ๋ด๋ถ์์๋ง ๋์
- macOS์์ ๋ณด์ด๋ en0, en1, bridge100 ๋ฑ์ ๋งฅ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค
- macOS์ ๋คํธ์ํฌ๋ โ๊ฐ์๋จธ์ ๊ณผ ํธ์คํธ ์ฌ์ดโ์์ NAT, ํฌํธํฌ์๋ฉ ๋ฑ์ผ๋ก ์ค๊ณ๋จ
- ex: macOS์
localhost:ํฌํธ
โ VM ๋คํธ์ํฌ ์ธํฐํ์ด์ค โ ์ปจํ ์ด๋
- ex: macOS์
- macvlan ๋ฑ ์ผ๋ถ ๊ณ ๊ธ ๋คํธ์ํฌ ๊ธฐ๋ฅ์ ๋์ ๋ถ๊ฐ ๋๋ ์ ์ฝ ์์
- ๋ฌผ๋ฆฌ ๋คํธ์ํฌ ์ธํฐํ์ด์ค(macvlan ๋ฑ) ์ง์ ์ฐ๊ฒฐ ๋ถ๊ฐ
- veth, bridge๋ VM ๋ด๋ถ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
์ฃผ์ ์ฐจ์ด ํฌ์ธํธ
bridge ๋คํธ์ํฌ
- Linux: ์ปจํ ์ด๋์ ํธ์คํธ๊ฐ ๊ฐ์ ๋ธ๋ฆฌ์ง ๋ด์์ ๋ฐ๋ก ํต์ ๊ฐ๋ฅ, iptables๋ก ๋ผ์ฐํ /ํฌํธํฌ์๋ฉ ์ฒ๋ฆฌ
- macOS: ๋ธ๋ฆฌ์ง๋ ๋ฆฌ๋
์ค VM ๋ด๋ถ์๋ง ์กด์ฌ, macOS ํธ์คํธ์์ ์ง์ ๋ธ๋ฆฌ์ง์ ์ ๊ทผ ๋ถ๊ฐ
- ๋์ Docker Desktop์ด โํฌํธํฌ์๋ฉโ ๊ธฐ๋ฅ์ผ๋ก ๋งตํํด์ค
host ๋คํธ์ํฌ
- Linux:
--network=host
์ฐ๋ฉด ์ปจํ ์ด๋๊ฐ ํธ์คํธ์ ๋คํธ์ํฌ ๋ค์์คํ์ด์ค (eth0, localhost ๋ฑ)๋ฅผ ์์ ํ ๊ณต์- ํฌํธ ๋งคํ(
-p
)์ด ํ์ ์๊ณ , ํธ์คํธ์ ๋์ผํ ๋คํธ์ํฌ ํ๊ฒฝ์์ ๋์
- ํฌํธ ๋งคํ(
- macOS: Docker Desktop์์ ์ต๊ทผ host ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ๋ฅผ ์ง์ํ์ง๋ง, ์ปจํ
์ด๋๊ฐ ์ค์ ๋ก ๊ณต์ ํ๋ ๊ฑด ๋ฆฌ๋
์ค VM ๋ด๋ถ์ ๋คํธ์ํฌ ๋ค์์คํ์ด์ค
- macOS์ ์ง์ง ๋ฌผ๋ฆฌ์ ๋คํธ์ํฌ(ํธ์คํธ ์์คํ ์ localhost, ๊ณต์ธ IP, ๋ฐฉํ๋ฒฝ ๋ฑ)์๋ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ง ์์
- ํฌํธํฌ์๋ฉ์ด๋ ์ถ๊ฐ ์ค์ ์์ด โ์ปจํ ์ด๋ โ macOS ํธ์คํธ ๊ฐ ๋คํธ์ํฌ๋ฅผ 1:1๋ก ๊ณต์ โํ๋ ๊ฑด ๋ถ๊ฐ๋ฅ
- ๋ฐ๋ผ์ host ๋คํธ์ํฌ๋ฅผ ์จ๋ ๋ฆฌ๋ ์ค ํ๊ฒฝ๊ณผ ๋์ ๋ฐฉ์, ์ ๊ทผ ๊ฐ๋ฅํ ๋คํธ์ํฌ ๋ฒ์๊ฐ ๋ค๋ฅด๋ ์ฃผ์ ํ์
macvlan, ipvlan
- Linux: NIC ๋ ๋ฒจ์์ ๊ฐ์ ์ธํฐํ์ด์ค ๋ง๋ค์ด ๋คํธ์ํฌ ๋ถ๋ฆฌ, VLAN ์ฐ๋๋ ๊ฐ๋ฅ
- macOS: ์ด๋ฐ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ ์์ ์ง์ ์ ํ๊ฑฐ๋, ๊ฐ์๋จธ์ ๋ด๋ถ ๋คํธ์ํฌ์๋ง ํ์
Overlay, ๋ฉํฐํธ์คํธ ๋คํธ์ํฌ
- Linux: overlay ๋คํธ์ํฌ ๋ง๋ค์ด์ ์ฌ๋ฌ ๋ฆฌ๋ ์ค ํธ์คํธ ์ฌ์ด์์ ์ปจํ ์ด๋ ๋คํธ์ํฌ ์ง์ ์ฐ๊ฒฐ ๊ฐ๋ฅ
- macOS: overlay ์์ฒด๋ VM ์์์๋ง ๋์๊ฐ๊ณ , ์ค์ ์ธ๋ถ ํธ์คํธ/ํด๋ฌ์คํฐ์ ์ฐ๊ฒฐ์ ์ด๋ ต๊ฑฐ๋ ๋ณ๋ ํฐ๋๋ง ํ์
์ฑ๋ฅ
- Linux: ๋คํธ์ํฌ I/O๊ฐ ๊ณง๋ฐ๋ก ์ปค๋๋ก, ์ฑ๋ฅ ์ ํ ๊ฑฐ์ ์์
- macOS: ํญ์ โVM์ ํ ๋ฒ ๊ฑฐ์น๋ ๊ตฌ์กฐโ๋ผ ๋คํธ์ํฌ ์ง์ฐ, ํจํท ๋๋กญ, throughput ๊ฐ์๊ฐ ์๊ธธ ์ ์์
์ ๋ฆฌ
- ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ์ IPAM ๋๋ผ์ด๋ฒ๊ฐ ์ค์ ์ปค๋ ๋ฆฌ์์ค ์์ฑ, ์ฃผ์ ํ ๋น์ ์ถ์ํ
- ์ปจํ ์ด๋๋ง๋ค ๋ณ๋ ๋ค์์คํ์ด์ค(=network sandbox)๊ฐ ๋ง๋ค์ด์ ธ ์ถฉ๋ ์์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ด์
- ๋ ผ๋ฆฌ์ ๋คํธ์ํฌ๋ฅผ CLI/API๋ก ์์ ๋กญ๊ฒ ๋ง๋ค๊ณ ์ฌ๋ฌ ์ปจํ ์ด๋๊ฐ ๋์์ ์ ์ ๊ฐ๋ฅ
- overlay, macvlan, 3rd party CNI ํ๋ฌ๊ทธ์ธ ๋ฑ ํ์ฅ์ฑ ์ฐ์
์ด ๊ตฌ์กฐ ๋๋ถ์ ํ ํธ์คํธ(bridge), ์ฌ๋ฌ ํธ์คํธ(overlay), ๋ฌผ๋ฆฌ ๋คํธ์ํฌ(macvlan), ์์ ๋ ๋ฆฝ(host/none) ๋ฑ ๋ค์ํ ๋คํธ์ํฌ ํ ํด๋ก์ง๋ฅผ ์ปจํ ์ด๋ ํ๊ฒฝ์์ ์์ฝ๊ฒ ๊ตฌํํ ์ ์์