Docker - ChoDragon9/posts GitHub Wiki

๋„์ปค๋ž€ ๋ฌด์—‡์ธ๊ฐ€

์ฐธ๊ณ ์ž๋ฃŒ

ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜๊ณ  ํฌํŠธ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์„œ๋กœ ๋‹ค๋ฅธ ์„œ๋ฒ„๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—…์€ ๊ณ ๊ธ‰ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์„ฌ์„ธํ•œ ์ž‘์—…์ด ํ•„์š”ํ•œ ์˜์—ญ์ด๋‹ค. ํ•˜์ง€๋งŒ Docker์˜ ๋“ฑ์žฅ์œผ๋กœ ์„œ๋ฒ„๊ด€๋ฆฌ ๋ฐฉ์‹์ด ์™„์ „ํžˆ ๋ฐ”๋€Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋„์ปค๋ž€

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

์ปจํ…Œ์ด๋„ˆ

๊ฒฉ๋ฆฌ๋œ ๊ณต๊ฐ„์—์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์˜ ํ•˜๋‚˜์ง€๋งŒ ๊ธฐ์กด ๋ฐฉ์‹๊ณผ๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

๊ธฐ์กด์˜ ๊ฐ€์ƒํ™” ๋ฐฉ์‹์€ ์ฃผ๋กœ OS ๊ฐ€์ƒํ™”๋ฅผ ํ•˜์˜€๋‹ค. VMWare๋‚˜ VirtualBox๊ฐ™์€ ๊ฐ€์ƒ๋จธ์‹ ์€ ํ˜ธ์ŠคํŠธ OS์œ„์— ๊ฒŒ์ŠคํŠธ OS ์ „์ฒด๋ฅผ ๊ฐ€์ƒํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ OS๋ฅผ ๊ฐ€์ƒํ™” ํ•  ์ˆ˜ ์žˆ๊ณ  ๋น„๊ต์  ์‚ฌ์šฉ๋ฒ•์ด ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๋ฌด๊ฒ๊ณ  ๋Š๋ ค์„œ ์šด์˜ํ™˜๊ฒฝ์—์„  ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด CPU์˜ ๊ฐ€์ƒํ™” ๊ธฐ์ˆ ์„ ์ด์šฉํ•œ KVM(Kernal-based Virtual Machine)๊ณผ ๋ฐ˜๊ฐ€์ƒํ™”(Paravitualization) ๋ฐฉ์‹์˜ Xen์ด ๋“ฑ์žฅํ–ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๊ฒŒ์ŠคํŠธ OS๊ฐ€ ํ•„์š”ํ•˜๊ธด ํ•˜์ง€๋งŒ ์ „์ฒด OS๋ฅผ ๊ฐ€์ƒํ™”ํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ์˜€๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ŠคํŠธํ˜• ๊ฐ€์ƒํ™” ๋ฐฉ์‹์— ๋น„ํ•ด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ๋“ค์€ OpenStack์ด๋‚˜ AWS, Rackspace๊ฐ™์€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์—์„œ ๊ฐ€์ƒ ์ปดํ“จํŒ… ๊ธฐ์ˆ ์˜ ๊ธฐ๋ฐ˜์ด ๋˜์—ˆ๋‹ค.

์ „๊ฐ€์ƒํ™”๋“  ๋ฐ˜๊ฐ€์ƒํ™”๋“  ์ถ”๊ฐ€์ ์ธ OS๋ฅผ ์„ค์น˜ํ•˜์—ฌ ๊ฐ€์ƒํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์–ด์จ‹๋“  ์„ฑ๋Šฅ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๋“ฑ์žฅํ•œ๋‹ค.

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

ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์„œ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ณ  ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด ๋งˆ์น˜ ๊ฐ€๋ฒผ์šด Virtual Machine์„ ์‚ฌ์šฉํ•˜๋Š” ๋Š๋‚Œ์„ ์ค€๋‹ค. ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์— ์ ‘์†ํ•˜์—ฌ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๊ณ  apt-get์ด๋‚˜ yum์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ž๋„ ์ถ”๊ฐ€ํ•˜๊ณ  ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๊ณ  ํ˜ธ์ŠคํŠธ์˜ ํŠน์ • ํฌํŠธ์™€ ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ํ˜ธ์ŠคํŠธ์˜ ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋‚ด๋ถ€ ๋””๋ ‰ํ† ๋ฆฌ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฏธ์ง€

