๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Container/Docker

[Docker] ์„œ๋ฒ„๋กœ์„œ์˜ ์—ญํ• , Docker Daemon

๋ฐ˜์‘ํ˜•

๐Ÿ”Š ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ์‹œ์ž‘ํ•˜์„ธ์š”! ๋„์ปค/์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ์ ์„ ์ฝ๊ณ  ๊ฐœ์ธ์ ์ธ ๋ชฉ์  ํ•˜์— ์ž‘์„ฑ๋˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค. ํฌ์ŠคํŒ…์— ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ์ž๋ฃŒ๋Š” ์ œ๊ฐ€ ์ง์ ‘ ์žฌ๊ตฌ์„ฑํ•˜์˜€์Œ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

 

Docker


์ €๋ฒˆ ํฌ์ŠคํŒ…๊นŒ์ง€๋Š” ๋„์ปค ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์•˜๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, ์ปจํ…Œ์ด๋„ˆ, ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•, ๋” ๋‚˜์•„๊ฐ€ Dockerfile์„ ๊ฐ€์ง€๊ณ  ๋‚˜๋งŒ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋„ ํ•™์Šตํ–ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋„์ปค ์ž์ฒด๋ฅผ ๋‹ค๋ค„๋ณผ ์ˆ˜ ์žˆ๋Š” ๋„์ปค ๋ฐ๋ชฌ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. ๋„์ปค ๋ฐ๋ชฌ์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ณ  ๋„์ปค ์ž์ฒด์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์˜ต์…˜์„ ํ™œ์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€์™€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข€ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ๋„์ปค ๋ฐ๋ชฌ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ธฐ ์ „์— ๋„์ปค๊ฐ€ ์–ด๋–ค ๊ตฌ์„ฑ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”์ง€๋ถ€ํ„ฐ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.

1. ๋„์ปค์˜ ๊ตฌ์กฐ

์ด์ œ๋ถ€ํ„ฐ '๋„์ปค ์—”์ง„ = ๋„์ปค'๋ผ๊ณ  ๊ฐ„๋žตํžˆ ๋ถ€๋ฅด๋„๋ก ํ•˜์ž. ๋„์ปค๋Š” 2๊ฐ€์ง€์˜ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ, ํ•œ ๊ฐ€์ง€๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์—ญํ• ์„ ํ•˜๋Š” ๋„์ปค ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„์˜ ์—ญํ• ์„ ํ•˜๋Š” ๋„์ปค ๋ฐ๋ชฌ์ด ์žˆ๋‹ค. ์•„๋‹ˆ ๋„์ปค๊ฐ€ ๋ฌด์Šจ ์›น์„œ๋ฒ„๋„ ์•„๋‹ˆ๊ณ , ์–ด๋–ป๊ฒŒ ๋„์ปค ์•ˆ์— ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋Š” ๊ฑธ๊นŒ?

 

์ผ๋‹จ, ์šฐ๋ฆฌ๋Š” ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ„ฐ๋ฏธ๋„์—์„œ docker ๋ผ๋Š” ์ ‘๋‘์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ, ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž์ธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ”๋กœ ์ด docker ๋ผ๋Š” ์ ‘๋‘์–ด์˜ ๋ช…๋ น์–ด๊ฐ€ ๋˜๊ณ , ์ด ๋ช…๋ น์–ด๊ฐ€ ์ž‘์„ฑ๋˜์–ด ์žˆ๋Š” ํŒŒ์ผ์€ docker ๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŒ์ผ์ด๋‹ค. ์‹ค์ œ๋กœ docker ๋ช…๋ น์–ด ํŒŒ์ผ์ด ์–ด๋””์žˆ๋Š”์ง€ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

$ which docker

 

๊ทธ๋Ÿฌ๋ฉด ์•„๋งˆ MacOS์˜ ๊ฒฝ์šฐ /usr/local/bin/docker ์ด๊ฑฐ๋‚˜ ๋ฆฌ๋ˆ…์Šค ๊ณ„์—ด์˜ OS์ผ ๊ฒฝ์šฐ, /bin/docker ๊ฐ€ ํ‘œ์ค€์ถœ๋ ฅ์œผ๋กœ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค. ๊ฒฐ๊ตญ ์ด docker ๋ช…๋ น์–ด ํŒŒ์ผ์ด ๋ฐ”๋กœ ๋„์ปค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ธ ๋„์ปค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋œ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ์„œ๋ฒ„์˜ ์—ญํ• ์„ ํ•˜๋Š” ๋„์ปค ๋ฐ๋ชฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์šฐ์„ , ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ์ค‘์ธ ๋„์ปค ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ps ๋ช…๋ น์–ด๋กœ ์ถœ๋ ฅ์‹œ์ผœ๋ณด์ž.(ps ๋ช…๋ น์–ด์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅธ๋‹ค๋ฉด ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ )

 

$ ps aux | grep -E "docker"

 

๋„์ปค๋ฅผ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ถœ๋ ฅ

 

์œ„ ๊ฒฐ๊ณผํ™”๋ฉด์„ ๋ณด๋ฉด docker๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ”๋กœ /usr/bin ์ด๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์˜ dockerd ๋ผ๋Š” ํŒŒ์ผ์ด ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์ฆ‰, ์ด dockerd ํŒŒ์ผ์ด ๋ฐ”๋กœ ์„œ๋ฒ„์˜ ์—ญํ• ์„ ํ•˜๋Š” ๋„์ปค ๋ฐ๋ชฌ์ด ๋œ๋‹ค. ์กฐ๊ธˆ ๋” ์ž์„ธํ•˜๊ฒŒ, ๋„์ปค๋Š” ์™ธ๋ถ€์—์„œ API ์ž…๋ ฅ์„ ๋ฐ›์•„ ๋„์ปค์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ, ์ด ๋•Œ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ API ์ž…๋ ฅ์„ ๋ฐ›์œผ๋ฉด ๋„์ปค ํ”„๋กœ์„ธ์Šค(dockerd ํŒŒ์ผ์ด ์‹คํ–‰)๊ฐ€ ์‹คํ–‰๋˜์–ด ์„œ๋ฒ„๋กœ์„œ ์ž…๋ ฅ์„ ๋ฐ›์„ ์ค€๋น„๊ฐ€ ๋œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์ด '์ƒํƒœ'๋ฅผ ๋ฐ”๋กœ ๋„์ปค ๋ฐ๋ชฌ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ด์ฏค๋˜๋ฉด ๋ˆˆ์น˜ ์ฑŒ ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ ๋„์ปค ๋ฐ๋ชฌ์„ ์„ค๋ช…ํ•˜๋ฉด์„œ ์–ธ๊ธ‰ํ•œ '์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ์˜ API ์ž…๋ ฅ'์ด ๋ฐ”๋กœ ๋„์ปค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋œ๋‹ค. ์ด ๋•Œ, ๋„์ปค ํด๋ผ์ด์–ธํŠธ๋Š” API๋ฅผ '์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก' CLI(Command Line Interface) ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ CLI ๋ช…๋ น์–ด๊ฐ€ 'docker' ๋ผ๋Š” ์ ‘๋‘์–ด๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค. ๊ฒฐ๊ตญ, ๋„์ปค์˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋„์‹ํ™”ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

