Search

Docker: Volume & Network

Created
2021/05/23
Tags
Docker
Container
Image
Volume
Network
Bridge
Host
None

Subjects

โ€ข

1. Docker Volume

Volume์ด๋ผ ํ•จ์€ ์ผ์ข…์˜ ํŒŒ์ผ์ด๋ฉฐ ์ฃผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ๋กœ์จ ์ด์šฉ๋œ๋‹ค. Volume์ด ์ •ํ™•์ด ์–ด๋–ค ํŒŒ์ผ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ ์ „์— ํ•œ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ํ†ตํ•ด Volume์ด ์™œ ํ•„์š”ํ•œ์ง€ ์•Œ์•„๋ณด์ž.
Image๋กœ Container๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด, Image์˜ Layer๋“ค์€ ์˜ค๋กœ์ง€ Read-Only๋กœ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ์ด ๋•Œ Layer๋“ค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด๋‚˜ Container์˜ ์ž‘์—…๋“ค์€ ๋ณ„๋„์˜ Layer์— ๊ธฐ๋ก๋˜์–ด Container์˜ ์ •๋ณด๋“ค์„ ์œ ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ๋•Œ MySQL ๋ฐ๋ชฌ์„ Container๋กœ ๋งŒ๋“ค์–ด ์‹คํ–‰ํ–ˆ๋‹ค๊ณ  ํ•˜๋ฉด, ์ด๋Š” MySQL์— ๋Œ€ํ•œ ๋‚ด์šฉ๋“ค์€ Image๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋˜์–ด Image์˜ Layer์— ์กด์žฌํ•˜์ง€๋งŒ MySQL ๋ฐ๋ชฌ์ด ์‚ฌ์šฉํ•˜๋Š” DB์™€ ๊ฐ™์€ ์ •๋ณด๋“ค์€ Container๊ฐ€ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Container์˜ Layer์— ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.
์ด์ „ ๊ธ€์—์„œ ๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ Image๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” Layer๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด์„  ์ด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” Container๋“ค์ด ์—†์–ด์•ผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, Container์˜ Layer๋Š” ๊ฐ•์ œ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ต‰์žฅํžˆ ์‰ฝ๊ฒŒ ์—†์•จ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋งŒ์ผ ์‹ค์ˆ˜๋กœ Container๋ฅผ ์‚ญ์ œํ•˜๊ฒŒ ๋˜๋ฉด Container์— ๋Œ€ํ•œ Layer ์—ญ์‹œ ์ง€์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์•ˆ์— ์œ ์ง€ ์ค‘์ด๋˜ DB์™€ ๊ฐ™์€ ์ •๋ณด๋“ค๋„ ์‚ญ์ œ๋˜๊ณ  ์ด๋Š” ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋‹ค. ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” DB๊ฐ€ ์„œ๋น„์Šค์— ์ด์šฉ๋˜๊ณ  ์žˆ๋˜ ์ •๋ณด๋“ค์ด๋ผ๋ฉด ๊ต‰์žฅํžˆ ์•„์ฐ”ํ•œ ์ƒํ™ฉ์ด ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ์ •๋ณด๋“ค์„ ์ง€์†์„ฑ ์žˆ๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด Volume์ด๋‹ค. ์ฆ‰, Volume์€ ์ •๋ณด์˜ Persistency๋ฅผ ์œ„ํ•ด์„œ ์ด์šฉํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ณ , ์ด๋Š” ์ผ์ข…์˜ ๊ณต์œ  ๊ณต๊ฐ„์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
Volume์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•˜๋‹ค. Container๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ˜ธ์ŠคํŠธ์˜ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜์—ฌ Volume์„ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ๊ณ , Container๋ฅผ ์ƒ์„ฑํ•  ๋•Œ Container๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” Volume์„ ๋‹ค์‹œ ๊ณต์œ ๋ฐ›์•„ Volume์„ ๋‘˜ ์ˆ˜๋„ ์žˆ๊ณ , Docker๊ฐ€ ์ œ๊ณตํ•˜๋Š” Volume์„ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋“ค์„ ๊ฐ๊ฐ Host Volume, Volume Container, Docker Volume์ด๋ผ ํ•œ๋‹ค.
์ด๋Ÿฌํ•œ Volume๋“ค์ด ๋™์ž‘ํ•˜๋Š” ์›๋ฆฌ๋Š” ํŒŒ์ผ์„ ํŠน์ • ํŒŒ์ผ์— ์˜ฌ๋ฆฌ๋Š” mount์— ๊ทผ๊ฑฐํ•œ๋‹ค. ์ฆ‰, Volume์€ ์ผ์ข…์˜ ๊ณต์œ  ๊ณต๊ฐ„์ด๋ฉด์„œ ์ผ์ข…์˜ ํŒŒ์ผ๋กœ์จ ์ด์šฉ๋œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, Volume์œผ๋กœ์จ ์ด์šฉํ•˜๋ ค๋Š” ๊ณต๊ฐ„์ด ๊ทธ ๊ณต์œ  ๋Œ€์ƒ์— mount๋˜๋ฉด์„œ ๊ณต์œ ํ•˜๋ ค๋Š” ์ •๋ณด๋“ค์ด Volume ๋‚ด์— ์กด์žฌํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ Volume์„ ๋‘๊ฒŒ ๋˜๋ฉด Container๋ฅผ ์‚ญ์ œํ•˜๋”๋ผ๋„ Volume์€ ์‚ญ์ œ๋˜์ง€ ์•Š๊ธฐ ๋–„๋ฌธ์— ์ •๋ณด๋“ค์ด Persistency๋ฅผ ๊ฐ–๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  Container ๋‚ด๋ถ€์—์„œ ๋ฐ˜๋“œ์‹œ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š” ์ •๋ณด๋“ค์„ ๋ถ„๋ฆฌํ•ด๋ƒˆ๊ธฐ ๋•Œ๋ฌธ์—, Statelessํ•˜๊ฒŒ Container๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์— ํฐ ์˜์˜๊ฐ€ ์žˆ๋‹ค.

1) Host Volume