๋„์ปค์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…์€ ์ปจํ…Œ์ด๋„ˆ์™€ ํ•จ๊ป˜ ์ด๋ฏธ์ง€๋ผ๋Š” ๊ฐœ๋…์ด๋‹ค.

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

ubuntu ์ด๋ฏธ์ง€๋Š” ubuntu๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  MySQL์ด๋ฏธ์ง€๋Š” debian์„ ๊ธฐ๋ฐ˜์œผ๋กœ MySQL์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํŒŒ์ผ๊ณผ ์‹คํ–‰ ๋ช…๋ น์–ด, ํฌํŠธ ์ •๋ณด๋“ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ข€ ๋” ๋ณต์žกํ•œ ์˜ˆ๋กœ Gitlab ์ด๋ฏธ์ง€๋Š” centOS๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ruby, go, database, redis, gitlab source, nginx ๋“ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

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

๋„์ปค ์ด๋ฏธ์ง€๋Š” Docker hub์— ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜ Docker Registry ์ €์žฅ์†Œ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ ˆ์ด์–ด ์ €์žฅ๋ฐฉ์‹

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

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

ubuntu ์ด๋ฏธ์ง€๊ฐ€ A + B + C์˜ ์ง‘ํ•ฉ์ด๋ผ๋ฉด, ubuntu ์ด๋ฏธ์ง€๋ฅผ ๋ฒ ์ด์Šค๋กœ ๋งŒ๋“  nginx ์ด๋ฏธ์ง€๋Š” A + B + C + nginx๊ฐ€ ๋œ๋‹ค. webapp ์ด๋ฏธ์ง€๋ฅผ nginx ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด ์˜ˆ์ƒ๋Œ€๋กœ A + B + C + nginx + source ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. webapp ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด A, B, C, nginx ๋ ˆ์ด์–ด๋ฅผ ์ œ์™ธํ•œ ์ƒˆ๋กœ์šด source(v2) ๋ ˆ์ด์–ด๋งŒ ๋‹ค์šด๋ฐ›์œผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ต‰์žฅํžˆ ํšจ์œจ์ ์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ฐ€์ƒํ™”์˜ ํŠน์„ฑ์ƒ ์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰์ด ํฌ๊ณ  ์—ฌ๋Ÿฌ๋Œ€์˜ ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ๊ฐ์•ˆํ•˜๋ฉด ๋‹จ์ˆœํ•˜์ง€๋งŒ ์—„์ฒญ๋‚˜๊ฒŒ ์˜๋ฆฌํ•œ ์„ค๊ณ„์ด๋‹ค.

์ด๋ฏธ์ง€ ๊ฒฝ๋กœ

์ด๋ฏธ์ง€๋Š” url ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ ํƒœ๊ทธ๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค. ubuntu 14.04 ์ด๋ฏธ์ง€๋Š” docker.io/library/ubuntu:14.04 ๋˜๋Š” docker.io/library/ubuntu:trusty์ด๊ณ  docker.io/library๋Š” ์ƒ๋žต๊ฐ€๋Šฅํ•˜์—ฌ ubuntu:14.04๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํƒœ๊ทธ ๊ธฐ๋Šฅ์„ ์ž˜ ์ด์šฉํ•˜๋ฉด ํ…Œ์ŠคํŠธ๋‚˜ ๋กค๋ฐฑ๋„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋„์ปค ์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ธฐ

Dockerfile

DSL(Domain-Specific Language): ํŠน์ •ํ•œ ๋„๋ฉ˜์ผ์„ ์ ์šฉํ•˜๋Š”๋ฐ ํŠนํ™”๋œ ์ปดํ“จํ„ฐ ์–ธ์–ด

๋„์ปค๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Dockerfile์ด๋ผ๋Š” ํŒŒ์ผ์— ์ž์ฒด DSL(Domain-specific language) ์–ธ์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๊ณผ์ •์„ ์ ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜์ง€๋งŒ ์œ ์šฉํ•œ ์•„์ด๋””์–ด์ธ๋ฐ, ์„œ๋ฒ„์— ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜๋ ค๊ณ  ์ด๊ฒƒ์ €๊ฒƒ ์˜์กด์„ฑ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์„ค์ •ํŒŒ์ผ์„ ๋งŒ๋“ค์—ˆ๋˜ ๊ณผ์ •์„ Dockerfile๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ๋œ๋‹ค. ์ด ํŒŒ์ผ์€ ์†Œ์Šค์™€ ํ•จ๊ป˜ ๋ฒ„์ „ ๊ด€๋ฆฌ๋˜๊ณ  ์›ํ•œ๋‹ค๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ด๋ฏธ์ง€ ์ƒ์„ฑ๊ณผ์ •์„ ๋ณด๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