๊ฐœ๋ฐœ์ž, ๋„์ปค ํด๋ผ์ด์–ธํŠธ, ๋„์ปค ๋ฐ๋ชฌ ๊ฐ„์˜ ์†Œํ†ต ๊ตฌ์กฐ

 

์œ„ ๊ทธ๋ฆผ์—์„œ /var/run/docker.sock ์ด๋ผ๋Š” ์œ ๋‹‰์Šค ์†Œ์ผ“์ด ๋ญ”์ง€ ๊ถ๊ธˆํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž์„ธํ•œ ๊ฑด ์•„๋ž˜์—์„œ ์•Œ์•„๋ณธ๋‹ค. ์ด ์†Œ์ผ“์€ ๋„์ปค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋„์ปค ๋ฐ๋ชฌ์˜ API๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ํ†ต์‹ ์ˆ˜๋‹จ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์œ„ ๊ทธ๋ฆผ์˜ ์ˆœ์„œ ๊ณผ์ •์€ ๋„์ปค์— ์•„๋ฌด๋Ÿฐ ์˜ต์…˜ ์„ค์ •์„ ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋„์ปค ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋„์ปค ๋ฐ๋ชฌ์„ ์ œ์–ดํ•˜๋Š” ์ˆœ์„œ์ด๋‹ค. ๋งŒ์•ฝ ๋„์ปค ๋ฐ๋ชฌ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์œ„ ๊ทธ๋ฆผ์—์„œ ๋˜ ๋‹ค๋ฅธ ์ˆœ์„œ๊ฐ€ ์ค‘๊ฐ„์— ์ถ”๊ฐ€๋กœ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค.

2. ๋„์ปค ๋ฐ๋ชฌ ์‹คํ–‰

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ์œ„์—์„œ ๊ฐœ๋…์ ์œผ๋กœ ๋ฐฐ์šด ๋„์ปค ๋ฐ๋ชฌ์„ ์ง์ ‘ ์‹คํ–‰์‹œ์ผœ๋ณด๋„๋ก ํ•˜์ž. ์šฐ์„  ๋„์ปค ๋ฐ๋ชฌ์€ ์•„๋ž˜์™€ ๊ฐ™์ด service ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•ด ์ฆ‰, ๋„์ปค ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•ด์„œ ์‹œ์ž‘ ๋˜๋Š” ์ •์ง€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹œ์ž‘ํ•œ๋‹ค๋ผ๋Š” ๊ฒƒ์€ ๊ณง ์„œ๋ฒ„๋กœ์„œ์˜ ๋„์ปค๋ฅผ ๋„์šด๋‹ค๋Š” ์…ˆ์ด๋‹ค.(ํ”ํžˆ ์›น์„œ๋ฒ„๋ฅผ ๋„์šด๋‹ค๋Š” ๊ฐœ๋…์ฒ˜๋Ÿผ!) 

 

$ service docker start 
$ service docker stop

 

ํ•˜์ง€๋งŒ ์œ„์ฒ˜๋Ÿผ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ๋ ˆ๋“œํ–‡ ๊ณ„์—ด์˜ ์šด์˜์ฒด์ œ(ex. CentOS)์—์„œ๋งŒ์ด๋‹ค. Mac์—์„œ๋Š” Docker Desktop on Mac ์•„์ด์ฝ˜์„ ํด๋ฆญํ•ด ๋„์ปค ๋ฐ๋ชฌ์„ ๋จผ์ € ์‹คํ–‰ํ•ด์ฃผ์–ด์•ผ ํ•˜๊ณ , ์šฐ๋ถ„ํˆฌ์˜ ๊ฒฝ์šฐ๋Š” ๋ณ„๋‹ค๋ฅธ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰์‹œ์ผœ์ค€๋‹ค. ๋ฌผ๋ก  ๋ ˆ๋“œํ–‡ ๊ณ„์—ด์˜ ์šด์˜์ฒด์ œ์—์„œ๋„ ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ ๋„ ์šฐ๋ถ„ํˆฌ์ฒ˜๋Ÿผ ์ž๋™์œผ๋กœ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

$ systemctl enable docker

 

์œ„์™€ ๊ฐ™์ด service ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉ(๋„์ปค ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉ)ํ•ด์„œ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์œ„์—์„œ ๋ฐฐ์šด dockerd ๋ช…๋ น์–ด๋กœ๋„ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.(๋ฐ”๋กœ ์œ„์—์„œ ๋„์ปค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” dockerd ๋ผ๋Š” ํŒŒ์ผ์„ ํ†ตํ•ด์„œ ์‹คํ–‰๋œ๋‹ค๊ณ  ๋ฐฐ์› ์—ˆ๋‹ค) ๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด service ๋ช…๋ น์–ด๋กœ ๋„์ปค ๋ฐ๋ชฌ์„ ์ •์ง€์‹œํ‚จ ๋’ค dockerd ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์„œ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰์‹œ์ผœ๋ณด์ž. 

 

$ service docker stop

 

๊ฐ„ํ˜น ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋”๋ผ๋„ ๋„์ปค ๋ฐ๋ชฌ์ด ์ •์ง€ํ•˜์ง€ ์•Š์•„์„œ docker ps ์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋„ ์ •์ƒ๋™์ž‘ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ๋•Œ๋Š” docker.socket ์ด๋ผ๋Š” ํŒŒ์ผ์ด ์—ฌ์ „ํžˆ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰์‹œํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ, ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋กœ docker.socket ์ด๋ผ๋Š” ๊ฒƒ๋„ ์ •์ง€์‹œ์ผœ์ฃผ๋ฉด ๊ทธ ๋•Œ๋Š” ์ •๋ง ๋„์ปค ๋ฐ๋ชฌ์ด ์ •์ง€ํ•˜์—ฌ docker ps ์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋„ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๊ฐ€ ๋œจ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.(์ด์™€ ๊ด€๋ จํ•ด์„œ๋Š” ์ด Stackoverflow์—์„œ ๋„์›€์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค)

 

$ systemctl stop docker.socket

 