docker run โ€”name <container-name> -v <host-path>:<container-path> <image-name>
Host Volume์€ Host์— ํ•ด๋‹นํ•˜๋Š” ๊ณต๊ฐ„์„ Volume์œผ๋กœ์จ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Host์— ํ•ด๋‹นํ•˜๋Š” ๊ณต๊ฐ„์ด๋ผ ํ•จ์€ ๋””๋ ‰ํ† ๋ฆฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŠน์ • ํŒŒ์ผ๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Š” Container๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด (run ํ˜น์€ create์™€ ๊ฐ™์€ ๋ช…๋ น์–ด)๋ฅผ ์ด์šฉํ•  ๋•Œ -v ์˜ต์…˜์„ ์ด์šฉํ•จ์œผ๋กœ์จ Volume์„ ๋‘˜ ์ˆ˜ ์žˆ๊ณ , Host์— ํ•ด๋‹นํ•˜๋Š” ๊ณต๊ฐ„์ด Container์˜ ๊ณต์œ  ๋Œ€์ƒ์— mount ๋˜๋ฉด์„œ ์ •๋ณด๋“ค์„ ๊ณต์œ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฐ -v ์˜ต์…˜์€ 1ํšŒ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฟ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. MySQL๊ณผ WordPress ์—ฐ๋™์— ๋Œ€ํ•œ ์˜ˆ์ œ๋กœ ์‚ดํŽด๋ณด์ž.
์œ„ ๊ทธ๋ฆผ์€ MySQL ๋ฐ๋ชฌ์„ ๋Œ๋ฆฌ๋Š” Container๋ฅผ ์ƒ์„ฑํ•œ ๊ฒƒ์ด๊ณ , ~/host_volume๊ณผ /var/lib/mysql์„ ๊ณต์œ ํ•˜๋„๋ก Volume์„ ์„ค์ •ํ•˜์˜€๋‹ค. Host์˜ ~/host_volume์ด๋ผ๋Š” ๊ณต๊ฐ„์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋ฉด์„œ Container์˜ /var/lib/mysql์ด๋ผ๋Š” ๊ณต๊ฐ„์— mount๋œ๋‹ค.
WordPress ๋ฐ๋ชฌ์„ ๊ตฌ๋™ํ•  Container๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์œ„์—์„œ ์ƒ์„ฑํ•œ MySQL ๋ฐ๋ชฌ์„ ์œ„ํ•œ Container์™€ ์—ฐ๋™ํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค.
WordPress์™€ MySQL์ด ์—ฐ๋™๋œ ์„œ๋น„์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๊ตฌ๋™๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
Host์˜ ~/host_volume์—๋Š” Container์˜ /var/lib/mysql์— ์กด์žฌํ•˜๋Š” ํŒŒ์ผ๋“ค์ด ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋น„์Šค ์ค‘์ธ MySQL์˜ DB๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ /var/lib/mysql์— ์ •๋ณด๋“ค์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋Ÿฌํ•œ ์ •๋ณด๋“ค์ด ๊ทธ๋Œ€๋กœ ~/host_volume์— ์ €์žฅ๋˜๋Š” ๊ฒƒ ์—ญ์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ตฌ๋™ ์ค‘์ธ Container๋ฅผ ์ง€์šฐ๋”๋ผ๋„ Volume์œผ๋กœ ๋‘์—ˆ๋˜ ~/host_volume์€ ์‚ญ์ œ๋˜์ง€ ์•Š์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, DB์— ์ €์žฅ๋˜์–ด ์žˆ๋˜ ์ •๋ณด๋“ค์€ ๊ทธ๋Œ€๋กœ ์‚ด์•„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ Persistency๊ฐ€ ํ•„์š”ํ•œ ๊ณต๊ฐ„๋“ค์„ Volume์œผ๋กœ์จ ์ด์šฉํ•˜๋ฉด Container๊ฐ€ ์‚ญ์ œ๋˜๋”๋ผ๋„ ์ค‘์š”ํ•œ ์ •๋ณด๋“ค์€ ์‚ด์•„ ์žˆ์œผ๋ฏ€๋กœ ์ƒˆ๋กญ๊ฒŒ Container๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ด๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
Host์˜ ~/host_volume ๋””๋ ‰ํ† ๋ฆฌ๋Š” Container์˜ /var/lib/mysql ๋””๋ ‰ํ† ๋ฆฌ์— mountํ•˜์—ฌ ์‚ฌ์šฉ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์„œ๋กœ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์ด๊ณ , ๋”ฐ๋ผ์„œ ๋™๊ธฐํ™” ์ž‘์—…์€ ์š”๊ตฌ๋˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋Š”๋ฐ, Volume์œผ๋กœ ์ด์šฉํ•  ๊ณต๊ฐ„์ด mount๋˜๋ฉด Container์˜ ๊ณต๊ฐ„์€ ๊ทธ๋Œ€๋กœ ๋ฎ์–ด์”Œ์›Œ ์ง€๋ฏ€๋กœ ๊ธฐ์กด์— ์กด์žฌํ•˜๋˜ ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ์ด๋Š” ์‚ฌ๋ผ์ง„๋‹ค. ์˜ˆ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด์ž.
ubuntu ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•ด๋‹น Image๋กœ Container๋ฅผ ๋งŒ๋“ค๊ณ  ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— test_dir์ด๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ๋‚ด๋ถ€์— a, b, c, d๋ผ๋Š” ํŒŒ์ผ์„ ๋‘์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์ƒˆ๋กœ์šด Image๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.
์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“  Image๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด Container๋ฅผ ๋งŒ๋“ค๊ณ , ์ด์— ๋Œ€ํ•œ ์˜ต์…˜์œผ๋กœ Host Volume์„ ์ฃผ์—ˆ๋”๋‹ˆ ๊ธฐ์กด Image์— ๋‘์—ˆ๋˜ /test_dir์— ์žˆ๋˜ ํŒŒ์ผ๋“ค์ด ์‚ฌ๋ผ์ง„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” Host๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ~/host_volume์ด๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ /test_dir๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์— mountํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ Volume์„ ์ด์šฉํ•  ๋•Œ mount๋  ์œ„์น˜์— ๋Œ€ํ•ด์„œ ๋ฐ˜๋“œ์‹œ ์‹ ๊ฒฝ์จ์•ผ ํ•œ๋‹ค.

2) Volume Container