# vertx/vertx3 debian version
FROM subicura/vertx3:3.3.1
MAINTAINER [email protected]

ADD build/distributions/app-3.3.1.tar /
ADD config.template.json /app-3.3.1/bin/config.json
ADD docker/script/start.sh /usr/local/bin/
RUN ln -s /usr/local/bin/start.sh /start.sh

EXPOSE 8080
EXPOSE 7000

CMD ["start.sh"]

๋„์ปค ์„ค์น˜ ๋ฐ ์‹คํ–‰

์ฐธ๊ณ ์ž๋ฃŒ

์ปจํ…Œ์ด๋„ˆ ์—…๋ฐ์ดํŠธ

  1. ์ƒˆ ๋ฒ„์ „์˜ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด
    • docker pull
  2. ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
    • docker stop
    • docker rm
  3. ์ƒˆ ๋ฒ„์ „์˜ ์ด๋ฏธ์ง€ ์‹คํ–‰
    • docker run

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ƒ์„ฑ๋œ ํŒŒ์ผ์ด ์‚ฌ๋ผ์ง„๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ์‹œ ์œ ์ง€ํ•ด์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋ฐ˜๋“œ์‹œ ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•˜๊ธฐ

๋„์ปค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

-p ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํ˜ธ์ŠคํŠธ์˜ 1234ํฌํŠธ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์˜ 6379ํฌํŠธ๋กœ ์—ฐ๊ฒฐํ•˜์˜€๊ณ , localhost:1234๋กœ ์ ‘์†ํ•˜๋ฉด redis๋ฅผ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

docker run -p 1234:6379 redis

์ด๋ฏธ์ง€ ๋งŒ๋“ค๊ณ  ๋ฐฐํฌํ•˜๊ธฐ

์ฐธ๊ณ ์ž๋ฃŒ

๋„์ปค๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Dockerfile์ด๋ผ๋Š” ์ด๋ฏธ์ง€ ๋นŒ๋“œ์šฉ DSL(Domain Specific Language)ํŒŒ์ผ์„ ์‚ฌ์šฉํ•œ๋‹ค.

Ruby ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ubuntu์— ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ • ์˜ˆ์ œ

  1. ubuntu ์„ค์น˜
  2. ruby ์„ค์น˜
  3. ์†Œ์Šค ๋ณต์‚ฌ
  4. Gen ํŒจํ‚ค์ง€ ์„ค์น˜
  5. Sinatra ์„œ๋ฒ„ ์‹คํ–‰
์‰˜ ์Šคํฌ๋ฆฝํŠธ ์˜ˆ์ œ
# 1. ubuntu ์„ค์น˜ (ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ)
apt-get update

# 2. ruby ์„ค์น˜
apt-get install ruby
gem install bundler

# 3. ์†Œ์Šค ๋ณต์‚ฌ
mkdir -p /usr/src/app
scp Gemfile app.rb root@ubuntu:/usr/src/app  # From host

# 4. Gem ํŒจํ‚ค์ง€ ์„ค์น˜
bundle install

# 5. Sinatra ์„œ๋ฒ„ ์‹คํ–‰
bundle exec ruby app.rb
Dockerfile๋กœ ๊ณผ์ •์„ ์˜ฎ๊ธด ์˜ˆ์ œ
# 1. ubuntu ์„ค์น˜ (ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ + ๋งŒ๋“ ์‚ฌ๋žŒ ํ‘œ์‹œ)
FROM       ubuntu:16.04
MAINTAINER [email protected]
RUN        apt-get -y update

# 2. ruby ์„ค์น˜
RUN apt-get -y install ruby
RUN gem install bundler

# 3. ์†Œ์Šค ๋ณต์‚ฌ
COPY . /usr/src/app

# 4. Gem ํŒจํ‚ค์ง€ ์„ค์น˜ (์‹คํ–‰ ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •)
WORKDIR /usr/src/app
RUN     bundle install

