Skip to main content

01A. Docker

About 1 minDevOpsDockercrashcoursepyrasis.comdockerdevops

01A. Docker ๊ด€๋ จ

๋ชฉ์ฐจ

์–ธ์ œ๋‚˜ ์ตœ์‹  Docker

1์žฅ - 1. ๊ฐ€์ƒ ๋จธ์‹ ๊ณผ Docker
์–ธ์ œ๋‚˜ ์ตœ์‹  Docker

Docker๋Š” ์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉํ•ด์™”๋˜ VMware, Microsoft Hyper-V, Xen, ๋ฆฌ๋ˆ…์Šค KVM ๋“ฑ์˜ ๊ฐ€์ƒ ๋จธ์‹ ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์ƒ ๋จธ์‹ ์— ๋ฆฌ๋ˆ…์Šค๋ฅผ ์„ค์น˜ํ•œ ๋’ค ๊ฐ์ข… ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ๊ณผ DB๋ฅผ ์„ค์น˜ํ•˜๊ณ , ๊ฐœ๋ฐœํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์›น์‚ฌ์ดํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ตฌ์ถ•ํ•œ ๊ฐ€์ƒ ๋จธ์‹  ์ด๋ฏธ์ง€๋ฅผ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ณต์‚ฌํ•ด์„œ ์‹คํ–‰ํ•˜๋ฉด ์ด๋ฏธ์ง€ ํ•˜๋‚˜๋กœ ์„œ๋ฒ„๋ฅผ ๊ณ„์† ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ณดํ†ต ๊ฐ€์ƒ ๋จธ์‹  ์„œ๋ฒ„๋ฅผ ๋…์ž์ ์œผ๋กœ ์šด์˜ํ•˜๊ฑฐ๋‚˜, ์„œ๋น„์Šค ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜๋Š” Amazon Web Services, Microsoft Azure, Google Cloud Platform์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.


๊ฐ€์ƒ ๋จธ์‹ 

๊ฐ€์ƒ ๋จธ์‹ ์€ ํŽธํ•˜๊ธด ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ๋ชปํ•œ ๊ฒƒ์ด ๋‹จ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ CPU์— ๊ฐ€์ƒํ™”๋ฅผ ์œ„ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ๋งŽ์ด ์ถ”๊ฐ€๋˜์—ˆ์ง€๋งŒ ์•„์ง๋„ ๊ฐ€์ƒ ๋จธ์‹ ์€ ๋ฆฌ์–ผ ๋จธ์‹ ์— ๋น„ํ•ด ์†๋„๊ฐ€ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

์ „๊ฐ€์ƒํ™”(Full Virtualization)์˜ ๋Š๋ฆฐ ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๊ฐ€์ƒํ™”(Paravirtualization) ๋ฐฉ์‹์ด ๊ฐœ๋ฐœ๋˜์—ˆ๊ณ , ํ˜„์žฌ ๋„๋ฆฌ ์“ฐ์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ „๊ฐ€์ƒํ™”์™€ ๋ฐ˜๊ฐ€์ƒํ™”
์ „๊ฐ€์ƒํ™”์™€ ๋ฐ˜๊ฐ€์ƒํ™”

๊ฐ€์ƒ ๋จธ์‹  ์ž์ฒด๋Š” ์™„์ „ํ•œ ์ปดํ“จํ„ฐ๋ผ ํ•ญ์ƒ ๊ฒŒ์ŠคํŠธ OS๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฏธ์ง€ ์•ˆ์— OS๊ฐ€ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰์ด ์ปค์ง‘๋‹ˆ๋‹ค.