docker run โ€”name <container-name> โ€”volumes-from <container-name> <image-name>
Volume Container๋ผ๋Š” ๊ฒƒ์€ Container๊ฐ€ ์ด์šฉํ•˜๊ณ  ์žˆ๋Š” Volume์„ ๋‹ค๋ฅธ Container์—๊ฒŒ ๊ณต์œ ํ•ด์ค„ ๋•Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณต์œ  ๋ฐ›๋Š” Container๋Š” Host์˜ ๊ณต๊ฐ„์„ ์ง์ ‘์ ์œผ๋กœ ๊ณต์œ  ๋ฐ›์•„ Volume์œผ๋กœ์จ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Volume Container๊ฐ€ Host์˜ ๊ณต๊ฐ„์„ ๊ณต์œ  ๋ฐ›์•„ Volume์œผ๋กœ์จ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ณต๊ฐ„์„ ๋‹ค์‹œ ๊ณต์œ  ๋ฐ›์•„ ์ด์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Š” ๊ณต์œ  ๋ฐ›์„ Container๋ฅผ ์ƒ์„ฑํ•  ๋•Œ โ€”-volumes-from์ด๋ผ๋Š” ์˜ต์…˜์„ ์ด์šฉํ•˜์—ฌ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. Host Volume์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— ํ–ˆ๋˜ container_mount๋ผ๋Š” Container๋ฅผ ์ด์šฉํ•˜์—ฌ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด์ž.
container_mount๋Š” Host์˜ ~/host_volume์„ Container์˜ /test_dir์— mountํ•˜์—ฌ Volume์œผ๋กœ ์ด์šฉํ–ˆ์—ˆ๋‹ค. ์ด๋ฅผ Volume Container๋กœ ์ด์šฉํ•˜์—ฌ Volume์„ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด Container๋ฅผ ๋งŒ๋“ค์—ˆ๋”๋‹ˆ, ubuntu์˜ Image๋ฅผ ์ด์šฉํ•˜์—ฌ Container๋ฅผ ์ƒ์„ฑํ–ˆ์Œ์—๋„ /test_dir์ด๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” container_mount์˜ Volume์„ ๊ทธ๋Œ€๋กœ ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์šฐ์„ , Host์˜ ~/host_volume์€ ๋นˆ ๋””๋ ‰ํ† ๋ฆฌ์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. container_mount์˜ Volume์„ ๊ทธ๋Œ€๋กœ ๋ฐ›์•˜์„ ๋•Œ, ์ƒˆ๋กœ ์ƒ์„ฑ๋œ container_from_container๋ผ๋Š” Container๊ฐ€ Host์˜ ~/host_volume์ด๋ผ๋Š” ๊ณต๊ฐ„๊ณผ ์ •์ƒ์ ์œผ๋กœ ๊ณต์œ ๋œ Volume์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด /test_dir์— ํŒŒ์ผ ๋ช‡ ๊ฐœ๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ž.
์œ„์™€ ๊ฐ™์ด ํŒŒ์ผ์„ 5๊ฐœ ์ƒ์„ฑํ–ˆ์„ ๋•Œ, mount ๋˜์–ด ์žˆ๋Š” Host์˜ ~/host_volume ์—ญ์‹œ ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ 5๊ฐœ์˜ ํŒŒ์ผ์ด ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
์œ„ ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ํ™•์ธํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ ํŠน์ • Container๊ฐ€ Volume์„ ํ™œ์šฉํ•˜๊ณ  ์žˆ์„ ๋•Œ ์ด์ฒ˜๋Ÿผ โ€”-volumes-from์ด๋ผ๋Š” ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Container๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์—ฌ๋Ÿฌ Container์™€ Volume์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์ ์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ํŠน์ • Container๋ฅผ ๋ง ๊ทธ๋Œ€๋กœ Volume Container๋กœ์จ๋งŒ ๊ธฐ๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

3) Docker Volume

docker run โ€”name <container-name> -v <volume-name>:<container-path> <image-name>
Host Volume์„ ์ด์šฉํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ Host์— ์กด์žฌํ•˜๋Š” ํŠน์ • ๊ณต๊ฐ„์„ ์ง์ ‘ ์ง€์ •ํ•˜์—ฌ Volume์„ ์ด์šฉํ•˜๋ ค ํ•˜๋ฉด ๊ทธ ๊ณต๊ฐ„์ด ์–ด๋””์— ์žˆ๋Š”์ง€ ๋Š˜ ์‹ ๊ฒฝ ์จ์•ผํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๋ฌผ๋ก  ์ง์ ‘์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ๋งŒํผ ์ค‘์š”ํ•œ ๊ณต๊ฐ„์ด๋ผ๋ฉด ๊ดœ์ฐฎ๊ฒ ์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๋งŽ์€ ๊ณต๊ฐ„๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์‰ฌ์šด ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Volume์„ ํ™œ์šฉํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ Host๋‚ด์˜ ํŠน์ • ๊ณต๊ฐ„์„ ์ง€์ •ํ•˜์—ฌ mountํ•  ํ•„์š”์—†์ด, Docker Engine์˜ ๋„์›€์„ ๋ฐ›์•„ Host์˜ ํŠน์ • ๊ณต๊ฐ„์— ์ž„์˜์˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด ์ด๋ฅผ Volume์œผ๋กœ ํ™œ์šฉ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” docker volume create์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ์„ฑ๋œ Volume์„ ์ด์šฉํ•˜์—ฌ Container๋ฅผ ๋งŒ๋“ค๋ฉด, ํ•ด๋‹น Container๋ฅผ Volume Container๋กœ ์ด์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๊ต‰์žฅํžˆ ์œ ์šฉํ•˜๋‹ค. Docker Volume์„ ์˜ˆ์ œ๋กœ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณด์ž.
Docker Volume์„ ์ด์šฉํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ๊ธ€ ์•„๋ž˜ ๋ถ€๋ถ„์—์„œ ๋” ์ž์„ธํžˆ ๋‹ค๋ฃฌ๋‹ค.
์œ„์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ Docker Volume์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ๊ทธ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ Docker Volume์€ ๋กœ์ปฌ ์ƒ์— ์ €์žฅ๋˜๊ณ , Docker Engine์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ณ  ์‚ญ์ œ๋˜๋Š” ์‹์œผ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.
์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ new_volume์ด๋ผ๋Š” ๊ฒƒ์„ ์ด์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Docker Volume์„ ์‚ฌ์šฉํ•˜์—ฌ 2๊ฐœ์˜ Container๋ฅผ ์ƒ์„ฑํ•˜๊ณ  new_volume์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด์•˜๋‹ค.
์ด์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
Host Volume์—์„œ ์ง์ ‘ ์ง€์ •ํ•˜์—ฌ ์ด์šฉํ•œ ๊ณต๊ฐ„๊ณผ ๋‹ฌ๋ฆฌ Docker Volume์€ Docker Engine์ด Host์˜ ํŠน์ • ๊ณต๊ฐ„์— ์ž„์˜์˜ ์ด๋ฆ„์œผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์ด๋Š” docker volume inspect๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Host์˜ ์–ด๋Š ๊ณต๊ฐ„์— Docker Volume์ด ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
docker run -i -t --rm --privileged --pid=host justincormack/nsenter1
์ด๋ฅผ ์‹ค์ œ๋กœ ํ™•์ธํ•˜๋ ค ํ–ˆ์„ ๋•Œ ํ˜„์žฌ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ๋กœ์—๋Š” /var/lib/docker/volumes๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” Docker๊ฐ€ Linux ์ƒ์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Linuxkit์ด๋ผ๋Š” ๊ฐ€์ƒํ™”๋œ Kernel ์œ„์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (Docker Toolbox๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด Linuxkit์ด ์•„๋‹ˆ๋ผ ๋ณ„๋„๋กœ ์„ค์น˜ํ•œ Linux ์ƒ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.) ๋”ฐ๋ผ์„œ ์œ„์™€ ๊ฐ™์€ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„  Linuxkit ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์šฐ์„ ์ด๋‹ค. Linuxkit ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ€๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฟ ์žˆ์ง€๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ„์— ์ฃผ์–ด์ง„ ๋ช…๋ น์–ด๋กœ Container๋ฅผ ๋งŒ๋“ค์–ด ๊ตฌ๋™ํ•จ์œผ๋กœ์จ Linuxkit์— ๋Œ€ํ•œ ์‰˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ์–ด์ง„ ๊ฒฝ๋กœ๋ฅผ ํƒ€๊ณ  ๋“ค์–ด๊ฐ€๋ณด๋ฉด Docker Volume์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

