๐Ÿฅž BE
home

Docker

Intro

Docker๋ž€?

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

์ปจํ…Œ์ด๋„ˆ์™€ ๋„์ปค ์—”์ง„

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

์ด๋ฏธ์ง€

์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋„์ปค ์—”์ง„ ์™ธ์—๋„ ์ปจํ…Œ์ด๋„ˆ์˜ ๋นตํ‹€๊ณผ๋„ ๊ฐ™์€ ์—ญํ• ์„ ํ•  ์ด๋ฏธ์ง€๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด๋ฏธ์ง€๋Š” ์ข…๋ฅ˜๊ฐ€ ์•„์ฃผ ๋งŽ์œผ๋ฉฐ, ๋‹ด๊ณ  ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์•„ํŒŒ์น˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์•„ํŒŒ์น˜ ์ด๋ฏธ์ง€๋ฅผ, MySQL ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด MySQL ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๋„์ปค์™€ ๋ฆฌ๋ˆ…์Šค

๋„์ปค๋Š” ๋ฐ˜๋“œ์‹œ ๋ฆฌ๋ˆ…์Šค ์šด์˜์ฒด์ œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋„์ปค๋ฅผ ์œˆ๋„์šฐ๋‚˜ MacOS์—์„œ ์‚ฌ์šฉํ•  ๋•Œ๋„, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๋ฆฌ๋ˆ…์Šค๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์ธ ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด๋Š” ๋ฐ˜๋“œ์‹œ ์ˆ™์ง€ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.

๋„์ปค๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ด์œ 

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

VM๊ณผ Container

Virtual Machine

โ€ข
AWS์˜ EC2๊ฐ€ ๋Œ€ํ‘œ์ ์ธ Virtual Machine (VM)
โ€ข
ํ•˜๋“œ์›จ์–ด๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ํ•œ ์ปดํ“จํ„ฐ ์œ„์— ๊ฐ€์ƒ ์ปดํ“จํ„ฐ๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ
โ€ข
Virtual Machines
โ—ฆ
๋ณดํ†ต ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ ์œ„์— ๋‹ค์ˆ˜์˜ VM์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 
โ—ฆ
์ด ์•ˆ์—์„œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋™์ž‘
โ€ข
VM์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด: VMWare, VirtualBox, Hyper-v, โ€ฆ

VM์˜ ์žฅ๋‹จ์ 

โ€ข
์žฅ์ 
โ—ฆ
์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋…๋ฆฝ์ ์ด๊ณ  ๋ถ„๋ฆฌ๋œ ๊ณต๊ฐ„์„ ์ œ๊ณต
โ—ฆ
๋‹ค์ˆ˜์˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐ VM๋‹จ์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๊ฐ€๋Šฅ
โ€ข
๋‹จ์ 
โ—ฆ
๊ฐ VM์€ ์ž์‹ ๋งŒ์˜ OS๋ฅผ ํ•„์š”๋กœ ํ•จ (๊ฐ€์ƒ ํ•˜๋“œ์›จ์–ด ์œ„์—์„œ ๋Œ๊ธฐ ๋•Œ๋ฌธ)
โ–ช
์œ ๋ฃŒ OS๋ผ๋ฉด ๋ผ์ด์„ผ์Šค ๋น„์šฉ ํ•„์š”
โ–ช
๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ์‹œ์ž‘ํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆผ
โ—ฆ
์ž์›์„ ๋งŽ์ด ์‚ฌ์šฉํ•จ (VM๋“ค๋ผ๋ฆฌ ์ž์›์„ ๋‚˜๋ˆ ์จ์•ผํ•จ)

Docker Container

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

Container์˜ ์žฅ๋‹จ์ 

