๐ŸŽ“๋„์ปค(Docker)์˜ ๊ธฐ์ดˆ

study 2025๋…„ 5์›” 11์ผ

๋„์ปค(Docker)์˜ ๊ธฐ์ดˆ: ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ  ์ดํ•ดํ•˜๊ธฐ

1. ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ”„๋กœ์„ธ์Šค ์ดํ•ดํ•˜๊ธฐ

1.1. ํ”„๋กœ๊ทธ๋žจ

  • ์ •์˜: ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ •์ ์ธ ์ฝ”๋“œ ์ง‘ํ•ฉ์œผ๋กœ, ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ ๋ช…๋ น์–ด๋“ค์˜ ๋ชจ์Œ
  • ์˜ˆ์‹œ: .exe, .py, .jar ๋“ฑ์˜ ํŒŒ์ผ

1.2. ํ”„๋กœ์„ธ์Šค

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

2. ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ๊ด€๊ณ„

2.1. ํ”„๋กœ์„ธ์Šค ํŠน์ง•

  • ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ, ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๊ณผ ์ž์›์„ ๊ฐ€์ง
  • ์„œ๋กœ ๊ฐ„์„ญํ•˜์ง€ ์•Š๊ณ  ๋ณ‘๋ ฌ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•จ
  • ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋จ

2.2. ์Šค๋ ˆ๋“œ ํŠน์ง•

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

3. ๋ฆฌ๋ˆ…์Šค์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค(Namespace)

๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„์ด ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๊ฒฉ๋ฆฌ๋œ ์ž์› ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ (์˜ˆ: Docker)์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

3.1. ์ฃผ์š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ข…๋ฅ˜

๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฒฉ๋ฆฌ ๋Œ€์ƒ์„ค๋ช…
mntํŒŒ์ผ ์‹œ์Šคํ…œ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋งˆ์šดํŠธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
pidํ”„๋กœ์„ธ์Šค ID๊ฒฉ๋ฆฌ๋œ PID ๋ฒˆํ˜ธ ๊ณต๊ฐ„ ์ œ๊ณต (์˜ˆ: ์ปจํ…Œ์ด๋„ˆ ๋‚ด PID 1)
net๋„คํŠธ์›Œํฌ๋…๋ฆฝ๋œ ๋„คํŠธ์›Œํฌ ์žฅ์น˜, IP, ํฌํŠธ ๋“ฑ์„ ์‚ฌ์šฉ
utsํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๋“ฑhostname ๋ฐ domainname ๊ฒฉ๋ฆฌ
ipcIPC ์ž์›๋ฉ”์‹œ์ง€ ํ, ์„ธ๋งˆํฌ์–ด ๋“ฑ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ์ž์› ๋ถ„๋ฆฌ
user์‚ฌ์šฉ์ž/๊ถŒํ•œUID, GID ๋“ฑ ์‚ฌ์šฉ์ž ์ •๋ณด ๊ฒฉ๋ฆฌ
cgroup๋ฆฌ์†Œ์Šค ์ œ์–ด ๊ทธ๋ฃนCPU, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ ์ž์› ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œ (์™„์ „ํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ์•„๋‹˜)
๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๋ฆฌ๋ˆ…์Šค ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์—์„œ ์ž์› ๊ฒฉ๋ฆฌ๋ฅผ ์œ„ํ•œ ํ•ต์‹ฌ ๊ธฐ์ˆ ๋กœ ํ™œ์šฉ๋˜๋ฉฐ, unshareclonesetns ๊ฐ™์€ ์‹œ์Šคํ…œ ์ฝœ๋กœ ์ƒ์„ฑ/์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ๋„์ปค(Docker)์˜ ์ดํ•ด

4.1. ๋„์ปค์˜ ์—ฐํ˜

4.2. ๋„์ปค์˜ ์ •์˜

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

4.3. ๋„์ปค์˜ ํ•„์š”์„ฑ

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

4.4. ๋„์ปค ์ปจํ…Œ์ด๋„ˆ(Docker Container)๋ž€?

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