2. Docker Network

Container๋กœ ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•˜๊ฒŒ ๋˜๋ฉด ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ๋„ Container๋กœ ์ ‘๊ทผํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ• ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. Container๋Š” ๊ฐ€์ƒํ™”๋œ ํ™˜๊ฒฝ์—์„œ ๊ตฌ๋™๋˜๊ธฐ ๋•Œ๋ฌธ์— Private IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์—๋„ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ์ด๋Š” Container๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ณ„๋„์˜ ํฌํŠธ ํฌ์›Œ๋”ฉ ์„ค์ •์„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด Container๋“ค์€ IP ์ฃผ์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น IP ์ฃผ์†Œ๋“ค์ด ์™ธ๋ถ€์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก Docker๊ฐ€ ์–ด๋–ค ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž.
์šฐ์„  container_network_1์ด๋ผ๋Š” Container๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜์—ฌ ifconfig๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋ฉด Container์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด container_network_1์€ ์ž๊ธฐ ์ž์‹ ์„ ์˜๋ฏธํ•˜๋Š” Loopback ์ธํ„ฐํŽ˜์ด์Šค์™€ ์™ธ๋ถ€์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•œ eth0๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. eth0 ์ธํ„ฐํŽ˜์ด์Šค์— ํ• ๋‹น๋œ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๊ฐ€์žฅ ์ฒ˜์Œ์— ํ• ๋‹น๋œ 2๊ฐœ์˜ Octet์ด 172.17์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๊ณ , ์ด๋Š” B ํด๋ž˜์Šค์— ํ•ด๋‹นํ•˜๋Š” Private IP ์ฃผ์†Œ์ด๋‹ค. ์ด์™€ ๊ฐ™์ด ํ• ๋‹น๋œ IP ์ฃผ์†Œ๋Š” ํ˜„์žฌ ์†ํ•œ ๋„คํŠธ์›Œํฌ์˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— eth0 ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์™ธ๋ถ€์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋‹ค๋ฅธ ์žฅ์น˜์˜ ๋„์›€์„ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.
Docker๋Š” Linuxkit์ด๋ผ๋Š” ๊ฐ€์ƒํ™”๋œ Kernel ์œ„์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Linuxkit์˜ ๋„คํŠธ์›Œํฌ ์„ค์ •์„ ํ†ตํ•ด์„œ ์—ฌ๋Ÿฌ Container์˜ eth0 ์ธํ„ฐํŽ˜์ด์Šค๋“ค์€ ์™ธ๋ถ€์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ผ๋‹จ Container๊ฐ€ ์‹คํ–‰ ์ƒํƒœ์— ๋“ค์–ด์„œ๋ฉด, Linuxkit์˜ Kernel์€ veth (Virtual Ethernet)๋ผ๋Š” ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑ ๋ฐ›์•„ Container์˜ eth0 ์ธํ„ฐํŽ˜์ด์Šค์™€ ์—ฐ๊ฒฐํ•˜๊ฒŒ ๋œ๋‹ค. veth ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ƒ์„ฑ์€ Docker Engine์— ์˜ํ•ด์„œ ์ด๋ค„์ง„๋‹ค.
docker run -i -t --rm --privileged --pid=host justincormack/nsenter1
Container ์‹คํ–‰๊ณผ ๋™์‹œ์— ์ƒ์„ฑ๋œ veth ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Linuxkit ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ€์„œ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์œ„ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Linuxkit ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ„๋„์˜ Container๋ฅผ ๋งŒ๋“ค๊ณ  ์‰˜์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์ดํ›„ ์‰˜์—์„œ ifconfig ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด veth ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. veth ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ 2๊ฐœ์ธ ์ด์œ ๋Š” container_network_1๋ผ๋Š” Container์™€ ํ˜„์žฌ Linuxkit์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•œ Container, ์ด 2๊ฐœ์˜ Container๊ฐ€ ์‹คํ–‰ ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, veth ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์‹คํ–‰ ์ค‘์ธ Container์˜ ์ˆ˜๋งŒํผ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
Linuxkit์˜ ์‰˜์—์„œ ifconfig ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ ํ–ˆ์„ ๋•Œ, veth ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ชจ๋“  ์ถœ๋ ฅ๊ฒฐ๊ณผ๋ฅผ ์‚ดํŽด๋ณด๋ฉด docker0๋ผ๋Š” ๊ฒƒ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. docker0๋Š” Docker ๋ฐ๋ชฌ ์‹คํ–‰ ์‹œ์— ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ€์ƒํ™”๋œ Bridge๋กœ์จ, ๋ชจ๋“  veth ์ธํ„ฐํŽ˜์ด์Šค๋“ค์ด docker0์— ๋ฐ”์ธ๋“œ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  veth ์ธํ„ฐํŽ˜์ด์Šค๋“ค์„ ๊ด€๋ฆฌํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” Host์˜ eth0์™€ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ฆ‰, Container๋ฅผ ์ƒ์„ฑํ–ˆ์„ ๋•Œ ๋ณ„๋„์˜ ๋„คํŠธ์›Œํฌ ์„ค์ •์ด ์—†๋‹ค๋ฉด, veth ์ธํ„ฐํŽ˜์ด์Šค๋“ค์€ ๋ชจ๋‘ docker0๋ผ๋Š” Bridge์— ์†ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์™€ ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฌด์กฐ๊ฑด docker0๋ผ๋Š” Bridge๋ฅผ ๊ฑฐ์นœ๋‹ค. ๋”ฐ๋ผ์„œ ํ˜„์žฌ Container๋“ค๊ณผ Host์˜ ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.
brctl show docker0
docker0๋Š” ์‹คํ–‰ ์ค‘์ธ Container๋“ค์˜ ์ˆ˜๋งŒํผ veth ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์‹ค์ œ๋กœ veth ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ docker0์— ์ž˜ ๋ฐ”์ธ๋“œ ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ๋•Œ๋Š” ์œ„ ๋ช…๋ น์–ด๋ฅผ Linuxkit์˜ ์‰˜์— ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์„ ์‚ดํŽด๋ณด๋ฉด ์‹คํ–‰ ์ค‘์ธ 2๊ฐœ์˜ Container์— ๋Œ€ํ•œ 2๊ฐœ์˜ veth ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ฐ”์ธ๋“œ ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ํ™•์ธํ•ด๋ณด๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐœ์˜ Container๋ฅผ ๋” ์ƒ์„ฑํ•ด๋ณด์ž. ์žฌ๋ฐŒ๋Š” ์ ์€ ์ƒ์„ฑ๋œ Container๋“ค์˜ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด, ๊ฐ€์žฅ ์ฒ˜์Œ์— ํ• ๋‹น๋œ 3๊ฐœ์˜ Octet์„ ์ œํ•˜๊ณ ๋Š” ๋ชจ๋‘ ์˜ค๋ฆ„์ฐจ์ˆœ์˜ ํ˜•ํƒœ๋กœ ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์‹ค์ œ๋กœ ์ด๋Š” Bridge์˜ IP ์ฃผ์†Œ ๋Œ€์—ญ ์„ค์ • ๊ฐ’์„ ๋งŒ์กฑํ•˜๋„๋ก ์ž๋™์œผ๋กœ ํ• ๋‹น๋œ ๊ฐ’์ด๋ฉฐ, IP ์ฃผ์†Œ ๋Œ€์—ญ ์„ค์ • ๊ฐ’์€ Docker ๋ฐ๋ชฌ์˜ ์˜ต์…˜์„ ์กฐ์ •ํ•จ์œผ๋กœ์จ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด Container๋ฅผ ์ƒ์„ฑํ–ˆ์„ ๋•Œ docker0 ์™ธ์˜ ์„ ํƒ์ง€๋„ ์žˆ์„๊นŒ? Docker Engine์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Container๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Network Driver๋กœ Bridge, Host, None, Container๋ผ๋Š” ์„ ํƒ์ง€๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์™ธ๋ถ€ ์†”๋ฃจ์…˜์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Network Driver๋„ ๋‹ค์ˆ˜ ์กด์žฌํ•œ๋‹ค. docker0๋Š” Bridge์ด๋ฏ€๋กœ Container ์ƒ์„ฑ ์‹œ์˜ ๊ธฐ๋ณธ ์„ค์ •์€ docker0๋ผ๋Š” Bridge๋ฅผ ์ด์šฉํ•˜๋„๋ก Bridge๋ผ๋Š” Network Driver๋ฅผ ์ด์šฉํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์„ค์ •์€ Container ์ƒ์„ฑ ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ„๋„์˜ ์˜ต์…˜์„ ์ฃผ๋ฉด ๋‹ค๋ฅธ Network Driver๋ฅผ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ˜น์€ ๋™์ผํ•œ ์ข…๋ฅ˜์˜ Network Driver๋ฅผ ์ด์šฉํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ด์šฉํ•˜๋ฉด Container๋“ค์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์กฐ๋ฅผ ๊ฒฉ๋ฆฌ์‹œํ‚ค๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. Container๋“ค์ด ์ด์šฉํ•˜๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ๋ณ„๋„๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š์€ ์ดˆ๊ธฐ ์ƒํƒœ์—๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋„คํŠธ์›Œํฌ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ๋‹ค.