# 5. Sinatra ์„œ๋ฒ„ ์‹คํ–‰ (Listen ํฌํŠธ ์ •์˜)
EXPOSE 4567
CMD    bundle exec ruby app.rb -o 0.0.0.0

Docker build

์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

docker build [OPTIONS] PATH | URL

์ƒ์„ฑํ•  ์ด๋ฏธ์ง€ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” -t(--tag) ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋นŒ๋“œ ๊ฐ€๋Šฅํ•˜๋‹ค. Dockerfile์„ ๋งŒ๋“  ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

docker build -t app .

์ด๋ฏธ์ง€๊ฐ€ ์ž˜ ์ƒ์„ฑ๋ฌ๋Š” ์ง€ ํ™•์ธํ•˜๋ ค๋ฉด docker images ๋ช…๋ น์–ด๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋ฏธ์ง€ ์ €์žฅ์†Œ

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

๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ์˜คํ”ˆ์†Œ์Šค๋กœ ๋ฌด๋ฃŒ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ณ  ์„ค์น˜ํ˜•์ด ์‹ซ๋‹ค๋ฉด ๋„์ปค(Docker Inc.)์—์„œ ์„œ๋น„์Šค ์ค‘์ธ ๋„์ปค ํ—ˆ๋ธŒ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Docker Hub

๋„์ปค ํ—ˆ๋ธŒ๋Š” ๋„์ปค์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ๋กœ ubuntu, centos, debian๋“ฑ์˜ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€์™€ ruby, golang, java, python ๋“ฑ์˜ ๊ณต์‹ ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.

์ด๋ฏธ์ง€ ํƒœ๊ทธ

๋„์ปค ์ด๋ฏธ์ง€ ์ด๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

[Registry URL]/[์‚ฌ์šฉ์ž ID]/[์ด๋ฏธ์ง€๋ช…]:[tag]

Registry URL์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋„์ปค ํ—ˆ๋ธŒ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๊ณ  ์‚ฌ์šฉ์ž ID๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์ธ library๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ubuntu = library/ubuntu = docker.io/library/ubuntu๋Š” ๋ชจ๋‘ ๋™์ผํ•œ ํ‘œํ˜„์ด๋‹ค.

๋ณด์•ˆ

๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์ธ HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์ „์†กํ•œ๋‹ค. ๋”ฐ๋ผ์„œ SSL(HTTPS)์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ด๋ฏธ์ง€ ๋‚ด์šฉ์ด ์œ ์ถœ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๋ณด์•ˆ ์ด์Šˆ ๋•Œ๋ฌธ์— ๋„์ปค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ์ปฌ ์„œ๋ฒ„๋ฅผ ์ œ์™ธํ•˜๊ณค HTTP ์‚ฌ์šฉ์„ ๊ธˆ์ง€ํ•˜๊ณ  ์žˆ๋‹ค.

๋ฐฐํฌํ•˜๊ธฐ

๊ธฐ์กด ๋ฐฐํฌ ๋ฐฉ์‹

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

ftp, ant, gradle, capistrano ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฐํฌํˆด์ด ์ €๋งˆ๋‹ค์˜ ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ๋“ฑ์žฅํ•˜์˜€๊ณ  ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์‹์„ ํ•˜๋‚˜๋กœ ์ •์˜ํ•œ๋‹ค๋Š” ๊ฑด ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ ๋ฐฉ์‹

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์–ธ์–ด, ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์“ฐ๋“  ์ƒ๊ด€์—†์ด ๋ฐฐํฌ ๊ณผ์ •์ด ๋‹จ์ˆœํ•ด ์ง„๋‹ค. ๋‹จ์ˆœํžˆ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋ฐ›๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ์—…๋ฐ์ดํŠธ

๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ์‹๋„ ๋ฐฐํฌ์™€ ํฐ ์ฐจ์ด๊ฐ€ ์—†๋‹ค. ์ตœ์‹  ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด์ „ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€(์‚ญ์ œ)ํ•˜๋ฉด ๋œ๋‹ค. ์ตœ์‹  ์†Œ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณต์‚ฌํ• ์ง€ ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋Š” ์–ด๋–ป๊ฒŒ ์žฌ์‹œ์ž‘ํ• ์ง€ ๊ณ ๋ฏผํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

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