5. ๊ฐ€์ƒํ™”์˜ ์œ ํ˜•

5.1. ํ˜ธ์ŠคํŠธ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™” (Hosted Virtualization)

๊ธฐ์กด OS ์œ„์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ˜•ํƒœ๋กœ ํ•˜์ดํผ๋ฐ”์ด์ €๋ฅผ ์„ค์น˜ํ•˜์—ฌ ๊ฐ€์ƒ ๋จธ์‹ ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: VirtualBox, VMware Workstation
  • ํ˜ธ์ŠคํŠธ OS๊ฐ€ ๋จผ์ € ๋ถ€ํŒ…๋˜๊ณ , ๊ทธ ์œ„์—์„œ ํ•˜์ดํผ๋ฐ”์ด์ € ์‹คํ–‰
  • ์„ค์น˜/์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•˜์ง€๋งŒ, ์„ฑ๋Šฅ์€ ๋‹ค์†Œ ๋‚ฎ์Œ

๐Ÿ“Œ ํŠน์ง•:

  • ์‚ฌ์šฉ์ž ์นœํ™”์ 
  • ์ผ๋ฐ˜ ๋ฐ์Šคํฌํƒ‘ ํ™˜๊ฒฝ์— ์ ํ•ฉ
  • ๊ฐ€์ƒํ™” ๊ณ„์ธต์ด ๊นŠ์–ด ์„ฑ๋Šฅ ์†์‹ค ์กด์žฌ

5.2. ํ•˜์ดํผ๋ฐ”์ด์ € ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™” (Bare-metal Virtualization)

ํ•˜๋“œ์›จ์–ด ์œ„์— ์ง์ ‘ ํ•˜์ดํผ๋ฐ”์ด์ €๋ฅผ ์„ค์น˜ํ•˜์—ฌ ๊ฐ€์ƒ ๋จธ์‹ ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: VMware ESXi, Microsoft Hyper-V, KVM
  • ๋ณ„๋„์˜ ํ˜ธ์ŠคํŠธ OS ์—†์Œ โ†’ ์„ฑ๋Šฅ ์šฐ์ˆ˜
  • ์„œ๋ฒ„ ๊ฐ€์ƒํ™” ๋ฐ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ

๐Ÿ“Œ ํŠน์ง•:

  • ๊ณ ์„ฑ๋Šฅ, ๊ณ ํšจ์œจ
  • ๋ฆฌ์†Œ์Šค ์ง์ ‘ ์ œ์–ด ๊ฐ€๋Šฅ
  • ์šด์˜ ๋ณต์žก๋„ ์žˆ์Œ

5.3. ์ปจํ…Œ์ด๋„ˆ ๊ฐ€์ƒํ™” (Container Virtualization)

์ปค๋„์„ ๊ณต์œ ํ•˜๋ฉด์„œ ํ”„๋กœ์„ธ์Šค ์ˆ˜์ค€์—์„œ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๊ฒฉ๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: Docker, Podman, containerd
  • ์šด์˜์ฒด์ œ ์ˆ˜์ค€ ๊ฐ€์ƒํ™” (Namespace + cgroup ๊ธฐ๋ฐ˜)
  • VM๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ€๋ณ๊ณ  ๋น ๋ฆ„

๐Ÿ“Œ ํŠน์ง•:

  • ๋น ๋ฅธ ์‹คํ–‰ ์†๋„, ๊ฒฝ๋Ÿ‰ํ™”
  • ๊ฐ™์€ ์ปค๋„์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ๋ณด์•ˆ ๊ฒฉ๋ฆฌ๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ์•ฝํ•จ
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ฐ CI/CD์— ์ ํ•ฉ

5.4. ๊ฐ€์ƒํ™” ์œ ํ˜• ๋น„๊ต