๊ทธ๋ฆฌ๊ณ  ์ด์ œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง์ ‘ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰์‹œํ‚ค๋ฉด  ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ํ‘œ์ค€์ถœ๋ ฅ์ด ์ญ‰ ๋œฌ๋‹ค.

 

$ dockerd

 

dockerd ๋ช…๋ น์–ด๋ฅผ ์ณค์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋กœ๊ทธ

์œ„ ์‚ฌ์ง„์˜ ๋กœ๊ทธ ์ค‘ ๋งˆ์ง€๋ง‰ ์ค„์— "API listen on /var/run/docker.sock" ์ด๋ผ๋Š” ๊ฒƒ์ด ๋‚˜ํƒ€๋‚ฌ๋‹ค. ์ด๋Š” ๊ณง ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ(listen)๋ผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์˜๋ฏธํ•˜๊ณ , ์—ฌ๊ธฐ์„œ์˜ ์ž…๋ ฅ์€ ๋ฐ”๋กœ ์œ„์—์„œ ๋ฐฐ์› ๋˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋„์ปค ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•œ ์ฆ‰, docker ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ ์ž…๋ ฅ์„ ์˜๋ฏธํ•œ๋‹ค. ์‹ค์ œ๋กœ ์œ„ ์ƒํƒœ์—์„œ ํ„ฐ๋ฏธ๋„์„ ํ•˜๋‚˜ ๋” ์ผœ์„œ docker ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์œ„์ฒ˜๋Ÿผ dockerd๋ฅผ ํ™œ์šฉํ•ด์„œ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์žฅ์ ์€ ๋ฌด์—‡์ผ๊นŒ? ์šฐ์„  ๋””๋ฒ„๊น…์ด๋‚˜ ๋„์ปค ์ž์ฒด์˜ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…์ด ์‰ฌ์›Œ์ง„๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ํ•˜๋Š” ์›น์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ๋„ ์›น์„œ๋ฒ„๋ฅผ ํฌ๊ทธ๋ผ์šด๋“œ ์žก์œผ๋กœ ๋„์›Œ๋†“์€ ํ„ฐ๋ฏธ๋„์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—๋Ÿฌ ๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ์†์‰ฝ๊ฒŒ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด๊ฒƒ๊ณผ ๋น„์Šทํ•˜๊ฒŒ dockerd๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋„์ปค ๋ฐ๋ชฌ์˜ ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ๋ฅผ ๊ณ„์† ๋ณผ ์ˆ˜ ์žˆ์–ด ์†์‰ฌ์šด ๋””๋ฒ„๊น…์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

3. ๋„์ปค ๋ฐ๋ชฌ ์„ค์ •

์ง€๊ธˆ๊นŒ์ง€๋Š” ๋„์ปค ํด๋ผ์ด์–ธํŠธ, ๋„์ปค ๋ฐ๋ชฌ์ด ๋ฌด์—‡์ธ์ง€ ๋ฐฐ์›Œ๋ณด๋ฉด์„œ ๋„์ปค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๋ฅผ ๋ฐฐ์› ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋„์ปค ๋ฐ๋ชฌ์„ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋ฐฐ์›Œ๋ณด์•˜๋‹ค. ๋‹ค์Œ์€ ์ด์ œ ๋„์ปค ๋ฐ๋ชฌ์„ ์ข€ ๋” ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์ปค ๋ฐ๋ชฌ์— ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์˜ต์…˜์— ๋Œ€ํ•ด์„œ ๋ฐฐ์›Œ๋ณด๋„๋ก ํ•˜์ž.

 

์ด๋ฒˆ ๋ชฉ์ฐจ์—์„œ ๋ฐฐ์šธ ๋‚ด์šฉ์€ ๋ชจ๋‘ dockerd ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•ด์„œ ๋„์ปค ๋ฐ๋ชฌ์˜ ์˜ต์…˜์„ ์„ค์ •ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋„์ปค ๋ฐ๋ชฌ ์˜ต์…˜์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณดํ†ต dockerd ๋ช…๋ น์–ด ๋ณด๋‹ค๋Š” ๋„์ปค ์„ค์ • ํŒŒ์ผ์„ ์ˆ˜์ •ํ•œ ๋’ค, ๋„์ปค ๋ฐ๋ชฌ์ด ํ•ด๋‹น ์„ค์ • ํŒŒ์ผ์„ ์ฝ์–ด ๋“ค์—ฌ ๋ณ€๊ฒฝ๋œ ๋„์ปค ๋ฐ๋ชฌ ์˜ต์…˜์„ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, dockerd๋กœ ์‹œ์ž‘ํ•ด ์ž…๋ ฅ์‹œํ‚ฌ ๋ช…๋ น์–ด๋“ค์„ ๋„์ปค ์„ค์ • ํŒŒ์ผ์˜ DOCKER_OPTS ๋ผ๋Š” ๋ณ€์ˆ˜์— ํ• ๋‹นํ•œ ๋’ค ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ๋„์ปค ๋ฐ๋ชฌ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ํ”ํ•˜์ง€ ์•Š์€(?) ๋ฐฉ๋ฒ•์ธ dockerd ๋ช…๋ น์–ด๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ ๋„์ปค ๋ฐ๋ชฌ์˜ ์˜ต์…˜์— ๋Œ€ํ•ด ๋ฐฐ์›Œ๋ณด๋„๋ก ํ•˜์ž. ๋ณด์•ˆ, ์Šคํ† ๋ฆฌ์ง€ ๋“œ๋ผ์ด๋ฒ„์™€ ๊ฐ™์€ ์˜ต์…˜๋„ ์žˆ์ง€๋งŒ ์ด์— ๋Œ€ํ•ด์„œ๋Š” ํ•ด๋‹น ํฌ์ŠคํŒ…์—์„œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š์œผ๋ฏ€๋กœ ์›๋ณธ ์ฑ…์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜ต์…˜์ธ -H ์˜ต์…˜์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฐฐ์›Œ๋ณด๋„๋ก ํ•˜์ž.

3-1. ๋„์ปค ๋ฐ๋ชฌ์˜ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ถ”๊ฐ€ํ•˜๊ธฐ, -H ์˜ต์…˜

-H ์˜ต์…˜์„ ๋„์ปค ๋ฐ๋ชฌ์˜ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ์•„๋ฌด๋Ÿฐ -H ์˜ต์…˜์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ๋„์ปค ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์œ ๋‹‰์Šค ์†Œ์ผ“์ธ docker.sock์„ ์‚ฌ์šฉํ•œ๋‹ค. ์œ„ ๋ชฉ์ฐจ์—์„œ ๋ณธ ๊ทธ๋ฆผ์„ ๋‹ค์‹œ ๊ฐ–๊ณ ์™€ ๋ณด์ž.

 