1) Bridge

docker run โ€”name <container-name> โ€”net <network-name> <image-name>
Bridge๋ผ๋Š” Network Driver๋Š” Docker์—์„œ ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ์ด์šฉ๋˜๋Š” Network Driver์ด๋ฉฐ, Container ์ƒ์„ฑ ์‹œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์ •๋˜๋Š” ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ ์—ญ์‹œ docker0๋ผ๋Š” Bridge์ด๋‹ค. ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ docker0๋ผ๋Š” Bridge๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฒฉ๋ฆฌ๋œ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ƒˆ๋กœ์šด Bridge๋ฅผ ๋งŒ๋“ค์–ด ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์šด์˜์— ํ•„์š”ํ•œ ๋งŒํผ์˜ Bridge๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Bridge ๋‚ด์— ์œ ์ง€ํ•˜๊ณ  ์žˆ๋Š” Container๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์ƒˆ๋กœ์šด Container๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜๋„ ์žˆ์–ด์„œ ์šด์˜ ์ธก๋ฉด์—์„œ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด์ž.
Docker Network๋ฅผ ์ด์šฉํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ๊ธ€ ์•„๋ž˜ ๋ถ€๋ถ„์—์„œ ๋” ์ž์„ธํžˆ ๋‹ค๋ฃฌ๋‹ค.
์œ„์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ Docker Network๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ๊ทธ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. โ€”-driver ์˜ต์…˜์œผ๋กœ ์ƒ์„ฑํ•˜๋ ค๋Š” Network Driver๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, Bridge๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด bridge๋ผ๊ณ  ๊ธฐ์ž…ํ•˜๋ฉด ๋œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ดˆ๊ธฐ ์ƒํƒœ์˜ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์—์„œ new_bridge๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
Container ์ƒ์„ฑ ์‹œ docker0๋ผ๋Š” Bridge๊ฐ€ ์•„๋‹Œ, ์ƒˆ๋กœ ์ƒ์„ฑํ•œ new_bridge๋ฅผ ์ด์šฉํ•˜๋„๋ก ์ œ์‹œ๋œ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด๋ณด๋ฉด IP ์ฃผ์†Œ๊ฐ€ docker0๋ฅผ ์ด์šฉํ–ˆ์„ ๋•Œ์™€ ์‚ฌ๋ญ‡ ๋‹ค๋ฅธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” new_bridge์˜ IP ์ฃผ์†Œ ๋Œ€์—ญ ์„ค์ • ๊ฐ’์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Bridge ์ƒ์„ฑ ์‹œ์— ๋ณ„๋„๋กœ Bridge์˜ IP ์ฃผ์†Œ ๋Œ€์—ญ ์„ค์ • ๊ฐ’์„ ์ฃผ์ง€ ์•Š์•˜๋‹ค๋ฉด Docker Engine์€ ์ˆœ์„œ๋Œ€๋กœ IP ์ฃผ์†Œ ๋Œ€์—ญ ์„ค์ • ๊ฐ’์„ ๋งค๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— docker0์˜ 172.17.x.x ๋Œ€์—ญ ๋‹ค์Œ์ธ 172.18.x.x ๋Œ€์—ญ์„ ๋ฐ›๊ฒŒ ๋˜๊ณ , container_network๋Š” ํ•ด๋‹น ๋Œ€์—ญ์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
Network Driver์˜ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜๋“ค์€ ๋‹ค์–‘ํ•œ๋ฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ ์“ฐ์ด๋Š” ์˜ต์…˜๋“ค์€ ์œ„ ๊ทธ๋ฆผ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. Subnet, Gateway, IP ์ฃผ์†Œ ๋Œ€์—ญ ์„ค์ • ๊ฐ’ ๋“ฑ์— ๋Œ€ํ•ด ๊ธฐ์ž…ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Subnet์— ๊ธฐ์ž…ํ•œ ๊ฐ’๊ณผ IP ์ฃผ์†Œ ๋Œ€์—ญ ์„ค์ • ๊ฐ’์— ๊ธฐ์ž…ํ•œ ๊ฐ’์€ ๊ฐ™์€ ๋ฒ”์œ„์— ์žˆ์–ด์•ผ ๋„คํŠธ์›Œํฌ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.
์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๋„คํŠธ์›Œํฌ์—๋Š” Container๋ฅผ ๋ถ„๋ฆฌํ•ด๋‚ด๊ฑฐ๋‚˜ ์ƒˆ๋กญ๊ฒŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์ƒˆ๋กœ์šด container_connection์„ ์ƒ์„ฑํ•˜์—ฌ ์•Œ์•„๋ณด์ž. ๋ณ„๋„์˜ Network Driver๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— container_connection์€ docker0๋ฅผ ์ด์šฉํ•œ๋‹ค.
docker network disconnect <network-name> <container-name>
์šฐ์„  new_bridge_with_setting์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” container_network๋ฅผ ์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ถ„๋ฆฌํ•ด๋ณด์ž. ์ฃผ์–ด์ง„ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚œ ๋’ค์— container_network์—์„œ ifconfig ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด๋ณด๋ฉด, eth0 ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  Loopback ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๋‚จ์€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
docker network connect <network-name> <container-name>
์ด๋ฒˆ์—๋Š” ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ container_connection๋ฅผ new_bridge_with_setting์— ์—ฐ๊ฒฐํ•ด๋ณด์ž. ์ฃผ์–ด์ง„ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚œ ๋’ค์— container_connection์—์„œ ifconfig ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด๋ณด๋ฉด, ์ด์ „์— ์œ ์ง€ํ•˜๊ณ  ์žˆ๋˜ ์ธํ„ฐํŽ˜์ด์Šค๋“ค์— new_bridge_with_setting์— ํ•ด๋‹นํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ connect ๋ฐ disconnect ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋Š”๋ฐ, Network Driver๋ฅผ Host ํ˜น์€ None์œผ๋กœ ์„ค์ •ํ•œ Container์— ๋Œ€ํ•ด์„œ๋Š” ๋ช…๋ น์–ด๊ฐ€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด์— ๋Œ€ํ•œ ํ™•์ธ์„ ์œ„ํ•ด ๊ฐ„๋‹จํžˆ container_test๋ผ๋Š” Network Driver๋ฅผ None์œผ๋กœ ์ด์šฉํ•˜๋Š” Container๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.
Container๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์—ˆ๋‹ค๋ฉด, ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ connect ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•ด๋ณด๋ฉด ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์˜ค๋ฅ˜๋ฅผ ๋ฑ‰์œผ๋ฉฐ ์š”์ฒญ์ด ๊ฑฐ์ ˆ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ connect์™€ disconnect ๋ช…๋ น์–ด๋Š” ํŠน์ • IP ์ฃผ์†Œ ๋Œ€์—ญ์„ ๊ฐ€์ง„ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ์ด์šฉํ•˜๋Š” Container์— ๋Œ€ํ•ด์„œ๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—๋Š” Bridge ํ˜น์€ Overlay ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๋‹ค.
Overlay ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•ด์„œ๋Š” ์†Œ๊ฐœํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.
Bridge๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ๋กœ๋„ ์šด์šฉ๋˜๋Š” ๋งŒํผ ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•œ ๊ฒƒ๋“ค์„ ์‹œ๋„ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.
Container๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ ์„ค์ • ์ค‘ ํ•˜๋‚˜๋กœ โ€”-net-alias๋ผ๋Š” ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ํ†ตํ•ด Container๊ฐ€ ์ด์šฉํ•˜๋Š” ๋„คํŠธ์›Œํฌ์—์„œ ๋ถ„๋ณ„์„ ์œ„ํ•œ ๋ณ„์นญ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜ URI๋ฅผ IP ์ฃผ์†Œ๋กœ Resolveํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๊ฒŒ Docker ๋‚ด๋ถ€์ ์œผ๋กœ ์œ ์ง€ ์ค‘์ธ DNS Resolver์— ์˜ํ•ด์„œ ๋ณ„์นญ์— ๋Œ€ํ•œ IP ์ฃผ์†Œ๋ฅผ ํ’€์–ด๋‚ด๊ฒŒ ๋œ๋‹ค. ์ด ๋•Œ, ์—ฌ๋Ÿฌ Container๋ฅผ ํ•˜๋‚˜์˜ Bridge์— ๋‘๊ณ  โ€”-net-alias๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น Container๋“ค์„ ๋ชจ๋‘ ๋™์ผํ•œ ๋ณ„์นญ์œผ๋กœ ๋ถ€์—ฌํ•˜๊ฒŒ ๋˜๋ฉด ping ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๋กœ ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ˜น์€ MacVLAN์ด๋ผ๊ณ  ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ด์šฉ ์ค‘์ธ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ์นด๋“œ๋ฅผ ๊ฐ€์ƒํ™”ํ•˜์—ฌ Container๋“ค์—๊ฒŒ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ์กด Bridge๋Š” ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์ƒ์ด์—ˆ์ง€๋งŒ MacVLAN์„ ์ด์šฉํ•˜๋ฉด ๋ฌผ๋ฆฌ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ๋™์ž‘ํ•˜๊ฒŒ ๋˜๋ฉฐ, ๋ฌผ๋ฆฌ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ Container๋“ค์€ ๊ฐ€์ƒ์˜ MAC ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๋ฉด์„œ ๋™์ผ ๋„คํŠธ์›Œํฌ ์ƒ์˜ Container๋“ค๊ณผ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ๋ฌผ๋ฆฌ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ๋™์ž‘ํ•˜๋Š”์ง€๋งŒ ๋‹ค๋ฅผ ๋ฟ MacVLAN์€ Bridge์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. MacVLAN์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ์ ์–ด๋„ ๋„คํŠธ์›Œํฌ ์žฅ๋น„ 1๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๊ฐ„๋‹จํ•œ ์‹คํ—˜์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ณต์œ ๊ธฐ์™€ VM์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ์˜ํ•  ์ ์œผ๋กœ๋Š” IP ์ฃผ์†Œ ๋Œ€์—ญ ์„ค์ • ๊ฐ’์ด ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ์™€ ๊ฒน์น˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ์ด ๊ธ€์—์„œ๋Š” ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