ํ•ญ๋ชฉํ˜ธ์ŠคํŠธ ๊ธฐ๋ฐ˜ํ•˜์ดํผ๋ฐ”์ด์ € ๊ธฐ๋ฐ˜์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜
์‹คํ–‰ ์œ„์น˜OS ์œ„ํ•˜๋“œ์›จ์–ด ์œ„OS ์œ„
์„ฑ๋Šฅ๋‚ฎ์Œ๋†’์Œ๋งค์šฐ ๋†’์Œ
๊ฒฉ๋ฆฌ ์ˆ˜์ค€๋†’์Œ๋งค์šฐ ๋†’์Œ์ค‘๊ฐ„
์ž์› ํšจ์œจ๋‚ฎ์Œ์ค‘๊ฐ„๋งค์šฐ ๋†’์Œ
์‚ฌ์šฉ ์˜ˆ๊ฐœ์ธ ๊ฐœ๋ฐœ, ์‹ค์Šตํด๋ผ์šฐ๋“œ, ์„œ๋ฒ„ ๊ฐ€์ƒํ™”DevOps, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค

6. ๋„์ปค ๊ตฌ์„ฑ ์š”์†Œ

๋„์ปค๋Š” ์—ฌ๋Ÿฌ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ ์š”์†Œ๋Š” ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์„ ์œ„ํ•œ ํŠน์ • ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

6.1. ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

  • dockerd (Docker Daemon):
    • ๋„์ปค์˜ ํ•ต์‹ฌ ํ”„๋กœ์„ธ์Šค๋กœ, ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ, ์‹คํ–‰, ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๋‹ด๋‹น
    • ์‚ฌ์šฉ์ž ๋ช…๋ น์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ฒ„ ์—ญํ•  ์ˆ˜ํ–‰
    • REST API๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ 
  • containerd:
    • ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ๋ชฌ
    • ์ด๋ฏธ์ง€ ์ „์†ก, ์••์ถ• ํ•ด์ œ, ๊ด€๋ฆฌ ๋‹ด๋‹น
    • ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰, ๊ฐ๋…, ๋„คํŠธ์›Œํ‚น ์„ค์ • ๊ด€๋ฆฌ
    • ๋„์ปค์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณ ์ˆ˜์ค€ ๋Ÿฐํƒ€์ž„
  • libcontainer:
    • ์ €์ˆ˜์ค€ ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ๋ฆฌ๋ˆ…์Šค ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ cgroup์„ ํ™œ์šฉํ•˜์—ฌ ์‹ค์ œ ์ปจํ…Œ์ด๋„ˆ ๊ฒฉ๋ฆฌ ๊ตฌํ˜„
    • ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰์— ํ•„์š”ํ•œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์ฒ˜๋ฆฌ

6.2. ๊ธฐํƒ€ ์ค‘์š” ๊ตฌ์„ฑ ์š”์†Œ

  • Docker CLI: ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ธํ„ฐํŽ˜์ด์Šค
  • Docker API: ๋„์ปค ๊ธฐ๋Šฅ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” API
  • Docker Registry: ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š” ์ €์žฅ์†Œ (์˜ˆ: Docker Hub)
  • Docker Compose: ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ตฌ์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •์˜/์‹คํ–‰ ๋„๊ตฌ
๋„์ปค์˜ ์•„ํ‚คํ…์ฒ˜๋Š” ๊ณ„์ธตํ™”๋˜์–ด ์žˆ์–ด ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํŠน์ • ์ฑ…์ž„์„ ๊ฐ–๊ณ  ์„œ๋กœ ํ˜‘๋ ฅํ•˜๋ฉฐ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ์‹ ๊ตฌ์กฐ๋Š” ๋„์ปค๊ฐ€ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์œ ์—ฐํ•˜๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

7. ๋„์ปค ์ž‘๋™ ๋ฐฉ์‹

7.1. ๋„์ปค ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ์š”์†Œ

๐Ÿ“ฆ ๋„์ปค ํด๋ผ์ด์–ธํŠธ (Docker Client)

  • ์‚ฌ์šฉ์ž์™€ ๋„์ปค ์‹œ์Šคํ…œ ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค.
  • docker builddocker pulldocker run ๋“ฑ ๋ช…๋ น์–ด ์ž…๋ ฅ ์ง€์ .
  • ๋ช…๋ น์–ด๋ฅผ REST API ํ˜•ํƒœ๋กœ ๋„์ปค ํ˜ธ์ŠคํŠธ(Docker Daemon)์— ์ „๋‹ฌ.