๊ฐœ๋ฐœ์ž, ๋„์ปค ํด๋ผ์ด์–ธํŠธ, ๋„์ปค ๋ฐ๋ชฌ ๊ฐ„์˜ ์†Œํ†ต ๊ตฌ์กฐ

 

์œ„ ๊ทธ๋ฆผ์—์„œ 2๋ฒˆ์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์ด ๋ฐ”๋กœ docker.sock์ธ ์œ ๋‹‰์Šค ์†Œ์ผ“์ด๊ณ  ์ด๊ฒƒ์ด ๋„์ปค ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•ด ๋„์ปค ๋ฐ๋ชฌ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๊ธฐ๋ณธ ์„ธํŒ…์ด ์ด๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์˜ 2๊ฐœ ๋ช…๋ น์–ด๋Š” ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ์ง€๋‹Œ๋‹ค.

 

$ dockerd
$ dockerd -H unix:///var/run/docker.sock

 

์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ๋„์ปค ๋ฐ๋ชฌ์ด ์ •์ง€๋œ ์ƒํƒœ์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด๋ฏธ ๋„์ปค ๋ฐ๋ชฌ์ด ์‹œ์ž‘๋œ ์ƒํƒœ์ธ๋ฐ, ๋˜ ์‹œ์ž‘ํ•  ์ˆ˜๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

dockerd ๋ช…๋ น์–ด์˜ -H ์˜ต์…˜์—๋Š” IP ์ฃผ์†Œ์™€ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›๊ฒฉ API์ธ Docker Remote API๋กœ ๋„์ปค๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ๋กœ์ปฌ์— ์žˆ๋Š” ๋„์ปค ๋ฐ๋ชฌ์ด ์•„๋‹ˆ๋”๋ผ๋„ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ๋„์ปค ๋ฐ๋ชฌ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋•Œ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์˜ ๋„์ปค ๋ฐ๋ชฌ์„ ์ œ์–ดํ•  ๋•Œ๋Š” HTTP ์š”์ฒญ์œผ๋กœ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋„์ปค ๋ฐ๋ชฌ์ด RESTful API ํ˜•ํƒœ๋ฅผ ๋„๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

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

 

$ dockerd -H tcp://0.0.0.0:999

 

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ ์œ„์™€ ๊ฐ™์€ ๋ช…๋ น์–ด ํ•œ ์ค„๋งŒ ์ž…๋ ฅํ•œ๋‹ค๋ฉด, ๋กœ์ปฌ์—์„œ๋Š” ๋”์ด์ƒ ๋„์ปค ํด๋ผ์ด์–ธํŠธ์ธ docker ์ ‘๋‘์–ด๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋กœ์ปฌ์˜ ๋„์ปค ๋ฐ๋ชฌ์„ ์ œ์–ดํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ฐ”๋กœ ์œ„์—์„œ ๋ฐฐ์šด docker.sock ์ด๋ผ๋Š” ์œ ๋‹‰์Šค ์†Œ์ผ“ํŒŒ์ผ์„ -H ์˜ต์…˜์— ์ถ”๊ฐ€ํ•ด์ฃผ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋„์ปค ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์œ ๋‹‰์Šค ์†Œ์ผ“๊ณผ Remote API๋ฅผ ์œ„ํ•œ ๋ฐ”์ธ๋”ฉ ์ฃผ์†Œ๋ฅผ ๋™์‹œ์— ์•„๋ž˜์ฒ˜๋Ÿผ ์„ค์ •ํ•œ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ์„ค์ •ํ•˜๋ฉด ์˜๋ฏธ๋Š” "๋„์ปค ๋ฐ๋ชฌ์€ docker.sock์ด๋ผ๋Š” ์œ ๋‹›์Šค ์†Œ์ผ“์„ ํ†ตํ•œ ์ž…๋ ฅ ๋˜๋Š” 0.0.0.0(ํ˜ธ์ŠคํŠธ์˜ ๋ชจ๋“  ๋„คํŠธ์›Œํฌ ์ธํผํ…Œ์ด์Šค์˜ ๋ชจ๋“  IP์ฃผ์†Œ)์˜ 999๋ฒˆ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ํ†ตํ•œ ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋Œ€๊ธฐ์ƒํƒœ(listen)์— ์žˆ์Œ!" ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

$ dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:999

 

๊ทธ๋Ÿฌ๋ฉด ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์—์„œ Remote API๋กœ ๋„์ปค ๋ฐ๋ชฌ์„ ์ œ์–ดํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ์ดํ•ดํ•ด๋ณด์ž. ์ผ๋‹จ, Remote API ๋‚˜ ๋„์ปค ํด๋ผ์ด์–ธํŠธ๋‚˜ ๋‘˜ ๋‹ค ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ™์€ API๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ฆ‰, ๋ช…๋ น์–ด์˜ ์ƒ๊น€์ƒˆ๋งŒ ๋‹ค๋ฅผ ๋ฟ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ตฌํ˜„๋˜๋Š” ๋กœ์ง์€ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ 199.168.99.100 ์ด๋ผ๋Š” IP์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ ์ปดํ“จํ„ฐ์—์„œ Z๋ผ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋„์ปค ๋ฐ๋ชฌ์„ ๋กœ์ปฌ์—์„œ ์‹คํ–‰์‹œ์ผฐ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๊ทธ๋ฆฌ๊ณ  ์ด Z๊ฐœ๋ฐœ์ž๋Š” dockerd -H ์˜ต์…˜์„ ์ฃผ์–ด 199.168.99.100์ด๋ผ๋Š” IP ์ฃผ์†Œ์˜ 999๋ฒˆ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ๊ฐœ๋ฐฉํ•˜์—ฌ ๋‹ค๋ฅธ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์—์„œ Remote API๋กœ ๋„์ปค ๋ฐ๋ชฌ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ–ˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. ์ด ๋•Œ ๋™์ž‘ํ•˜๋Š” ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

 

์ฆ‰, ๋กœ์ปฌ HOST์—์„œ ๋‚ ๋ฆฐ docker version์ด๋ผ๋Š” ๋ช…๋ น์–ด๋Š” ์›๊ฒฉ HOST์—์„œ curl ๋ช…๋ น์–ด๋กœ ๋‚ ๋ฆฐ HTTP ์š”์ฒญ๊ณผ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์œ„์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์—์„œ ๋„์ปค ๋ฐ๋ชฌ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. Remote API ์ข…๋ฅ˜(์œ„ ๊ทธ๋ฆผ์—์„œ /version URL ์ฒ˜๋Ÿผ)๋Š” ๋„์ปค ๋ช…๋ น์–ด ๊ฐœ์ˆ˜๋งŒํผ ์žˆ์œผ๋ฉฐ API์— ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ๋„์ปค ํด๋ผ์ด์–ธํŠธ ๋ช…๋ น์–ด์™€ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅธ ๋ถ€๋ถ„๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ณดํ†ต์€ HTTP ๋„๊ตฌ๋กœ ์ง์ ‘(์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ) ์š”์ฒญํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ํŠน์ก ์–ธ์–ด(ex. Python)๋กœ ๋ฐ”์ธ๋”ฉ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

 

๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์…ธ์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜์— DOCKER_HOST ๋ผ๋Š” ๋ณ€์ˆ˜ ๊ฐ’์— IP ์ฃผ์†Œ ๋ฐ ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ํ• ๋‹นํ•จ์œผ๋กœ์จ ์›๊ฒฉ์— ์žˆ๋Š” ๋„์ปค๋ฅผ ์ œ์–ดํ•  ์ˆ˜๋„ ์žˆ๋‹ค.  ๋„์ปค ๋ฐ๋ชฌ์œผ๋กœ ์ ‘๊ทผํ•  ์›๊ฒฉ ํ˜ธ์ŠคํŠธ(ํด๋ผ์ด์–ธํŠธ)์˜ ์…ธ์—์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•˜๋ฉด ๋„์ปค ๋ฐ๋ชฌ์„ ์›๊ฒฉ์œผ๋กœ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

$ export DOCKER_HOST="tcp://199.168.99.100:999"
$ docker version

 

ํ•˜์ง€๋งŒ ์œ„์ฒ˜๋Ÿผ Remote API๋ฅผ ์ด์šฉํ•ด์„œ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์˜ ๋„์ปค ๋ฐ๋ชฌ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๋ณด์•ˆ์ด ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์•„๋ฌด ๋ณด์•ˆ๋„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ IP ์ฃผ์†Œ์™€ ํฌํŠธ๋ฒˆํ˜ธ๋งŒ ์•Œ๋ฉด ์‰ฝ๊ฒŒ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์˜ ๋„์ปค ๋ฐ๋ชฌ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋„์ปค์— ๋Œ€ํ•ด์„œ ๋ณด์•ˆ์„ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ฒ„(๋„์ปค ๋ฐ๋ชฌ)์ธก๊ณผ ํด๋ผ์ด์–ธํŠธ(๋„์ปค ํด๋ผ์ด์–ธํŠธ)์ธก ์—์„œ์˜ ๋ณด์•ˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ ์šฉํ•œ๋‹ค. ๋ณธ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š์ง€๋งŒ ์ฑ…์—์„œ๋Š” ๋ณด์•ˆ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค. ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์›๋ณธ ์ฑ…์˜ ๋‚ด์šฉ์„ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž.

4. ๋„์ปค ๋ฐ๋ชฌ ๋ชจ๋‹ˆํ„ฐ๋ง

๋„์ปค ๋ฐ๋ชฌ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์ด์œ ๋Š” ๋ญ˜๊นŒ? ๋งŽ์€ ์ˆ˜์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์„œ๋ฒ„๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฐํฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ์„œ ๊ทธ ์›์ธ์„ ์ฐพ๊ธฐ ์œ„ํ•จ์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ๋„์ปค ๋ฐ๋ชฌ์€ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์šฐ์„  ๋„์ปค๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง์ด ์žˆ๊ณ , ๋„์ปค ํ”„๋กœ์ ํŠธ์—์„œ ์ง€์›ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์˜คํ”ˆ์†Œ์Šค ๋Œ€์‹œ๋ณด๋“œ๋„ ์กด์žฌํ•œ๋‹ค. ์šฐ์„  ๋„์ปค ์ž์ฒด์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž.

4-1. ๋„์ปค ๋ฐ๋ชฌ์˜ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ

๋„์ปค ์—”์ง„์—์„œ ์ž์ฒด์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋„์ปค ๋ฐ๋ชฌ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰ํ•  ๋•Œ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด Remote API๋กœ ๋„์ปค ๋ฐ๋ชฌ์„ ์ œ์–ดํ•  ๋•Œ ๋ฐœ์ƒ๋˜๋Š” ์ž…/์ถœ๋ ฅ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋กœ์ปฌ์˜ ๋„์ปค ํด๋ผ์ด์–ธํŠธ์—์„œ ์˜ค๊ฐ€๋Š” ๋ช…๋ น์–ด(docker ์ ‘๋‘์–ด๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ช…๋ น์–ด)๋ฅผ ๋กœ๊ทธ๋กœ ๋ชจ๋‘ ์ถœ๋ ฅํ•œ๋‹ค. ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ -D ์˜ต์…˜์„ ์ฃผ์–ด ์•„๋ž˜์ฒ˜๋Ÿผ ์‹คํ–‰ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

$ dockerd -D

 

๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ๋„์ปค ๋ฐ๋ชฌ์ด ์ž…๋ ฅ ๋Œ€๊ธฐ ์ƒํƒœ(listen)๋กœ ์‹œ์ž‘๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

dockerd -D ์˜ต์…˜์„ ์ฃผ์–ด ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰

 

์œ„ ํ‘œ์ค€์ถœ๋ ฅ์˜ ๋งˆ์ง€๋ง‰ ์ค„์„ ๋ณด๋ฉด GET์œผ๋กœ RESTFul API๋ฅผ ๋‚ ๋ฆฐ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ํ•„์ž๊ฐ€ ๋„์ปค ๋ฐ๋ชฌ์„ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•œ ํ›„, ๋‹ค๋ฅธ ์…ธ์—์„œ docker ps ๋ผ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•˜๋Š” ๋„์ปค ํด๋ผ์ด์–ธํŠธ ๋ช…๋ น์–ด๋ฅผ ๋‚ ๋ ธ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์—ฌ๊ธฐ์„œ๋„ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, docker ps๋ผ๋Š” ๋„์ปค ํด๋ผ์ด์–ธํŠธ ๋ช…๋ น์–ด๋Š” RESTFul API๋กœ ๋ฒผํ™˜ํ•˜๋ฉด /v1.42/containers/json ์ด๋ผ๋Š” URL๋กœ HTTP ํ†ต์‹ ์„ ํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