2) Host

docker run โ€”name <container-name> โ€”net host <image-name>
Container์˜ Network Driver๋ฅผ Host๋กœ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด, Host์˜ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ธฐ์กด Host์˜ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— Bridge์ฒ˜๋Ÿผ ๋ณ„๋„์˜ ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ์„ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. Host๋ผ๋Š” Network Driver๋Š” host๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์œ ์ง€๋˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, Container ์ƒ์„ฑ ์‹œ โ€”-net์ด๋ผ๋Š” ์˜ต์…˜์„ ์ด์šฉํ•˜์—ฌ host๋ผ๋Š” ์ด๋ฆ„์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ์ง€์ •ํ•˜ ๊ณง๋ฐ”๋กœ Host์˜ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์œผ๋กœ ์„ค์ •๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ์กด์˜ Container๊ฐ€ Private IP ์ฃผ์†Œ๋ฅผ ์ด์šฉํ•˜๊ณ  ์žˆ์–ด์„œ ์™ธ๋ถ€์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•ด ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, ๋ณ„๋„์˜ ํฌํŠธ ํฌ์›Œ๋”ฉ์ด ์—†์–ด๋„ ์™ธ๋ถ€์—์„œ Container ๋‚ด๋ถ€์˜ ์„œ๋น„์Šค์— ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ˜„์žฌ docker0๋ผ๋Š” Bridge์˜ IP ์ฃผ์†Œ ๋Œ€์—ญ ์„ค์ • ๊ฐ’์€ 172.17.x.x๋ฅผ ๋”ฐ๋ฅด๋„๋ก ๋˜์–ด ์žˆ๋Š”๋ฐ, ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ Network Driver๋ฅผ Host๋กค ์ด์šฉํ–ˆ์„ ๋•Œ๋Š” Bridge ๋Œ€์—ญ์„ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  eth0 ์ธํ„ฐํŽ˜์ด์Šค์˜ IP ์ฃผ์†Œ๊ฐ€ 192.168.65.6์ธ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์‹ค์ œ๋กœ Host์˜ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•œ๋‹ค๋ฉด, Host์˜ IP ์ฃผ์†Œ๋„ Container๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” IP ์ฃผ์†Œ์™€ ๋™์ผํ• ํ…๋ฐ Host ํ™˜๊ฒฝ์—์„œ ifconfig ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด๋ณด๋ฉด ์–ด๋””์—์„œ๋„ Container๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” 192.168.65.6์ด๋ผ๋Š” ์ฃผ์†Œ๋ฅผ ์ฐพ์•„๋ณผ ์ˆ˜ ์—†๋‹ค.
docker run -i -t โ€”rm โ€”privileged โ€”pid=host justincormack/nsenter1
์ด๋ฏธ ๋„ˆ๋ฌด๋‚˜๋„ ์ต์ˆ™ํ•˜๊ฒ ์ง€๋งŒ, ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ Linuxkit ๋‚ด๋ถ€์—์„œ ์‰˜์„ ์‹คํ–‰์‹œํ‚ค๋Š” Container๋ฅผ ๋งŒ๋“ค์–ด ifconfig ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด๋ณด๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ container_network๊ฐ€ ์ด์šฉํ•˜๊ณ  ์žˆ๋˜ 192.168.65.6์ด๋ผ๋Š” ์ฃผ์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, Host์˜ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์€ Linuxkit์˜ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์ด ๋œ๋‹ค. ์ด๋Š” Docker๊ฐ€ Linux ํ™˜๊ฒฝ์—์„œ ๊ตฌ๋™๋˜๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ, Host OS๋ฅผ Linux๋กœ ๋‘๊ณ  Docker๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ๋ณ„๋„์˜ ๊ฐ€์ƒํ™” ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ Host์˜ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ๊ณผ Container์˜ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์ด ๋ฐ”๋กœ ์ผ์น˜ํ•˜๊ฒŒ ๋˜์ง€๋งŒ Windows ํ˜น์€ Mac OS X๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด Docker ๊ตฌ๋™์„ ์œ„ํ•ด ๊ฐ€์ƒ์˜ Linux ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋ฏ€๋กœ Container๋Š” Linuxkit์˜ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ๋”ฐ๋ฅด๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