โš™๏ธ ๋„์ปค ํ˜ธ์ŠคํŠธ (Docker Host / Docker Daemon)

  • ๋„์ปค ์—”์ง„(Docker Engine)์ด ๋™์ž‘ํ•˜๋Š” ์‹œ์Šคํ…œ.
  • ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ, ์ด๋ฏธ์ง€ ๊ด€๋ฆฌ, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ ๊ด€๋ฆฌ ๋“ฑ ์‹ค์ œ ์ž‘์—… ์ˆ˜ํ–‰.
  • ํด๋ผ์ด์–ธํŠธ ๋ช…๋ น์„ ๋ฐ›์•„ ์ปจํ…Œ์ด๋„ˆ ๋ฐ ์ด๋ฏธ์ง€ ๊ด€๋ฆฌ.

๐Ÿ—ƒ๏ธ ๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ (Docker Registry)

  • ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ. ๋Œ€ํ‘œ์ ์œผ๋กœ Docker Hub.
  • ๊ฐœ์ธ ๋˜๋Š” ๊ณต์šฉ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์šด์˜ ๊ฐ€๋Šฅ (์˜ˆ: GitHub Container Registry, AWS ECR ๋“ฑ).
  • pushpull ๋ช…๋ น์„ ํ†ตํ•ด ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋ฐ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅ.

7.2. ์ฃผ์š” ๋ช…๋ น์–ด ์‹คํ–‰ ํ๋ฆ„

๐Ÿ”จ docker build

๋กœ์ปฌ Dockerfile๋กœ๋ถ€ํ„ฐ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •
  1. ๋„์ปค ํด๋ผ์ด์–ธํŠธ๊ฐ€ docker build ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.
  2. ๋„์ปค ํ˜ธ์ŠคํŠธ๋Š” Dockerfile์„ ์ฝ๊ณ  ๋‹จ๊ณ„๋ณ„๋กœ ๋ ˆ์ด์–ด(layer) ๋ฅผ ๋งŒ๋“ค์–ด ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ.
  3. ๊ฐ ๋ช…๋ น์–ด(EXPOSE, COPY, RUN ๋“ฑ)๋Š” ์ด๋ฏธ์ง€์˜ ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด๋กœ ์ €์žฅ๋จ.
  4. ์ด๋ฏธ์ง€ ์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ๋กœ์ปฌ ์ด๋ฏธ์ง€ ์บ์‹œ์— ์ €์žฅ๋จ.
  5. (์„ ํƒ) docker push๋กœ ๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์—…๋กœ๋“œ ๊ฐ€๋Šฅ.

๐Ÿ“Œ ์˜ˆ์‹œ:

docker build -t myapp:latest .

โฌ‡๏ธ docker pull

๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ
  1. ๋„์ปค ํด๋ผ์ด์–ธํŠธ๊ฐ€ docker pull ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.
  2. ๋„์ปค ํ˜ธ์ŠคํŠธ๋Š” ์ง€์ •๋œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ(Docker Hub ๋“ฑ)์™€ ํ†ต์‹ .
  3. ์š”์ฒญ๋œ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„, ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋“ค์„ ๋‹ค์šด๋กœ๋“œ.
  4. ๋‹ค์šด๋กœ๋“œ๋œ ์ด๋ฏธ์ง€๋Š” ๋กœ์ปฌ ์บ์‹œ์— ์ €์žฅ๋จ.

๐Ÿ“Œ ์˜ˆ์‹œ:

docker pull nginx:latest

๐Ÿš€ docker run

์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
  1. ๋„์ปค ํด๋ผ์ด์–ธํŠธ๊ฐ€ docker run ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.
  2. ๋„์ปค ํ˜ธ์ŠคํŠธ๋Š” ๋กœ์ปฌ์— ํ•ด๋‹น ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ:
    • ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ pull ์ˆ˜ํ–‰.
  3. ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ๊ธฐ ์ „์šฉ ๋ ˆ์ด์–ด ์ƒ์„ฑ.
  4. ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด๋ฅผ ์œ„์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ.
  5. ์ง€์ •๋œ ๋ช…๋ น์–ด(CMD, ENTRYPOINT ๋“ฑ)๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ๋™.