โ€ข
์žฅ์ 
โ—ฆ
์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋…๋ฆฝ์ ์ด๊ณ  ๋ถ„๋ฆฌ๋œ ๊ณต๊ฐ„์„ ์ œ๊ณต
โ–ช
๋‹ค์ˆ˜์˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋‹จ์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๊ฐ€๋Šฅ
โ—ฆ
์ž์› ์†Œ๋น„๊ฐ€ ์ ์Œ (lightweight)
โ–ช
๋ช‡ ์‹ญ๊ฐœ์—์„œ ๋ช‡ ๋ฐฑ๊ฐœ์˜ container๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅ
โ—ฆ
ํ˜ธ์ŠคํŠธ OS๋ฅผ ์‚ฌ์šฉ (๋ณ„๋„ ๋น„์šฉ ์—†์Œ)
โ–ช
๋”ฐ๋ผ์„œ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋จ
โ€ข
๋‹จ์ 
โ—ฆ
๋งŽ์€ ์ˆ˜์˜ Docker Container๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์Œ
โ–ช
์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์ด ํ•„์š” (k8s, Docker swarm ๋“ฑ๋“ฑ)
โ—ฆ
Host OS๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— Cross-platform compatibility๋ฅผ ํ•ญ์ƒ ์ง€์›ํ•˜์ง€ ์•Š์Œ
โ—ฆ
GUI ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ์ ํ•ฉ์น˜ ์•Š์Œ
โ€ข
Virtual Machine๊ณผ (Docker)Containers ๋น„๊ต
VM
Docker
Host OS
๋…ผ๋ฆฌ์  ๊ฐ€์ƒํ™” (์™„์ „ ๋ถ„๋ฆฌ)
- Kernal ๊ณต์œ  (ํ”„๋กœ์„ธ์Šค ๊ณต์œ ) - Container ๋‚ด์—์„œ ๋ช…๋ น์–ด ์‹คํ–‰์‹œ ์‹ค์ œ๋กœ๋Š” Host OS์—์„œ ์‹คํ–‰
Guest OS
ํ’€ ์„ค์น˜
Host OS์™€ ๋น„๊ตํ•ด์„œ ๋‹ค๋ฅธ ๋ถ€๋ถ„๋งŒ Packing
OS ์ง€์›
๋ชจ๋‘ ์ง€์›
Linux ๊ธฐ๋ฐ˜์˜ OS๋งŒ ์ง€์›
์žฅ์ 
- ํ•ดํ‚น ๋˜๋”๋ผ๋„ ๋‹ค๋ฅธ ๊ฐ€์ƒ๋จธ์‹ ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Œ
- ์‹œ์Šคํ…œ ์ž์›์˜ ํšจ์œจ์  ์‚ฌ์šฉ - ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
๋‹จ์ 
- ์‹œ์Šคํ…œ ํ™•์žฅ์‹œ ์ž์›์˜ ๋‚ญ๋น„ - ํŠธ๋ž˜ํ”ฝ์— ๋”ฐ๋ฅธ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๊ฐ€ ์œ ์—ฐํ•˜์ง€ ๋ชปํ•จ
- Host OS๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Host ๊ถŒํ•œ์ด ํ•ดํ‚น๋œ๋‹ค๋ฉด ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋“ค๋„ ์œ„ํ—˜ํ•จ
๋„์ปค๋Š” ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋“ค๊ฐ„์˜ ํ˜ธ์ŠคํŠธ ์ž์›์„ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด์ค€๋‹ค. ์ด๊ฒƒ์€ ๋ฆฌ๋ˆ…์Šค ๊ณ ์œ ๊ธฐ์ˆ ์ธ name space์™€ cgroup๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฉ๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์‹œ์Šคํ…œ ๊ตฌ์กฐ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•œ OS๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ตฌ์กฐ์ด๊ณ  VM์€ ๊ฐ๊ฐ์˜ OS๋ฅผ ๋„์›Œ์•ผํ•˜๋Š” ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋น ๋ฅด๋‹ค.
VM์€ ์‚ฌ์šฉ์ž๊ฐ€ ์œˆ๋„์šฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋”๋ผ๋„ ์ƒˆ๋กœ์šด Guest OS๋ฅผ ์„ค์น˜ํ•  ๋•Œ ๋ฆฌ๋ˆ…์Šค OS๋ฅผ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ฆฌ๋ˆ…์Šค OS์—์„œ ์œˆ๋„์šฐ์šฉ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

๋„์ปค ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค

ํ•˜์ด๋ ˆ๋ฒจ Docker ์‚ฌ์šฉ ํ”„๋กœ์„ธ์Šค

โ€ข
๋จผ์ € ๋Œ€์ƒ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ ํƒ
โ€ข
๋‹ค์ˆ˜์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ผ๋ฉด ๊ฐ๊ฐ์ด Docker Image๋กœ ๋งŒ๋“ค์–ด์ ธ์•ผํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
โ€ข
์ด๋ฅผ Docker Image๋กœ ๋นŒ๋“œํ•˜์ž: Dockerization์ด๋ผ๊ณ  ๋ถ€๋ฆ„
โ—ฆ
Dockerfile์ด๋ž€ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๊ธฐ์ˆ 
โ–ช
ํ•ด๋‹น ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ด๋ฏธ์ง€๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•œ Docker์—๊ฒŒ ์ฃผ๋Š” ๋ช…๋ น๋“ค์„ ํฌํ•จ
โ—ฆ
Docker Image: ํ•˜๋‚˜์˜ Docker Container์•ˆ์—์„œ ์‹คํ–‰๋จ!
โ–ช
Dockerfile์„ ๊ธฐ์ค€์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉฐ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จ
โ€ข
docker build -t tag ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•จ.

Docker Image

Docker Image์˜ ๊ตฌ์„ฑ ์š”์†Œ

โ€ข
๊ธฐ๋ณธ OS (๋ฆฌ๋ˆ…์Šค๋ผ๋ฉด ์šฐ๋ถ„ํˆฌ, ๋ฐ๋น„์•ˆ ๋“ฑ๋“ฑ)์™€ ๊ฐ™์€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์‹คํ–‰ํ™˜๊ฒฝ
โ€ข
์†Œํ”„ํŠธ์›จ์–ด ์ž์ฒด (์ฝ”๋“œ)
โ€ข
์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
โ€ข
ํŒŒ์ผ ์‹œ์Šคํ…œ ์Šค๋ƒ…์ƒท: ์ด๋Š” ์Šคํƒํ™”๋œ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋จ (๋’ค์—์„œ ๋” ์„ค๋ช…)
โ€ข
ํ™˜๊ฒฝ ์„ค์ • ๋ณ€์ˆ˜: ๋นŒ๋“œํ•  ๋•Œ ๋ณ€์ˆ˜์™€ ์‹คํ–‰ ๋•Œ ๋ณ€์ˆ˜ ๋‘ ๊ฐ€์ง€๊ฐ€ ์กด์žฌ
โ—ฆ
ENV, ARG
โ€ข
๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ: ์ด๋ฏธ์ง€ ์ž์ฒด์— ๋Œ€ํ•œ ์ •๋ณด (๋ฒ„์ „, ์ž‘์„ฑ์ž, ์„ค๋ช… ๋“ฑ๋“ฑ)
์œ„ ์ •๋ณด์™€ ์„ค์น˜ ๊ด€๋ จ ์‹คํ–‰ ์ˆœ์„œ๋“ฑ์ด Dockerfile์— ๊ธฐ์ˆ ๋จ
Docker Image๋Š” ๋‹ค์ˆ˜์˜ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋จ (โ€œdocker image lsโ€)

Docker Image์˜ ์‹คํ–‰

โ€ข
Container๋ฅผ ํ†ตํ•ด Docker Image์•ˆ์˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰
โ—ฆ
Container๋Š” ์ž์ฒด ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๊ฐ€์ง„ ํŠน์ˆ˜ํ•œ ํ”„๋กœ์„ธ์Šค๋กœ ์ด๋ฏธ์ง€์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๋กœ๋”ฉ๋จ
โ€ข
Image๋ฅผ Container ์•ˆ์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์–ด
โ—ฆ
docker run โ€ฆ : ์ด๋ฏธ์ง€๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋„์šฐ๋Š” ๊ฒƒ
โ—ฆ
docker exec : ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์— ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ

Docker Image์˜ ๋“ฑ๋ก : Docker Hub

