Docker Network, ์ ๋๋ก ์ดํดํ๊ธฐ (2)
๐ 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
[ 2๋ถ ]
Drivers
- Bridge
- Host
- None
[ 3๋ถ ]
- Overlay
- Macvlan
----------------------------------------------
Drivers
Docker์ drivers์๋ Bridge, Overlay, Host, Macvlan, Ipvlan, None์ผ๋ก ์ด 6๊ฐ๊ฐ ์์ต๋๋ค.
๊ฐ ๋๋ผ์ด๋ฒ๋ฅผ ์ ๊น ํ์ด๋ณด์๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
ํด๋น ๋ด์ฉ์ Docker์ ๊ณต์๋ฌธ์ ๋ด์ฉ์ ๋ฒ์ญํ ๊ฒ์ ๋๋ค.
โ๏ธ Driver ์์ฝ
User-defined bridge networks : ๊ฐ์ ํธ์คํธ ์์์ ์ฌ๋ฌ ์ปจํ ์ด๋์ ํต์ ์ด ํ์ํ ๋
None networks : ์ต์ํ์ ๋คํธ์ํฌ ํ๊ฒฝ๋ง์ ์์ฑํ๊ณ ์ถ์ ๋
Host networks : ์ปจํ ์ด๋๋ก ๋ถ๋ฆฌ๋๊ธธ ์ํ์ง๋ง, ๋คํธ์ํฌ ์คํ์ ๋ถ๋ฆฌ๋์ง ์๊ธธ ์ํ ๋ (ํธ์คํธ ๋คํธ์ํฌ๋ฅผ ๊ฐ์ด ์ฐ๊ธธ ์ํ ๋)
Overlay networks : ๋ค๋ฅธ ํธ์คํธ ์์์ ์คํ๋๋ ์ปจํ ์ด๋๊ฐ ํต์ ํด์ผ ํ ๋๋, ์ค์ ์๋น์ค๋ก ์ฌ๋ฌ ์ฑ์ด ์คํ๋์ด์ผ ํ ๋
Macvlan networks : VM ํ๊ฒฝ์์๋ถํฐ ๋ง์ด๊ทธ๋ ์ด์ ํด์ผํ๊ฑฐ๋, ๋คํธ์ํฌ ์์์ ๊ณ ์ ํ MAC ์ฃผ์๋ฅผ ๊ฐ์ง ๋ฌผ๋ฆฌ์ ์ธ ํธ์คํธ์ฒ๋ผ ๋ณด์ฌ์ผ ํ ๋
์ด๋ฒ ํฌ์คํ ์์๋ ์ธ ๊ฐ์ง๋ง ๋ค๋ฃฐ ๊ฑด๋ฐ์.
Docker๋ฅผ ์ค์นํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก bridge, host, none ์ด๋ ๊ฒ ์ธ ๊ฐ์ ๋คํธ์ํฌ๊ฐ ์ง์ ๋์ด ์์ต๋๋ค.
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
e3538e12295b bridge bridge local
18883d2dc038 host host local
21c84259960a none null local
์ ์ธ ๊ฐ์ ๋คํธ์ํฌ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์๋์ ๊ฐ์์.
์๋ ๋ด์ฉ์ ์ฝ๊ณ ๋ค์ ๋ณด๋ฉด ๋ ๋์์ด ๋ ๋ฏ ํ๋ค์.
Bridge๋ชจ๋๋ ๋ธ๋ฆฌ์ง๋ฅผ ํตํด ์ฐ๊ฒฐ๋ ์ปจํ ์ด๋๋ค์ด ๋ณด์ด๊ณ ,
Host ๋ชจ๋๋ ํธ์คํธ์ ๋คํธ์ํฌ๋ฅผ ๊ณต์ ํ๋ ์ปจํ ์ด๋,
None ๋ชจ๋๋ ๋์ปค ํธ์คํธ์ ๊ฒฉ๋ฆฌ๋์ด ๋คํธ์ํฌ๊ฐ ์กด์ฌํ์ง ์๋ ์ปจํ ์ด๋๋ฅผ ํ์ธํ ์ ์์ด์.
์ด ์ธ ๊ฐ๋ฅผ ์ฐ์ ํ์ธํด๋ณด๊ณ ๋ค๋ฅธ ๊ฒ๋ค์ ์์ฐจ์ ์ผ๋ก ํ์ธํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Bridge
๋์ปค ๋คํธ์ํฌ์ ๊ฐ์ฅ ๊ฐ๋จํ ์ ํ์ด single-host bridge network์ ๋๋ค.
์ด๋ค ์๋ฏธ๋ฅผ ๊ฐ๋์ง ๋จ์ด๋ฅผ ์ชผ๊ฐ์ ๋ณด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
Signle-host๋ ๋จ์ผ ๋์ปค ํธ์คํธ์๋ง ์กด์ฌํ๋ฉฐ ๋์ผํ ํธ์คํธ์ ์๋ ์ปจํ ์ด๋๋ง ์ฐ๊ฒฐํ ์ ์์์ ์๋ ค์ค๋๋ค.
Bridge๋ 802.1d ๋ธ๋ฆฌ์ง(๋ ์ด์ด 2 ์ค์์น)์ ๊ตฌํ์์ ์๋ ค์ค๋๋ค.
์ฆ, ๋จ์ผ ํธ์คํธ ์์ ๋ธ๋ฆฌ์ง ์ญํ ์ ํ๋ ๋๋ผ์ด๋ฒ๋ผ๋ ๋ป์ ๊ฐ๋๋ฐ์.
ํ๋์ ํธ์คํธ์์ ์คํ๋๋ ๊ฒฉ๋ฆฌ๋ ์ปจํ ์ด๋๋ค์ ํต์ ์ ์ํด ๋คํธ์ํฌ๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ฐธ๊ณ ๋ก, ๋ค์ค ํธ์คํธ์์๋ overlay ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
Bridge๋ ์ง๋ ํฌ์คํ ์ docker0๊ฐ ๊ธฐ๋ณธ Bridge Network์ด๊ธฐ ๋๋ฌธ์ ํ ๋ฒ ๋ค๋ค์๋๋ฐ์.
Bridge์ ๋ํด ๋ค์ ํ ๋ฒ ์์ฝํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Bridge Network
: Docker ๋ธ๋ฆฌ์ง๋ ์ปจํ ์ด๋ ๊ฐ ํต์ ์ ํ ์ ์๊ฒ ํ๋ ์ํํธ์จ์ด ๋ธ๋ฆฌ์ง์ธ ๋์์,
์๋ก ๋ค๋ฅธ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ์์ ๊ฒฉ๋ฆฌ๋ฅผ ํ๊ธฐ๋ ํฉ๋๋ค.
์ด๋ฒ์ docker์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ docker0๊ฐ ์๋ ์ฌ์ฉ์๊ฐ ์ ์ํ๋ bridge Network์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
โ๏ธ User-defined Bridge
์ฌ์ฉ์ ์ ์ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ ๊ฐ์ ํธ์คํธ ์์์ ์ฌ๋ฌ ์ปจํ ์ด๋์ ํต์ ์ด ํ์ํ ๋ ์ฌ์ฉํฉ๋๋ค.
docker0์ ๋ง์ฐฌ๊ฐ์ง๋ก Bridge ๋คํธ์ํฌ์ง๋ง, ๊ทธ ์ด๋ฆ๊ณผ ๊ตฌ์ฑ์ ์ฌ์ฉ์๊ฐ ์ ์ํ๋ ๊ฒ์ ์ฐจ์ด๋ง ์์ฃ .
์ด ๋ถ๋ถ์ ์์๋ฅผ ๋ณด๋ฉฐ ์ดํดํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ฌ์ธ ๊ฒ ๊ฐ์์.
๋จผ์ , ์๋์ ๊ฐ์ด localnet์ด๋ผ๋ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ(single-host bridge network)๋ฅผ ํ๋ ์์ฑํด๋ณผ๊ฒ์.
์ฐธ๊ณ ๋ก, Linux์์ ๊ธฐ๋ณธ ์์ฑ๋๋ bridge๋ Windows์์๋ nat์ ํด๋นํฉ๋๋ค.
//Linux
$ docker network create -d bridge localnet
//Windows
> docker network create -d nat localnet
Linux์ ๊ฒฝ์ฐ, ์ด๋ ๊ฒ docker ๋ช ๋ น์ ํตํด ๋คํธ์ํฌ๋ฅผ ์์ฑํ๋ฉด ์๋ก์ด Linux bridge๋ ์์ฑ๋๋๋ฐ
brctl ๋๊ตฌ๋ฅผ ์ฌ์ฉํด์ ํ์ธํ ์ ์์ต๋๋ค.
Linux brctl ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ์์คํ ์ ์๋ Linux ๋ธ๋ฆฌ์ง๋ฅผ ์ดํด๋ด ์๋ค.
apt-get install bridge-utils ๋๋ Linux Distro์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก brctl ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
$ brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242aff9eb4f no
br-20c2e8ae4bbb 8000.02429636237c no
์ฒซ ๋ฒ์งธ ์ค์ ๊ธฐ๋ณธ "bridge" ๋คํธ์ํฌ์ ๊ด๋ จ๋์ด ์์์ ํ์ธํ๋ "docker0" bridge์ด๊ณ ,
๋ ๋ฒ์งธ bridge(br-20c2e8ae4bbb)๋ ์๋ก์ด localnet docker bridge network์ ๊ด๋ จ์ด ์์ต๋๋ค.
๋ ๋ธ๋ฆฌ์ง ๋ชจ๋ interfaces์ ํ ๋น๋ ๊ฐ์ด ์๋๋ฐ์.
์ฐ๊ฒฐ๋ ์ปจํ ์ด๋๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
test1 ์ด๋ผ๋ ์ปจํ ์ด๋๋ฅผ ํ๋ ๋ง๋ค์ด๋ณผ๊ฒ์.
$ docker container run -d --name test1 \
--network localnet \
alpine sleep 1d
์ด๋ ๊ฒ localnet์ ์ฌ์ฉํ๋ ์ปจํ ์ด๋๋ฅผ ํ๋ ์คํ์ํค๋ฉด,
์๋์ ๊ฐ์ด ์ฐ๊ฒฐ๋ฉ๋๋ค.
$ brctl show
bridge name bridge id STP enabled interfaces
br-20c2e8ae4bbb 8000.02429636237c no vethe792ac0
docker0 8000.0242aff9eb4f no
test1์ ์คํํ ๋
์์ฑ๋ ์ปจํ ์ด๋ ๋ด์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค eth0์,
๊ทธ๋ฆฌ๊ณ ํจ๊ป ์์ฑ๋ vethe792ac0 ์ธํฐํ์ด์ค๊ฐ ์กด์ฌํ๊ณ ,
์ด vethe792ac0 ์ธํฐํ์ด์ค๊ฐ localnet(br-20c2e8ae4bbb)์ ์ฐ๊ฒฐ๋์ด
์ธ๋ถ ๋คํธ์ํฌ์ ์ฐ๊ฒฐ์ด ๋ฉ๋๋ค.
ํ์ฌ ๋ง๋ค์ด๋ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
ํ๋์ Bridge๋ฅผ ์์ฑํ๊ณ , ์ด๋ ํธ์คํธ์ ์ธํฐํ์ด์ค์๋ ์ฐ๊ฒฐ๋์ด์๊ธฐ ๋๋ฌธ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋๋ค.
๋ง์ฝ, ๋ค๋ฅธ ์ปจํ ์ด๋์ ์ฐ๊ฒฐํ๊ณ ์ถ๋ค๋ฉด localnet ๋คํธ์ํฌ๋ฅผ ์ค์ ํ ํ ์คํํ๋ฉด ๋๊ฒ ์ฃ ?
test1๊ณผ ๋์ผํ๊ฒ test2๋ฅผ ์คํํ๋ฉด ์๋์ ๊ฐ์ด ์ฐ๊ฒฐ์ด ๋ ๊ฑฐ์์.
์์์ ๋งํ๋ค์ํผ, ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ ๋ค๋ฅธ ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ์์ ๊ฒฉ๋ฆฌ๊ฐ ๋๋ค๊ณ ํ๋๋ฐ์.
๋ง์ฝ, localnet์ด ์๋ othernet์ ๋ง๋ค์ด ์ปจํ ์ด๋์ ์ฐ๊ฒฐํ๋ค๋ฉด ์๋์ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ๋ณด์ฌ์ง๊ฒ ์ฃ ?
์๋ก ๋ค๋ฅธ ๋ธ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ Container A์ Container B๋ ์๋ก ํต์ ์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ด์ Bridge network์ ๋ํด ์ดํด๊ฐ ๋๋์?
์กฐ๊ธ ๋ณต์กํ์ฃ ?
์ด๋ฒ ํฌ์คํ ์์ ๋ณต์กํ ๊ฑด ์ด์ ๋์ ๋๋ค ใ ใ
Host
์์์ ์ค๋ช ํ Bridge์ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์์ต๋๋ค.
host ๋ชจ๋๋ ๋ณด๋ค ๊ฐ๋จํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค.
host ๋ชจ๋๋ ํ๋์ ์ปจํ ์ด๋๋ฅผ ๋ค๋ฅธ ์ปจํ ์ด๋์ ๋คํธ์ํฌ ๊ตฌ์กฐ์ ๋ฃ์ ๋ชจ์ต๊ณผ ๋น์ทํฉ๋๋ค.
ํธ์คํธ ๋ชจ๋๋ ์ปจํ ์ด๋๋ฅผ ๋์ปค ํธ์คํธ์ ๋คํธ์ํฌ ๊ตฌ์กฐ์ ์ง์ ๋ฐฐ์นํฉ๋๋ค.
์ปจํ ์ด๋๋ฅผ ํธ์คํธ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ ์ง์ ๋งคํํ๊ธฐ ๋๋ฌธ์ ํฌํธ๋ฅผ publishํ๊ณ exposeํ ํ์๊ฐ ์์ต๋๋ค.
์ฆ, ์ปจํ ์ด๋ ํ๋ก์ธ์ค๊ฐ ํธ์คํธ์์ lower level ํฌํธ๋ฅผ ์ฌ๋ ๋ฑ์ ํน์ ๊ถํ์ด ํ์ํ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ปจํ ์ด๋๊ฐ ์์คํ ์ ๋ ๋ง์ด ์ ๊ทผํ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํ์ฌ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ปจํ ์ด๋์ host ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ปจํ ์ด๋๊ฐ ํธ์คํธ์ ๋คํธ์ํน ๋ค์์คํ์ด์ค๋ฅผ ๊ณต์ ํฉ๋๋ค.
์ฆ, ํด๋น ์ปจํ ์ด๋์ ๋คํธ์ํฌ ์คํ์ด ๋์ปค ํธ์คํธ์์ ๋ถ๋ฆฌ๋์ง ์์ต๋๋ค.
๋๋ฌธ์ ์ปจํ ์ด๋๊ฐ ์์ฒด IP ์ฃผ์๋ฅผ ํ ๋น๋ฐ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ํฌํธ 80์ ๋ฐ์ธ๋ฉ๋๋ ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ํธ์คํธ ๋คํธ์ํน์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
์ปจํ ์ด๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํธ์คํธ IP ์ฃผ์์ ํฌํธ 80์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํธ์คํธ ๋ชจ๋ ๋คํธ์ํน์ ์ฌ์ฉํ ๋ ์ปจํ ์ด๋์ ์์ฒด IP ์ฃผ์๊ฐ ์์ผ๋ฉด ํฌํธ ๋งคํ์ด ์ ์ฉ๋์ง ์์ผ๋ฉฐ
-p, --publish,-P, --publish-all ์ต์ ์ด ๋ฌด์๋๊ณ , ์๋์ ๊ฐ์ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํฉ๋๋ค.
WARNING: Published ports are discarded when using host network mode
None
None ๋คํธ์ํฌ๋ ๋ง ๊ทธ๋๋ก ์๋ฌด๊ฒ๋ ์๋ ๋คํธ์ํฌ๋ฅผ ์๋ฏธํฉ๋๋ค.
none ๋ชจ๋๋ ๋คํธ์ํฌ์ ์ ์๊ฐ ์ ํ ์๋ ์ปจํ ์ด๋๋ฅผ ์ ์ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
None ๋คํธ์ํฌ๋ ๋์ปค๊ฐ ์ค์น๋ ๋ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ๋๋ ๋คํธ์ํฌ ์ค ํ๋์ ๋๋ค.
inspect ํด๋ณด๋ฉด ์๋ฌด๋ฐ ๋ด์ฉ์ด ์๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
$ docker network inspect none
[
{
"Name": "none",
"Id": "21c84259960ac0c5c9a1721ff53501469abfc1b6400a74631c339b261f50c47e",
"Created": "2021-11-16T10:40:56.880389185Z",
"Scope": "local",
"Driver": "null",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": []
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
์์ ๋ด์ฉ์ ํ์ธํด๋ณด๋ฉด Driver๋ null๋ก ํ์๋๋๋ฐ, ์ด๋ ์ด ๋คํธ์ํฌ์ Driver๊ฐ ์์์ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ด๋ฐ ์ค์ ์ ์ ํ ๊น์?
none ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ฉด, ์ปจํ ์ด๋๊ฐ ์์ฑ๋ ๋ ๋คํธ์ํฌ์ ์ต์ํ์ ๊ฒ๋ง ์์ฑ๋ฉ๋๋ค.
์ค์ ๋ก, ์ปจํ ์ด๋๋ฅผ none ๋ชจ๋๋ก ์คํํ๋ฉด ๋ฃจํ๋ฐฑ ์ธํฐํ์ด์ค์ ํด๋นํ๋ lo ๋ฅผ ์ ์ธํ๊ณ ์๋ฌด๊ฒ๋ ์์ฑ๋์ง ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์ง์ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑ(์ฌ์ฉ์ ์ ์ ์ธํฐํ์ด์ค ๋ฑ)ํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๊ณค ํฉ๋๋ค.
์ด๋ ๊ฒ docker network - 2 ํฌ์คํ ์ ๋ง๋ฌด๋ฆฌ ํ๊ณ ,
๋ค์ ํฌ์คํ ์์ ๋๋ผ์ด๋ฒ์ ๋ํด ๋ ์์ธํ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
์์ ์ฌํญ์ด๋ ์๋ชป๋ ๋ถ๋ถ์ ๋๊ธ ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค ๐๐ป
์ฐธ๊ณ ์๋ฃ
- O'Reilly - "Docker Deep Dive, The Docker Engine"
- O'Reilly - "Docker: Up & Running, 2nd Edition"
- O'Reilly - "Docker Networking Cookbook"
- understanding docker networking drivers use cases