๐Ÿ“Œ ์˜ˆ์‹œ:

docker run -d -p 8080:80 nginx:latest

7.3. ๊ด€๊ณ„ ์š”์•ฝ

[ Docker Client ]
       |
       v
REST API ๋ช…๋ น ์ „๋‹ฌ
       |
[ Docker Host (Docker Daemon) ]
   |         |          |
   |       Build      Run
   |         |          |
   v         v          v
[ Local Images ]   [ Running Containers ]
       |
       v
Pull/Push Image
       |
[ Docker Registry (e.g., Docker Hub) ]

8.๋„์ปค ์ด๋ฏธ์ง€ ๊ตฌ์กฐ

8.1. ์ด๋ฏธ์ง€ ์ธ๋ฑ์Šค(Image Index)

  • ๋ฉ€ํ‹ฐ ์•„ํ‚คํ…์ฒ˜ ์ด๋ฏธ์ง€๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์œ„ ์ˆ˜์ค€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ
  • ๋‹ค์–‘ํ•œ OS/์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ํ•œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ชฉ๋ก์„ ํฌํ•จ
  • ํŠน์ • ํ™˜๊ฒฝ์— ๋งž๋Š” ์ ์ ˆํ•œ ์ด๋ฏธ์ง€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
  • ์ด๋ฏธ์ง€ ํƒœ๊ทธ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹ค์ œ ๋Œ€์ƒ์ด๋ฉฐ, ์—ฌ๋Ÿฌ ์•„ํ‚คํ…์ฒ˜์šฉ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ชฉ๋ก์„ ๊ด€๋ฆฌ

8.2. ์ด๋ฏธ์ง€ ๋งค๋‹ˆํŽ˜์ŠคํŠธ(Image Manifest)

  • ์ด๋ฏธ์ง€ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํฌํ•จ
  • ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ:
    • ์ด๋ฏธ์ง€ ์„ค์ •(config): ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ํ™˜๊ฒฝ, ๋ช…๋ น์–ด, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋“ฑ ์ •์˜
    • ๋ ˆ์ด์–ด(layers): ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ๋ ˆ์ด์–ด์˜ ๋‹ค์ด์ œ์ŠคํŠธ ์ฐธ์กฐ
    • ๋ฏธ๋””์–ด ํƒ€์ž…(mediaType): ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํ˜•์‹ ์ •์˜
  • ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ ˆ์ด์–ด์™€ ์„ค์ • ์ •๋ณด ์ œ๊ณต
  • OCI(Open Container Initiative) ํ‘œ์ค€ ํ˜•์‹ ์‚ฌ์šฉ

8.3. ๋ ˆ์ด์–ด(Layer)

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

8.4. ๊ด€๊ณ„

  1. ์ด๋ฏธ์ง€ ํƒœ๊ทธ โ†’ ์ด๋ฏธ์ง€ ์ธ๋ฑ์Šค ์ฐธ์กฐ
  2. ์ด๋ฏธ์ง€ ์ธ๋ฑ์Šค โ†’ ์—ฌ๋Ÿฌ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์ฐธ์กฐ
  3. ๋งค๋‹ˆํŽ˜์ŠคํŠธ โ†’ ์„ค์ • ํŒŒ์ผ๊ณผ ๋ ˆ์ด์–ด ์ฐธ์กฐ
  4. ๋ ˆ์ด์–ด๋“ค โ†’ ์‹ค์ œ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋‚ด์šฉ ์ €์žฅ

์ด๋Ÿฌํ•œ ๊ณ„์ธต์  ๊ตฌ์กฐ๋Š” ๋„์ปค์˜ ํšจ์œจ์ ์ธ ์ด๋ฏธ์ง€ ๋ฐฐํฌ, ์ €์žฅ, ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

ํƒœ๊ทธ