์ฐธ๊ณ ๋กœ, ๋„์ปค ๋ฐ๋ชฌ์„ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜์ ์ธ ์ฆ‰, ์„œ๋น„์Šค ๋ชจ๋“œ๋กœ ๊ตฌ๋™ํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” ์œ„์™€ ๊ฐ™์€ ๋กœ๊ทธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์—†๋‹ค. ํ•˜์ง€๋งŒ ์„œ๋น„์Šค ๋ชจ๋“œ์ผ ๋•Œ๋„ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, upstart ๊ธฐ๋ฐ˜์˜ ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” /var/log/upstart/docker.log ํŒŒ์ผ์—์„œ, systemd๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์šฐ๋ถ„ํˆฌ 16.04 ์ด์ƒ์˜ ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” jorunalctl -u docker ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.(Q. upstart linux vs systemd linux?https://fossbytes.com/systemd-vs-sys-v-vs-upstart/)

 

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๋„์ปค ๋ฐ๋ชฌ์˜ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋Š” ๋ช‡๊ฐ€์ง€ ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค. ์šฐ์„  ๋กœ๊ทธ์— ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ผญ ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ์ •๋ณด๋„ ์ถœ๋ ฅ์ด๋œ๋‹ค. ๋˜ํ•œ ์œ„ ๊ฒฐ๊ณผํ™”๋ฉด ์ฒ˜๋Ÿผ ๋„์ปค ๋ฐ๋ชฌ์„ ํฌ๊ทธ๋ผ์šด๋“œ ์žก ์ƒํƒœ๋กœ ๋ฌด์กฐ๊ฑด ๋Œ๋ ค์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์…ธ ํ•˜๋‚˜๋ฅผ ๋ฌด์กฐ๊ฑด ์ฐจ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค.

4-2. ๋„์ปค ๋ฐ๋ชฌ์˜ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ด, events, stats, system df ๋ช…๋ น์–ด

์œ„์—์„œ ์•Œ์•„๋ณธ ๋„์ปค ๋ฐ๋ชฌ์˜ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์˜ ๋‹จ์ ๋“ค์„ ๋ณด์™„ํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์ด ์กด์žฌํ•œ๋‹ค. ์šฐ์„  ๋„์ปค ๋ฐ๋ชฌ์„ ์„œ๋น„์Šค ๋ชจ๋“œ๋กœ ๊ตฌ๋™ํ•ด๋ณด์ž. ์œ„์—์„œ ์‹œ์ž‘์‹œ์ผœ๋†“์€ ๋„์ปค ๋ฐ๋ชฌ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋ฅผ ์ค‘์ง€ํ•ด์ฃผ๊ณ  ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ๋„์ปค ๋ฐ๋ชฌ์„ ์„œ๋น„์Šค ๋ชจ๋“œ๋กœ ์‹œ์ž‘์‹œ์ผœ๋ณด์ž.

 

$ service docker start

 

์ด์ œ ๋ช…๋ น์–ด ์ข…๋ฅ˜ ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด์ž. ๋จผ์ € events ๋ช…๋ น์–ด์ด๋‹ค. events ๋ช…๋ น์–ด๋Š” ๋„์ปค ๋ฐ๋ชฌ์— ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ŠคํŠธ๋ฆผ ๋กœ๊ทธ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ์•„๋ž˜ 2๊ฐœ์˜ ๋ช…๋ น์–ด ์ค‘ ํ•˜๋‚˜๋ฅผ ์ž…๋ ฅํ•ด๋ณด์ž. ์ž…๋ ฅํ•˜๊ณ  ์•„๋ฌด๋Ÿฐ ์ถœ๋ ฅ์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ •์ƒ์ ์ธ ์ƒํƒœ์ด๋‹ค. 

 

events ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ๋„์ปค ๋ฐ๋ชฌ์˜ ๋กœ๊ทธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ด€์ฐฐ

 

์ด์ œ ๋‹ค๋ฅธ ์…ธ๋กœ ๊ฐ€์„œ Ubuntu14.04 ์ด๋ฏธ์ง€๋ฅผ Pull ํ•ด๋ณด์ž. ํ˜„์žฌ ์„œ๋ฒ„์šฉ ๋ฆฌ๋ˆ…์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ํ•„์ž๋Š” tmux๋ผ๋Š” ํ„ฐ๋ฏธ๋„ ๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

 

๊ทธ๋Ÿฐ ๋‹ค์Œ events ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ–ˆ๋˜ ์…ธ๋กœ ๋Œ์•„๊ฐ€์„œ ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด์ž.

 

 

๋ณด๋ฉด ๋ฐฉ๊ธˆ ๋‹ค๋ฅธ ์…ธ์—์„œ Ubuntu:14.04 ์ด๋ฏธ์ง€๋ฅผ Pullํ•œ ๋กœ๊ทธ๊ฐ€ ๋‚จ์•„์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ events ๋ช…๋ น์–ด๋Š” ๋„์ปค ๋ฐ๋ชฌ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๋ฅผ ๋กœ๊ทธ๋กœ ์ถœ๋ ฅํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋„์ปค ํด๋ผ์ด์–ธํŠธ์˜ ๋ชจ๋“  ๋ช…๋ น์–ด๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, attach, commit, copy, create ๊ณผ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ จ ๋ช…๋ น์–ด์™€ delete, import, load, pull, push ์™€ ๊ฐ™์€ ์ด๋ฏธ์ง€ ๊ด€๋ จ ๋ช…๋ น์–ด, ๋ณผ๋ฅจ, ๋„คํŠธ์›Œํฌ, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด์˜ ์ˆ˜ํ–‰๊ฒฐ๊ณผ๋งŒ ์ถœ๋ ฅ๋œ๋‹ค.

 

๋˜ํ•œ events ๋ช…๋ น์–ด๋Š” --filter ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์„œ ์›ํ•˜๋Š” ๋กœ๊ทธ ์ •๋ณด๋งŒ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์ „์— ์ด๋ฏธ์ง€๋ฅผ ๋ฐฐ์šฐ๋ฉด์„œ --filter ์˜ต์…˜์„ ๋ฐฐ์› ๋˜ ์ ์ด ์žˆ๋‹ค. ํ˜•์‹์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉ๋˜๋ฉฐ type์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ์— ๋“ค์–ด๊ฐˆ ์ธ์ž๋กœ๋Š” container, image, volume, network, plugin, daemon์œผ๋กœ ๋‚˜๋‰œ๋‹ค. ์•„๋ž˜๋Š” events ๋ช…๋ น์–ด์— --filter ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ ์˜ˆ์‹œ์ด๋‹ค.

 

$ docker events --filter 'type=image'

 

๋‹ค์Œ์€ stats ๋ช…๋ น์–ด์ด๋‹ค. stats ๋ช…๋ น์–ด๋Š” ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ์ž์› ์‚ฌ์šฉ๋Ÿ‰์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถœ๋ ฅํ•ด์ค€๋‹ค. ํŠนํžˆ ์‹คํ–‰์ค‘์ธ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ CPU, ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ๋ฐ ์‚ฌ์šฉ๋Ÿ‰, ๋„คํŠธ์›Œํฌ ์ž…์ถœ๋ ฅ, ๋ธ”๋ก ์ž…์ถœ๋ ฅ(=ํ•˜๋“œ์›จ์–ด ์ž…์ถœ๋ ฅ) ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค. ๋งŒ์•ฝ ์‹ค์‹œ๊ฐ„์ด ์•„๋‹Œ ํ•œ ๋ฒˆ๋งŒ ์ผ์‹œ์ ์œผ๋กœ ์ถœ๋ ฅ์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด --no-stream ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

 

$ docker stats
$ docker stats --no-stream

 

์ฐธ๊ณ ๋กœ Remote API๋ฅผ ์‚ฌ์šฉํ•ด์„œ stats ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋„์ปค ํด๋ผ์ด์–ธํŠธ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด stats๋ฅผ ์“ฐ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ system df ๋ช…๋ น์–ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. system df ๋ช…๋ น์–ด๋Š” ๋„์ปค์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋ณผ๋ฅจ์˜  ์ด ๊ฐœ์ˆ˜ ๋ฐ ์‚ฌ์šฉ์ค‘์ธ ๊ฐœ์ˆ˜, ํฌ๊ธฐ, ์‚ญ์ œํ•จ์œผ๋กœ์จ ํ™•๋ณด ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค. ์‚ญ์ œํ•จ์œผ๋กœ์จ ํ™•๋ณด ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์€ RECLAIMABLE ์ด๋ผ๋Š” ํ•ญ๋ชฉ์— ํ‘œ์‹œ๋œ๋‹ค.

 

$ docker system df

4-3. ๋‹จ์ผ ๋„์ปค ํ˜ธ์ŠคํŠธ์—์„œ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•ด๋ณด๊ธฐ, CAdvisor

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

 

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ CAdvisor๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž. ๋ฆฌ๋ˆ…์Šค์—์„œ ์„ค์น˜๋ฅผ ํ•ด๋ณด๋ ค ํ–ˆ์ง€๋งŒ, ํ•„์ž๊ฐ€ ์„ค์น˜ํ•œ ๋ฆฌ๋ˆ…์Šค๋Š” ์„œ๋ฒ„์šฉ ๋ฆฌ๋ˆ…์Šค๋ผ์„œ GUI ํ™”๋ฉด์ด ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค. CAdvisor๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์ ‘์†์„ ํ•ด๋ณด๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์ž ๋…ธํŠธ๋ถ(๋งฅ๋ถ)๊ณผ ๋ฆฌ๋ˆ…์Šค CentOS๊ฐ€ ๊น”๋ ค์žˆ๋Š” VirtualBox(VM)๊ณผ ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํ•˜๊ณ , ์ด VM์•ˆ์—์„œ์˜ ํ˜ธ์ŠคํŠธ์™€ VM ์•ˆ์—์„œ ์‹คํ–‰์‹œํ‚จ CAdvisor ์ปจํ…Œ์ด๋„ˆ์™€ ํฌํŠธ ํฌ์›Œ๋”ฉ ์ฆ‰, ์ด 2๋ฒˆ์˜ ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋…ธํŠธ๋ถ๊ณผ VM ๊ฐ„์˜ ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด์ž.

 

(์ฐธ๊ณ ๋กœ ๋งฅ๋ถ ์ž์ฒด์—์„œ ์ฆ‰, Docker Desktop on Mac์—์„œ CAdvisor ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ์ƒ์„ฑ ์‹œ ๋ฐ”๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ(Exit)๋˜๋ฒ„๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ์ž๊พธ ๋ฐœ์ƒํ•ด์„œ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์•˜๋‹ค. ์ฐธ๊ณ ๋กœ ๊นƒํ—™ ์ด์Šˆ์—๋„ ์ด์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ ์ œ๊ธฐ๊ฐ€ ๋˜์—ˆ์—ˆ๋Š”๋ฐ ํ•ด๊ฒฐ๋œ ์™ธ๊ตญ์ธ ๋ถ„๋“ค..๋„ ๊ณ„์‹œ๋‹ˆ ํ˜น์‹œ๋ผ๋„ ๋””๋ฒ„๊น… ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค๋ฉด ํ•ด๋‹น ๊ธ€์„ ์ฐธ๊ณ ํ•ด๋ณด์ž)

 

๋งฅ๋ถ๊ณผ VM ๊ฐ„์˜ ํฌํŠธํฌ์›Œ๋”ฉ์„ ์™„๋ฃŒ(๋งฅ๋ถ๊ณผ VM ๊ฐ„์—๋„ 8080 ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ๊ฐœ๋ฐฉํ•จ)ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ , VM์•ˆ์˜ ๋ฆฌ๋ˆ…์Šค์—์„œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ CAdvisor ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ž. ์ƒ์„ฑ ํ›„, docker ps ๋ช…๋ น์–ด๋ฅผ ์ณค์„ ๋•Œ ์ž˜ ๋™์ž‘ ์ค‘์ด๋ฉด ์„ฑ๊ณตํ•œ ๊ฒƒ์ด๋‹ค.

 

$ docker run \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest

 

๊ทธ๋ฆฌ๊ณ  ์ด์ œ ๋งฅ๋ถ์—์„œ http://localhost:8080 URL์„ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์›น๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— CAdvisor ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

 

CAdvisor ํ™”๋ฉด

 

์œ„ ํ™”๋ฉด์—์„œ [/docker] ๋ฅผ ๋ˆŒ๋Ÿฌ๋ณด๋ฉด ๋„์ปค ๋ฐ๋ชฌ์˜ ์ •๋ณด, ์ปจํ…Œ์ด๋„ˆ์˜ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ณ  ์ด๋™ํ•œ ํŽ˜์ด์ง€ ์ดํ›„์— ๋‚˜ํƒ€๋‚˜๋Š” ์•„๋ž˜ ํ™”๋ฉด์—์„œ [Subcontainers]์— ํ•ด๋‹นํ•˜๋Š” ๋ชฉ๋ก์€ ํ˜„์žฌ VM์•ˆ์˜ ๋„์ปค ๋ฐ๋ชฌ์—์„œ ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์˜๋ฏธํ•œ๋‹ค. ์•„๋ž˜์—์„œ๋Š” 2๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰์ค‘์ธ๋ฐ, ์ด๋Š” CAdvisor๋ฅผ ์„ค์น˜ํ•˜๋ฉด์„œ ์ƒ์„ฑ๋œ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์˜๋ฏธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ํ•˜๋‚˜๋Š” ํ•„์ž๊ฐ€ ๋”ฐ๋กœ ์‹ค์Šตํ•˜๋ฉด์„œ ์ƒ์„ฑํ•œ Nginx ์ปจํ…Œ์ด๋„ˆ 1๊ฐœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

Subcontainers๋Š” ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก์„ ์˜๋ฏธ

 

ํ˜„์žฌ ํ•„์ž์˜ VM์•ˆ์˜ ๋„์ปค ๋ฐ๋ชฌ์—์„œ ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋“ค

 

์œ„ ์ •๋ณด ์ด์™ธ์— CPU ์‚ฌ์šฉ๋Ÿ‰, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, ๋„คํŠธ์›Œํฌ, ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ด€๋ จํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ๋ง ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค. ์ด๋Ÿฐ ์œ ์šฉํ•œ CAdvisor ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋„ ํ•œ๊ณ„์ ์ด ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ ํ•˜๋‚˜์˜ ํ˜ธ์ŠคํŠธ๋งŒ ๋ชจ๋‹ˆํ„ฐ๋ง์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋งŒ์•ฝ ์ถ”๊ฐ€ VM ๋จธ์‹ ์„ ํ• ๋‹น๋ฐ›์•„์„œ ๊ทธ VM ๋จธ์‹ ์—์„œ๋„ ๋„์ปค ๋ฐ๋ชฌ์„ ์‹คํ–‰์‹œํ‚ค๊ณ  ์žˆ๋‹ค๋ฉด, ํ•˜๋‚˜์˜ CAdvisor๋กœ ์ถ”๊ฐ€ํ•œ VM์˜ ๋„์ปค ๋ฐ๋ชฌ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์ด๋Ÿฐ ํ•œ๊ณ„์  ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŠธ์˜ ๋„์ปค ๋ฐ๋ชฌ์„ ๋ชจ๋‘ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋Š” Grafana ๋‚˜ Prometheus ๋“ฑ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

5. Python Remote API ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ docker-py๋ฅผ ์ด์šฉํ•ด ๋„์ปค ์‚ฌ์šฉํ•˜๊ธฐ

์ด๋ฒˆ ๋ชฉ์ฐจ์—์„œ๋Š” [๋ชฉ์ฐจ 3-1]์—์„œ ์ž ์‹œ ์–ธ๊ธ‰ํ•œ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์˜ ๋„์ปค ๋ฐ๋ชฌ์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด Remote API๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด ๋•Œ ํŠน์ • ์–ธ์–ด๋กœ ๋ฐ”์ธ๋”ฉ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด์ž. ์—ฌ๊ธฐ์—์„œ๋Š” Python์œผ๋กœ ๋ฐ”์ธ๋”ฉ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

 

์œ„์—์„œ Remote API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์˜ ๋„์ปค ๋ฐ๋ชฌ์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•จ์ด๋ผ๊ณ  ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ผญ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์˜ ๋„์ปค ๋ฐ๋ชฌ ์ด์šฉ์ด ๋ชฉ์ ์ด ์•„๋‹ˆ๋”๋ผ๋„ ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…์ด ๋งŽ๊ฑฐ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดˆ๊ธฐํ™” ๋“ฑ ๋ณต์žกํ•œ ๊ณผ์ •์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด ํŠน์ • ์–ธ์–ด๋กœ ๋ฐ”์ธ๋”ฉ๋œ Remote API ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•˜๊ธฐ๋„ ํ•˜๋‹ค.  ๋ฐ”์ธ๋”ฉ ์ง€์›์ด ๋˜๋Š” ์–ธ์–ด๋กœ๋Š” Go, C#, C++, Python, Dart, PHP, Java ๋“ฑ์ด ์žˆ๋‹ค. 

 

Python์œผ๋กœ Remote API๋ฅผ ์ด์šฉํ•˜๋ ค๋ฉด ์ผ๋‹จ Python ๋ฒ„์ „์ด 3.0 ์ด์ƒ์ด์–ด์•ผ ํ•œ๋‹ค. Python Remote API ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ด๋ฆ„์€ docker-py ์ด๋‹ค. docker-py๋Š” pip์„ ์ด์šฉํ•ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์šฐ์„  ๋ฆฌ๋ˆ…์Šค์— ๋จผ์ € pip ์„ค์น˜ ํ›„, docker-py ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด๋ณด์ž.

 

$ yum install epel-release -y
$ yum install python3-pip -y
$ pip3 install docker

 

์ด์ œ docker-py๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฆฌ๋ˆ…์Šค์—์„œ python3 ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์—ด๊ณ  ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅ์‹œ์ผœ์„œ ๋„์ปค ์—”์ง„์˜ ์ •๋ณด๋ฅผ ์ถœ๋ ฅ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

$ python3
>>> import docker
>>> client = docker.DockerClient(base_url="unix://var/run/docker.sock")
>>> client.info()

 

๊ทธ๋Ÿผ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋กœ, docker-py๋ฅผ ์ด์šฉํ•ด์„œ Nginx ์ปจํ…Œ์ด๋„ˆ๋ฅผ Detached ์ƒํƒœ๋กœ ์‹คํ–‰ํ•˜๋Š”๋ฐ, ํ˜ธ์ŠคํŠธ์˜ 80/tcp ํฌํŠธ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์˜ 80๋ฒˆ ํฌํŠธ์— ๋ฐ”์ธ๋”ฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž. ์•„๋ž˜์™€ ๊ฐ™์€ main.py ํŒŒ์ผ์„ ํ•˜๋‚˜ ์ž‘์„ฑํ•˜๊ณ  python3 main.py ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋ณด์ž.

 

# docker-py.py
import docker

client = docker.DockerClient(base_url="unix://var/run/docker.sock")
container = client.containers.run('nginx', detach=True, ports={'80/tcp': 80})

print("Created container info:", container.name, container.id)

 

ํ•„์ž๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค. docker-py๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋“ค์„ ๋” ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ์—ฌ๊ธฐ ๋ฌธ์„œ๋„ ์ฐธ๊ณ ํ•ด๋ณด๋„๋ก ํ•˜์ž.

 

main.py ํŒŒ์ผ ์‹คํ–‰์˜ ๊ฒฐ๊ณผ


์ด๋ ‡๊ฒŒ ๊นŒ์ง€ ํ•ด์„œ ๋„์ปค ๋ฐ๋ชฌ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ ๋ฐฐ์›Œ๋ณด์•˜๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŒ…์—๋Š” ๋„์ปค ์Šค์›œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

๋ฐ˜์‘ํ˜•