๊ฐ€์ƒ ๋จธ์‹  ๊ณ„์ธต๋„ (์ถœ์ฒ˜: <FontIcon icon="fa-brands fa-docker"/>https://www.docker.com/resources/what-container/)
๊ฐ€์ƒ ๋จธ์‹  ๊ณ„์ธต๋„ (์ถœ์ฒ˜: https://www.docker.com/resources/what-container/open in new window)

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

๊ฐ€์ƒ ๋จธ์‹  ๋ฐฐํฌ

๊ฐ€์ƒ ๋จธ์‹ ์„ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ์ƒ์šฉ ์ œํ’ˆ์€ VMware vCenter, Microsoft System Center๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


Docker

Docker๋Š” ๋ฐ˜๊ฐ€์ƒํ™”๋ณด๋‹ค ์ข€๋” ๊ฒฝ๋Ÿ‰ํ™”๋œ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆผ 1-6์™€ ๊ฐ™์ด ๊ฒŒ์ŠคํŠธ OS๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Docker ์ด๋ฏธ์ง€์— ์„œ๋ฒ„ ์šด์˜์„ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ๊ฒฉ๋ฆฌํ•ด์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ณ , OS ์ž์›(์‹œ์Šคํ…œ ์ฝœ)์€ ํ˜ธ์ŠคํŠธ์™€ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด์„œ ์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰์ด ํฌ๊ฒŒ ์ค„์–ด๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

Docker ๊ณ„์ธต๋„ (์ถœ์ฒ˜: <FontIcon icon="fa-brands fa-docker"/>https://www.docker.com/resources/what-container/)
Docker ๊ณ„์ธต๋„ (์ถœ์ฒ˜: https://www.docker.com/resources/what-container/open in new window)

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

์„ฑ๋Šฅ ์ธก์ • ๋„๊ตฌํ˜ธ์ŠคํŠธDocker
CPUsysbench10.9937
๋ฉ”๋ชจ๋ฆฌ ์“ฐ๊ธฐsysbench10.9913
๋ฉ”๋ชจ๋ฆฌ ์ฝ๊ธฐsysbench10.9987
๋””์Šคํฌ I/Odd10.9921
๋„คํŠธ์›Œํฌiperf10.9893

Docker 20.10.17์—์„œ ์šฐ๋ถ„ํˆฌ 22.04 ํ˜ธ์ŠคํŠธ์™€ ์šฐ๋ถ„ํˆฌ 22.04 Docker ์ปจํ…Œ์ด๋„ˆ ์„ฑ๋Šฅ ์ธก์ •

Docker๋Š” ๊ฐ€์ƒ ๋จธ์‹ ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์ด๋ฏธ์ง€ ์ƒ์„ฑ๊ณผ ๋ฐฐํฌ์— ํŠนํ™”๋œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Git์—์„œ ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ด๋ฏธ์ง€ ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ค‘์•™ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ €์žฅ์†Œ์— ์ด๋ฏธ์ง€๋ฅผ ์˜ฌ๋ฆฌ๊ณ , ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(Push/Pull). ๊ทธ๋ฆฌ๊ณ  GitHub์ฒ˜๋Ÿผ Docker ์ด๋ฏธ์ง€๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” Docker Hub๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(GitHub์ฒ˜๋Ÿผ ์œ ๋ฃŒ ๊ฐœ์ธ ์ €์žฅ์†Œ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค).

๋‹ค์–‘ํ•œ API๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๋งŒํผ ์ž๋™ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ๊ณผ ์„œ๋ฒ„ ์šด์˜์— ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


๋ฆฌ๋ˆ…์Šค ์ปจํ…Œ์ด๋„ˆ

์˜ค๋ž˜ ์ „๋ถ€ํ„ฐ ๋ฆฌ๋ˆ…์Šค/์œ ๋‹‰์Šค ํ™˜๊ฒฝ์€ chroot๋ผ๋Š” ๋ช…๋ น์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. chroot๋Š” ํŒŒ์ผ์‹œ์Šคํ…œ์—์„œ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ(/)๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…๋ น์ž…๋‹ˆ๋‹ค. chroot๋กœ ํŠน์ • ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์„ค์ •ํ•˜๋ฉด chroot jail(๊ฐ์˜ฅ)์ด๋ผ๋Š” ํ™˜๊ฒฝ์ด ์ƒ์„ฑ๋˜๋Š”๋ฐ, chroot jail์•ˆ์—์„œ๋Š” ๋ฐ”๊นฅ์˜ ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ chroot๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ์ •๋ณด ์œ ์ถœ๊ณผ ํ”ผํ•ด๋ฅผ ์ตœ์†Œํ™” ํ•˜๋Š”๋ฐ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

chroot์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ
chroot์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ

chroot๋Š” chroot jail์— ๋“ค์–ด๊ฐˆ ์‹คํ–‰ ํŒŒ์ผ๊ณผ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง์ ‘ ์ค€๋น„ํ•ด์•ผ ํ•˜๊ณ  ์„ค์ • ๋ฐฉ๋ฒ•์ด ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์™„๋ฒฝํ•œ ๊ฐ€์ƒ ํ™˜๊ฒฝ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ข… ์ œ์•ฝ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ์ดํ›„ ๋ฆฌ๋ˆ…์Šค๋Š” LXC(LinuX Container)๋ผ๋Š” ์‹œ์Šคํ…œ ๋ ˆ๋ฒจ ๊ฐ€์ƒํ™”๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

LXC๋Š” ์ปดํ“จํ„ฐ๋ฅผ ํ†ต์งธ๋กœ ๊ฐ€์ƒํ™”ํ•˜์—ฌ OS๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋ ˆ๋ฒจ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ผ์ข…์˜ ๊ฒฉ๋ฆฌ(Isolate)๋œ ๊ฐ€์ƒ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ€์ƒ ๊ณต๊ฐ„์—๋Š” OS๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์ƒ ๋จธ์‹ ์ด๋ผ ํ•˜์ง€ ์•Š๊ณ , ์ปจํ…Œ์ด๋„ˆ๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค ์ปค๋„์˜ Control Groups(cgroups)๋Š” CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ, ๋„คํŠธ์›Œํฌ ์ž์›์„ ํ• ๋‹นํ•˜์—ฌ ์™„์ „ํ•œ ํ˜•ํƒœ์˜ ๊ฐ€์ƒ ๊ณต๊ฐ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ”„๋กœ์„ธ์Šค ํŠธ๋ฆฌ, ์‚ฌ์šฉ์ž ๊ณ„์ •, ํŒŒ์ผ์‹œ์Šคํ…œ, IPC ๋“ฑ์„ ๊ฒฉ๋ฆฌ์‹œ์ผœ ํ˜ธ์ŠคํŠธ์™€ ๋ณ„๊ฐœ์˜ ๊ณต๊ฐ„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ Namespace isolation(namespaces)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

LXC๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„์˜ cgroups์™€ namespaces ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ€์ƒ ๊ณต๊ฐ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

LXC์˜ ๊ตฌ์กฐ
LXC์˜ ๊ตฌ์กฐ

LXC๋Š” ๊ฒฉ๋ฆฌ๋œ ๊ณต๊ฐ„๋งŒ ์ œ๊ณตํ•  ๋ฟ ๊ฐœ๋ฐœ ๋ฐ ์„œ๋ฒ„ ์šด์˜์— ํ•„์š”ํ•œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์ด ๋ถ€์กฑํ–ˆ์Šต๋‹ˆ๋‹ค. Docker๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„์˜ cgroups์™€ namespaces๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ๊ณผ ๋‹ค์–‘ํ•œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Docker๊ฐ€ ์ฒ˜์Œ ๊ฐœ๋ฐœ๋  ๋‹น์‹œ์—๋Š” LXC๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„์„ ํ•˜์˜€์ง€๋งŒ ์ตœ๊ทผ๋ถ€ํ„ฐ๋Š” Containerd(runC)๋ฅผ ๊ฐœ๋ฐœํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Docker Engine๊ณผ Containerd(์ถœ์ฒ˜: <FontIcon icon="fa-brands fa-docker"/>https://www.docker.com/products/container-runtime/)
Docker Engine๊ณผ Containerd(์ถœ์ฒ˜: https://www.docker.com/products/container-runtime/open in new window)

์ด์ฐฌํฌ (MarkiiimarK)
Never Stop Learning.