โ€ข
Docker Registry๋Š” Docker Image๋“ค์˜ ๋ณด๊ด€์†Œ
โ—ฆ
On-prem registry์™€ Cloud registry๊ฐ€ ์กด์žฌ
โ—ฆ
docker hub์ด ๊ฐ€์žฅ ์œ ๋ช…
โ€ข
์—ฌ๊ธฐ์— ๋“ฑ๋ก์„ ํ•˜๋ฉด ํšŒ์‚ฌ๋‚ด ํ˜น์€ ํผ๋ธ”๋ฆญํ•˜๊ฒŒ ์ด๋ฏธ์ง€๋ฅผ ๊ณต์œ  ๊ฐ€๋Šฅ

Docker Hub๋ž€?

โ€ข
Docker๊ฐ€ ์ œ๊ณตํ•ด์ฃผ๋Š” ์„œ๋น„์Šค๋กœ Docker Image๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์ฐพ๊ธฐ ์œ„ํ•œ ์„œ๋น„์Šค
โ€ข
Teams & Organizations
โ€ข
Public๊ณผ Private Repo ์ œ๊ณต
โ€ข
Official Images
โ€ข
Github๊ณผ ์—ฐ๋™์„ ํ†ตํ•œ Automated Build ์ œ๊ณต

์ปจํ…Œ์ด๋„ˆ ์‹ค์Šต

์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ, ์‹คํ–‰, ์ƒํƒœ ํ™•์ธ, ์ข…๋ฃŒ, ์‚ญ์ œ

โ€ข
์‹ค์Šต๋‚ด์šฉ
์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰ โ†’ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ™•์ธ โ†’ ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ โ†’ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ™•์ธ โ†’ ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ โ†’ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ™•์ธ
โ€ข
์ƒ์„ฑํ•  ์ปจํ…Œ์ด๋„ˆ์˜ ์ •๋ณด
ํ•ญ๋ชฉ
๊ฐ’
์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„
apa000ex1
์ด๋ฏธ์ง€ ์ด๋ฆ„
httpd
โ€ข
์ปค๋งจ๋“œ์—์„œ ์‚ฌ์šฉํ•  ์˜ต์…˜, ๋Œ€์ƒ, ์ธ์ž
ํ•ญ๋ชฉ
๋‚ด์šฉ
--name apa000ex1
apa000ex1 ์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ
-d
๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰
httpd
์•„ํŒŒ์น˜์˜ ์ด๋ฏธ์ง€ ์ด๋ฆ„. ๋ฒ„์ „์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ์ตœ์‹ ๋ฒ„์ „(latest)์ด ์‚ฌ์šฉ๋œ๋‹ค.
1.
์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰
์•„ํŒŒ์น˜ ์ด๋ฏธ์ง€(httpd)๋ฅผ ์‚ฌ์šฉํ•ด apa000ex1 ์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅ.
์ฒ˜์Œ ์‹คํ–‰ํ•˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋‚ด๋ ค๋ฐ›๊ฒŒ ๋˜๋ฏ€๋กœ ์‹คํ–‰์— ์กฐ๊ธˆ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
docker run --name apa000ex1 -d httpd
Bash
๋ณต์‚ฌ
2.
์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ
ps ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. STATUS ํ•ญ๋ชฉ์˜ ๊ฐ’์ด โ€˜Upโ€™์ด๋ผ๊ณ  ๋‚˜์˜ค๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋ผ๋Š” ๋œป์ด๋‹ค.
docker ps
Bash
๋ณต์‚ฌ
3.
์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ
stop ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.
docker stop apa000ex1
Bash
๋ณต์‚ฌ
4.
์ข…๋ฃŒ ํ™•์ธ
docker ps
Bash
๋ณต์‚ฌ
5.
์ปจํ…Œ์ด๋„ˆ์˜ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ
์ปจํ…Œ์ด๋„ˆ์˜ STATUS ํ•ญ๋ชฉ์ด โ€˜Exitedโ€™๋ผ๊ณ  ๋‚˜์˜ค๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์กด์žฌํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์ข…๋ฃŒ๋œ ์ƒํƒœ๋ผ๋Š” ๋œป์ด๋‹ค.
docker ps -a
Bash
๋ณต์‚ฌ
์ œ์ผ ์œ„์ชฝ์— apa000ex1 ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
6.
์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
rm ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•ด๋ณด์ž.
docker rm apa000ex1
Bash
๋ณต์‚ฌ
์ด๋ฆ„ ๋ง๊ณ ๋„ ์ปจํ…Œ์ด๋„ˆ ID๋ฅผ ์ž…๋ ฅํ•ด๋„ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ญ์ œ๋œ๋‹ค. ๋‚˜์ค‘์— ์ค‘๋ณต๋œ ์ด๋ฆ„์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ์ปจํ…Œ์ด๋„ˆ ID๋กœ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœ
7.
์‚ญ์ œ ํ™•์ธ
docker ps -a
Bash
๋ณต์‚ฌ