3) None

docker run โ€”name <container-name> โ€”net none <image-name>
Network Driver๋ฅผ None์œผ๋กœ ์“ด๋‹ค๋Š” ๋ง์€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฅผ ์ด์šฉํ•œ Container๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด eth0 ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†๊ณ  ์˜ค๋กœ์ง€ Loopback ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

4) Container

docker run โ€”name <container-name> โ€”name container:<container-name> <image-name>
Network Driver๋ฅผ Container๋กœ ์ด์šฉํ•œ๋‹ค๋Š” ๋ง์€ ๋„คํŠธ์›Œํฌ์˜ ํ™˜๊ฒฝ ์ค‘ ์ผ๋ถ€๋ฅผ ํŠน์ • Container๊ฐ€ ์ด์šฉํ•˜๊ณ  ์žˆ๋Š” ์„ค์ • ๊ฐ’์œผ๋กœ ์ด์šฉํ•˜๊ฒ ๋‹ค๋Š” ๋ง์ด๋‹ค. ์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Container๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด <container-name>์— ํ•ด๋‹นํ•˜๋Š” IP ์ฃผ์†Œ, MAC ์ฃผ์†Œ ๋“ฑ์„ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ Container ์‹คํ–‰ ์‹œ Docker Engine์— ์˜ํ•œ docker0์˜ IP ์ฃผ์†Œ ๋Œ€์—ญ ์„ค์ • ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ์ƒˆ๋กœ์šด IP ์ฃผ์†Œ ํ• ๋‹น์ด ์ด๋ค„์ง€์ง€ ์•Š์„ ๋ฟ ์•„๋‹ˆ๋ผ ์ถ”๊ฐ€์ ์ธ veth ์ธํ„ฐํŽ˜์ด์Šค ์—ญ์‹œ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค.
์œ„์™€ ๊ฐ™์ด ์„ค์ •๋œ ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