๊ฐ„๋‹จํ•œ Hello World ํ”„๋กœ๊ทธ๋žจ ์‹ค์Šต์„ ํ†ตํ•œ Dockerfile ์ž‘์„ฑ

ํ”„๋กœ์„ธ์Šค ์š”์•ฝ

โ€ข
cd node
โ—ฆ
OS ์„ ํƒ
โ—ฆ
Node ์„ค์น˜
โ—ฆ
์ฝ”๋“œ ๋ณต์‚ฌ
โ—ฆ
ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ (node app.js)

Dockerfile์˜ ์ƒ์„ฑ

FROM node:alpine COPY ./app WORKDIR /app CMD node app.js
Docker
๋ณต์‚ฌ
์ด์™ธ์—๋„ ARG, ENV, USER, EXPOSE, RUN ๋“ฑ์˜ ๋ช…๋ น ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ์Œ.

Docker Image ์ƒ์„ฑ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ

โ€ข
Mac OS (Apple M1 ์ด์ƒ)
โ—ฆ
docker build --platform linux/amd64 -t hello-world-docker .
โ€ข
Windows, MacOS (Intel)
โ—ฆ
docker build -t hello-world-docker .
docker build -t hello-world-docker .
Bash
๋ณต์‚ฌ
โ€ข
Docker Image ํ™•์ธ
docker image ls
Bash
๋ณต์‚ฌ
โ€ข
Docker Conatiner๋กœ ์‹คํ–‰
$ docker run hello-world-docker # Hello run์œผ๋กœ Dockerfile์—์„œ CMD ๋ช…๋ น์ด ์‹คํ–‰๋จ. >> Hello Docker!
Plain Text
๋ณต์‚ฌ

Docker HUB ๋“ฑ๋ก

Docker Registry์— ๋“ฑ๋ก
1.
Docker Hub ํšŒ์›๋“ฑ๋ก
โ€ข
๋จผ์ € Docker Hub์— ํšŒ์› ๋“ฑ๋ก: https://hub.docker.com/
โ—ฆ
ID์™€ Password๋ฅผ ๊ธฐ์–ตํ•ด๋‘˜ ๊ฒƒ
2.
hello-world-docker repo ๋งŒ๋“ค๊ธฐ
โ€ข
Create repository ์„ ํƒ
โ€ข
์ด๋ฆ„์„ โ€œhello-world-dockerโ€๋กœ ์ง€์ •. Public ์†์„ฑ ์ง€์ •:
โ—ฆ
hajun/hello-world-docker
3.
Docker Registry์— ๋“ฑ๋ก
โ€ข
ํ„ฐ๋ฏธ๋„๋กœ ์ด๋™ํ•˜์—ฌ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰
โ€ข
๋จผ์ € ํ˜„์žฌ ์ด๋ฏธ์ง€์˜ repo ์ด๋ฆ„์„ geonoo/hello-world-docker๋กœ ๋ณ€๊ฒฝ
$ docker image ls $ docker tag hello-world-docker:latest geonoo/hello-world-docker:latest $ docker image ls $ docker login --username=geonoo >> ๋ณ„๋„์˜ ํ”„๋กฌํ”„ํŠธ๋กœ ๋ฌผ์–ด๋ด…๋‹ˆ๋‹ค. $ docker push geonoo/hello-world-docker
SQL
๋ณต์‚ฌ
4.
Docker Hub์—์„œ ๊ฒฐ๊ณผ ํ™•์ธ

Reference

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