3. Volume Commands

1) Docker Volume ์ƒ์„ฑ

docker volume create โ€”name <volume-name>
Docker Engine์ด ์ง€์›ํ•˜๋Š” Docker Volume์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. โ€”-name ์˜ต์…˜์œผ๋กœ <volume-name>์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Container๋ฅผ ์ƒ์„ฑํ•  ๋•Œ์ฒ˜๋Ÿผ ์ž„์˜๋กœ 16์ž๋ฆฌ ์ด์ƒ์˜ Hashing๋œ Digest ๊ฐ’์„ <volume-name>์œผ๋กœ ์ด์šฉํ•œ๋‹ค.

2) Docker Volume ๋ชฉ๋ก ํ™•์ธ

docker volume ls
์ƒ์„ฑ๋œ Docker Volume๋“ค์˜ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

3) Docker Volume ์ •๋ณด ํ™•์ธ

docker volume inspect <volume-name>
Docker Volume์˜ ์ƒ์„ธํ•œ ์ •๋ณด๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

4) Docker Volume ์‚ญ์ œ

docker volume rm <volume-name>
ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ด์ง€ ์•Š์€ Docker Volume์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ Docker Volume์— ๋Œ€ํ•ด ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜๋ฉด ํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฑ‰์œผ๋ฉฐ ์š”์ฒญ์ด ๊ฑฐ์ ˆ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๊ฐ•์ œ ์‚ญ์ œ ์˜ต์…˜์ธ -f๋ฅผ ์ด์šฉํ•ด๋„ ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ Docker Volume์— ๋Œ€ํ•ด์„  ์š”์ฒญ์ด ๊ฑฐ์ ˆ ๋œ๋‹ค.

5) ์‚ฌ์šฉ ์ค‘์ด์ง€ ์•Š์€ Docker Volume ์‚ญ์ œ

docker volume prune
ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ๋ชจ๋“  Docker Volume์„ ํ•œ ๋ฒˆ์— ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

4. Network Commands

1) Network ์ƒ์„ฑ

docker network create โ€”driver <driver-name> <network-name>
์ƒˆ๋กœ์šด ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. โ€”-driver ์˜ต์…˜์„ ์ƒ๋žตํ•˜๋ฉด ๋„คํŠธ์›Œํฌ๋ฅผ Bridge๋กœ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

2) Network ๋ชฉ๋ก ํ™•์ธ

docker network ls
๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๋„คํŠธ์›Œํฌ ๋ฐ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๋„คํŠธ์›Œํฌ๋“ค์˜ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

3) Network ์—ฐ๊ฒฐ

docker network connect <network-name> <container-name>
Container๋ฅผ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐํ•œ๋‹ค. ํŠน์ • IP ์ฃผ์†Œ ๋Œ€์—ญ์„ ๊ฐ€์ง„ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ์ด์šฉํ•˜๋Š” Container์— ๋Œ€ํ•ด์„œ๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

4) Network ์—ฐ๊ฒฐ ํ•ด์ œ

docker network disconnect <network-name> <container-name>
Container๋ฅผ ๋„คํŠธ์›Œํฌ์—์„œ ์—ฐ๊ฒฐ ํ•ด์ œํ•œ๋‹ค. ํŠน์ • IP ์ฃผ์†Œ ๋Œ€์—ญ์„ ๊ฐ€์ง„ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ์ด์šฉํ•˜๋Š” Container์— ๋Œ€ํ•ด์„œ๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

5) Network ์ •๋ณด ํ™•์ธ

docker network inspect <network-name>
๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์ •๋ณด๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

6) Network ์‚ญ์ œ

docker network rm <network-name>
ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•ด ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฑ‰์œผ๋ฉฐ ์š”์ฒญ์ด ๊ฑฐ์ ˆ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋„คํŠธ์›Œํฌ์˜ ์‚ญ์ œ ๋ช…๋ น์–ด์—๋Š” ๊ฐ•์ œ ์‚ญ์ œ ์˜ต์…˜์ธ -f๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋„คํŠธ์›Œํฌ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์‚ญ์ œํ•˜๋ ค๋ฉด ์ด๋ฅผ ์ด์šฉํ•˜๋Š” Container๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค.

7) ์‚ฌ์šฉ ์ค‘์ด์ง€ ์•Š์€ Docker Network ์‚ญ์ œ

docker network prune
ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ๋ชจ๋“  Docker Network๋ฅผ ํ•œ ๋ฒˆ์— ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

5. Reference

์‹œ์ž‘ํ•˜์„ธ์š”! ๋„์ปค/์ฟ ๋ฒ„๋„คํ‹ฐ์Šค: ์นœ์ ˆํ•œ ์„ค๋ช…์œผ๋กœ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์™€ ๋„์ปค์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ œ์‹œํ•˜๋Š” ๊ฐ€์ƒํ™” ํŒจ๋Ÿฌ๋‹ค์ž„์ž…๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์ž์ฒด๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ๋งค์šฐ ์‰ฝ์ง€๋งŒ ์ด๋ฅผ ํ™œ์šฉํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ๋Š” ๊ฒฐ์ฝ” ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ฑ…์€ ๋„์ปค๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์™€ ์ด๋ฏธ์ง€์˜ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ๋จผ์ € ์„ค๋ช…ํ•œ ๋’ค, ๋„์ปค ์ปดํฌ์ฆˆ์™€ ์Šค์›œ ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ YAML ํŒŒ์ผ๋กœ ์ž‘์„ฑํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.