Sam Baek, The Dev's Corner

๐Ÿšข Docker ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์˜ ํ•ต์‹ฌ

02 Jul 2023

Docker๋ž€ ๋ฌด์—‡์ด๋ฉฐ ์ปจํ…Œ์ด๋„ˆ๋ž€ ๋ฌด์—‡์ธ๊ฐ€


๊ฐœ๋ฐœ์„ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋ฉด ์—ฌ๊ธฐ์ €๊ธฐ Docker๋ผ๋Š” ๋‹จ์–ด์— ๋Œ€ํ•ด ๋ณด๊ฒŒ ๋œ๋‹ค.
์ž๋ฐ”์™€ ํŒŒ์ด์ฌ์„ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋‹ˆ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ด€์‹ฌ์ด ์ƒ๊ธฐ๊ณ  ์˜๋ฌธ์ด ์ƒ๊ธฐ๊ฒŒ ๋œ Docker์— ๋Œ€ํ•ด ๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ณต๋ถ€ํ•˜๊ณ  ์ •๋ฆฌํ•˜๊ณ ์ž ๊ธ€์„ ์ž‘์„ฑํ•œ๋‹ค.

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜

๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ ์•ž์„œ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ฐœ๋ฐœ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์„œ๋น„์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

Docker๋ž€ ๋ฌด์—‡์ธ๊ฐ€ ?

Docker๋Š” ์ปจํ…Œ์ด๋„ˆํ™” ๊ธฐ์ˆ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”Œ๋žซํผ์ด๋‹ค.
์ปจํ…Œ์ด๋„ˆ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์†Œํ”„ํŠธ์›จ์–ด์™€ ์ข…์†์„ฑ์„ ํฌํ•จํ•œ ๋…๋ฆฝ์  ์‹คํ–‰ ํ™˜๊ฒฝ์ด๋‹ค.

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

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

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

Docker์˜ ํ•ต์‹ฌ ๊ฐœ๋…์€ ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ ๊ทธ๋ฆฌ๊ณ  ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋‹ค. ๋ฌผ๋ก  ๋” ๊ณต๋ถ€ํ•ด์•ผํ•  ๊ฒƒ์ด ๋งŽ์•„๋ณด์ด์ง€๋งŒโ€ฆ ๊ฐœ๋ก ์œผ๋กœ..

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

์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฏธ์ง€์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ์•ž์„œ ์ˆ˜์ฐจ๋ก€ ์–ธ๊ธ‰์ฒ˜๋Ÿผ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ๊ณผ ๋…๋ฆฝ๋˜์–ด์žˆ๊ณ , ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์™€๋„ ๋ถ„๋ฆฌ๋˜์–ด ์ž‘๋™ํ•œ๋‹ค.

๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” Docker ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์•™ ์ €์žฅ์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๊ฐ€์žฅ ์ž˜ ์•Œ๋ ค์ง„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” Docker Hub์ด๊ณ ,
๊ณต๊ฐœ ์ด๋ฏธ์ง€์™€ ๊ฐœ์ธ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋…๋ฆฝ์ ์ธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋„ ๊ตฌ์ถ•ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Docker ์žฅ์ ๊ณผ ์ด์ 


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

์ด๊ฒƒ์„ ์ด์‹์„ฑ(Potability)๋ผ๊ณ  ํ•œ๋‹ค. ๋‚ด๊ฐ€ ๊ฐœ๋ฐœํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‚ด ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ๊ฒƒ์ด ์•„๋‹ˆ์ง€ ์•Š์€๊ฐ€.

Docker๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‰ฝ๊ฒŒ ๋ณต์ œํ•˜๊ณ  ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ทธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ํ™•์žฅ์„ฑ(Scalability)์€ ์ˆ˜ํ‰์ ์ธ ํ™•์žฅ์„ฑ์„ ๊ฐ–๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค.

DOcker ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฒฉ๋ฆฌ๋œ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ํ†ตํ•ด ๊ฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž์ฒด ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋„คํŠธ์›Œํฌ, ํ”„๋กœ์„ธ์Šค ๊ณต๊ฐ„์„ ๊ฐ–๋„๋ก ํ•˜๊ณ ,

ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ ๋ฐ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฒฉ๋ฆฌ(Isolation)๋˜์–ด ์ž‘๋™ํ•˜๋„๋ก ํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ์ถฉ๋™์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๋ณด์•ˆ์€ ๊ฐ•ํ™”ํ•˜๋ฉฐ, ์˜์กด์„ฑ ์ถฉ๋Œ์€ ์ตœ์†Œํ™”ํ•œ๋‹ค.

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

์ด๋Ÿฌํ•œ ๋น ๋ฅธ ๊ตฌ์„ฑ(Configuration)์€ Docker์˜ ์žฅ์ ์ด์ž ์ด์ ์ด๋‹ค.

๊ฒฐ๊ตญ Docker๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ผ๊ด€๋œ ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ์šด์˜ํŒ€์€ ์‰ฝ๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ•˜๋„๋ก ๋•๋Š”๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ๊ณผ ๋ฐฐํฌ ์‚ฌ์ด ๊ฐ„๊ทน์„ ์ค„์ด๊ณ , ํ˜‘์—…๊ณผ ์ „๋‹ฌ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ์ด์ ์ด๋‹ค.

Docker ์„ค์น˜์™€ ์„ค์ •


1. Docker ์„ค์น˜ : ๊ณตํ™ˆ ์„ค์น˜
ํ•„์ž๋Š” macOS๋ผ homebrew ์‚ฌ์šฉ , brew install docker , brew install docker-compose
2. Docker Daemon ์‹คํ–‰
win, macOs : Docker Desktop ์‹คํ–‰ ์‹œ ์ž๋™ ์‹คํ–‰
linux : sudo systemctl start docker
3. ์‚ฌ์šฉ์ž ๊ถŒํ•œ ์„ค์ • : ํ˜„์žฌ ์‚ฌ์šฉ์ž๋ฅผ Docker ๊ทธ๋ฃน์— ์ถ”๊ฐ€, ์ถ”๊ฐ€ ํ›„ ์žฌ๋กœ๊ทธ์ธ
์‚ฌ์šฉ์ž ๊ทธ๋ฃน ์ถ”๊ฐ€ : sudo usermod-aG docker ์‚ฌ์šฉ์ž์ด๋ฆ„
4. Docker ํ™•์ธ : docker version
docker run hello-world ํ†ตํ•ด ์ž‘๋™ ํ™•์ธ
์„ค์ • ๋‚ด์šฉ
docker build Dockerfile ์ž‘์„ฑ ํ›„ ์‚ฌ์šฉ, ์ด๋ฏธ์ง€ ๋นŒ๋“œ
docker run ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
docker stop ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€
docker ps ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก ์กฐํšŒ
-v / โ€“mount ๋ณผ๋ฅจ ๋งˆ์šดํŠธ
-p / โ€“publish ํฌํŠธ ๋งคํ•‘
-v / โ€“env ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
โ€“restart ์žฌ์‹œ์ž‘ ์ •์ฑ… ์„ค์ •, ์žฌ์‹œ์ž‘ ์กฐ๊ฑด, ํšŸ์ˆ˜ ์ œํ•œ ๋“ฑ ์„ค์ •
  • ๋ณผ๋ฅจ ๋งˆ์šดํŠธ : ํ˜ธ์ŠคํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋””ํ…ํ† ๋ฆฌ๋ฅผ ์ปจํ…Œ์ด๋„ˆ ๊ฒฝ๋กœ์— ๋งˆ์šดํŠธ
  • ํฌํŠธ ๋งคํ•‘ : ํฌํŠธ ๋งคํ•‘์„ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ํฌํŠธ๋ฅผ ํ˜ธ์ŠคํŠธ์˜ ํฌํŠธ์— ๋งคํ•‘, ์ปจํ…Œ์ด๋„ˆ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์™ธ๋ถ€ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • : ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์„ค์ • ์ง€์ •, ์ด๋ฅผ ํ†ตํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ์„ ์œ ์—ฐํ•˜๊ฒŒ ๊ด€๋ฆฌ ๋ฐ ์„ค์ • ์กฐ์ •
  • Docker Compose : ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ๋‹ค.
  • CI/CD ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ : Continuos Integration/ Continuos Deployment๋กœ
    Docker์ด๋ฏธ์ง€๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ํ›„ ์ด๋ฏธ์ง€๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ํ‘ธ์‹œํ•˜์—ฌ ๋ฐฐํฌํ•˜๋Š” ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.
    Jenkins, GitLab CICD, CircleCI๋Š” Docker๋ฅผ ์‚ฌ์šฉํ•œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ์„ค์ • : Docker๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ์ง€์›, ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋™์ผ ๋„คํŠธ์›Œํฌ์— ์žˆ์„ ๋•Œ ์„œ๋กœ ํ†ต์‹  ๊ฐ€๋Šฅ
  • ๋กœ๊น… ์„ค์ •(Logging) : Docker๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘, ๊ด€๋ฆฌํ•˜๋Š” ๋กœ๊น… ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
    ๋กœ๊ทธ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ค์ •ํ•ด ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๊ทธ๋ฅผ ์ค‘์•™ ์ง‘์ค‘์‹ ๋กœ๊ทธ ์‹œ์Šคํ…œ์— ์ „์†กํ•˜๊ฑฐ๋‚˜ ํŒŒ์ผ๋กœ ์ €์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค.
    Prometheus, Grafana, ELK ์Šคํƒ์ด ๋Œ€ํ‘œ์  ๋กœ๊น… ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋‹ค.
  • ์ž๋™ ์žฌ์‹œ์ž‘(Automatic Restart) : ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋น„์ •์ƒ ์ข…๋ฃŒ๋์„ ๋•Œ, ์ž๋™์œผ๋กœ ์žฌ์‹œ์ž‘

๊ฐ€์ƒํ™” ๊ฐœ๋…: Docker ์ด๋ฏธ์ง€์™€ ์ปจํ…Œ์ด๋„ˆ


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

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

Docker ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋…๋ฆฝ์ ์ธ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฐ€์ƒ ๋จธ์‹ ๊ณผ ๋น„์Šทํ•œ ๊ฐ€์ƒํ™” ๊ฐœ๋…์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

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

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ : Dockerfile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค์Šคํ…€ ์ด๋ฏธ์ง€ ์ƒ์„ฑ


  1. Dockerfile ์ž‘์„ฑ : ์›ํ•˜๋Š” ์ด๋ฏธ์ง€ ์„ ํƒ ํ›„ Dockerfile ์ž‘์„ฑํ•œ๋‹ค.
    ๋ช…๋ น๋ฌธ + ์ง€์‹œ์–ด / ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ข…๋ฅ˜์™€ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž๊ฒŒ ๊ตฌ์„ฑํ•œ๋‹ค.
  2. ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์„ ํƒ : Dockerfile์—์„œ FROM ์ง€์‹œ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์„ ํƒ
    ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์šด์˜์ฒด์ œ์™€ ์†Œํ”„ํŠธ์›จ์–ด ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.
  3. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…์†์„ฑ ์„ค์น˜ : RUN ์ง€์‹œ์–ด ์‚ฌ์šฉ
    ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋‚˜ ๊ธฐํƒ€ ์„ค์น˜ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•œ๋‹ค.
  4. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒŒ์ผ ๋ณต์‚ฌ : COPY ์ง€์‹œ์–ด ์‚ฌ์šฉ
    ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ -> Docker ์ด๋ฏธ์ง€๋กœ ๋ณต์‚ฌ / ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†Œ์Šค ์ฝ”๋“œ, ์„ค์ • ํŒŒ์ผ ๋“ฑ์ด ์ด๋ฏธ์ง€ ๋‚ด๋ถ€๋กœ ํฌํ•จ
  5. ํฌํŠธ ๋…ธ์ถœ : EXPOSE ์ง€์‹œ์–ด ์‚ฌ์šฉ
    ์™ธ๋ถ€์—์„œ ํ•ด๋‹น ํฌํŠธ๋กœ ์ปจํ…Œ์ด๋„ˆ์— ์ ‘๊ทผํ† ๋ก ์„ค์ •
  6. ์‹คํ–‰ ๋ช…๋ น ์„ค์ • : CMD ๋˜๋Š” ENTRYPOINT ์ง€์‹œ์–ด ์‚ฌ์šฉ
    ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์„ ์„ค์ • / ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ๋ช…๋ น์ด ์ง€์ •๋˜๊ณ  ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑ
  7. Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ : Dockerfile์„ ์‚ฌ์šฉํ•ด ์ปค์Šคํ…€ ์ด๋ฏธ์ง€ ๋นŒ๋“œ, docker buid ๋ช…๋ น ์‚ฌ์šฉ
    Dockerfile ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑํ•˜๊ณ  ํƒœ๊ทธ ์ง€์ •
  8. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ : docker run ๋ช…๋ น ์‚ฌ์šฉ
    ์ปค์Šคํ…€ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํƒ ๊ด€๋ฆฌ ๊ฐ„์†Œํ™” : Docker Compose ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ ๊ตฌ์ถ•


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

๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ ๊ตฌ์ถ•

  • ๋‹จ์ผ ํŒŒ์ผํ™”(YAML) Docker Compose๋Š” YAML ํŒŒ์ผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„œ๋น„์Šค, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋“ฑ์„ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ,
    YAML ํŒŒ์ผ์—๋Š” ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ตฌ์„ฑ์ด๋‚˜ ์ข…์†์„ฑ์„ ๋ช…์‹œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹จ์ผ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ ,
    ์ด ํŒŒ์ผ๋“ค์„ ํ†ตํ•ด์„œ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค.

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

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

Docker Networking : ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ , ์™ธ๋ถ€ ์—ฐ๊ฒฐ ์„ค์ •


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

Docker ๋„คํŠธ์›Œํฌ

Docker๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์„ฑํ•ด ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
์ด ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ๋Š” Docker ๋ธŒ๋ฆฟ์ง€ ๋„คํŠธ์›Œํฌ๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ณ , Docker ์—”์ง„์— ์˜ํ•ด ์ž๋™ ์ƒ์„ฑ๋œ๋‹ค.
๋™์ผํ•œ Docker ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•ด๋‹น ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋˜์–ด P ์ฃผ์†Œ ํ˜น์€ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์œผ๋กœ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํฌํŠธ ๋งคํ•‘

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์™ธ๋ถ€๋กœ ๋…ธ์ถœํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ํฌํŠธ ๋งคํ•‘์„ ์‚ฌ์šฉํ•œ๋‹ค.
Docker ์ปจํ…Œ์ด๋„ˆ๋Š” ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์˜ ํฌํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ,
์ด๋Ÿฐ ๊ธฐ๋Šฅ์€ ์™ธ๋ถ€์—์„œ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์˜ IP ์ฃผ์†Œ์™€ ํ•ด๋‹น ํฌํŠธ๋กœ ์ ‘์†ํ•ด ํ•ด๋‹น์ปจํ…Œ์ด๋„ˆ์˜ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
์œ„ ํ…Œ์ด๋ธ” ํ‘œ๊ธฐ์ฒ˜๋Ÿผ ํฌํŠธ ๋งคํ•‘์€ -p / โ€“publish ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค.

์˜ˆ์‹œ

docker run -p 80:80 <imgName>

์œ„ ์˜ˆ์‹œ๋Š” ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์˜ 80๋ฒˆ ํฌํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ์˜ 80๋ฒˆ ํฌํŠธ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด
์™ธ๋ถ€์—์„œ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์˜ IP ์ฃผ์†Œ์™€ 80๋ฒˆํฌํŠธ๋กœ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ์˜ ์›น ์„œ๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋กํ•œ๋‹ค.

Docker์™€ ํด๋ผ์šฐ๋“œ : ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜๊ณผ ์„œ๋น„์Šค ๋ฐฐํฌ


Docker์™€ ํด๋ผ์šฐ๋“œ๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜๊ณผ ์„œ๋น„์Šค ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•œ๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐ์œจํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
    ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์€ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฐฐํฌ, ํ™•์žฅ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ, ์žฅ์•  ๋ณต๊ตฌ ๋“ฑ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    ๋Œ€ํ‘œ ํˆด๋กœ Kubernetes, Docker Swarm, Apache Mesos๊ฐ€ ์žˆ๋‹ค.

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

Docker ๋ณด์•ˆ๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง : ์ฃผ์š” ๊ณ ๋ ค ์‚ฌํ•ญ


๋ณด์•ˆ

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

๋ชจ๋‹ˆํ„ฐ๋ง

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

์ง€์†์  ํ†ตํ•ฉ ๋ฐ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค์— ํ†ตํ•ฉ : CI/CD


CI๋Š” Continuos Integration๋กœ ์ง€์†์ ์ธ ํ†ตํ•ฉ์„ ์˜๋ฏธํ•˜๊ณ ,
CD๋Š” Continuos Deployment๋กœ ์ง€์†์ ์ธ ๋ฐฐํฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
์ฆ‰, CI/CD ํŒŒ์ดํ”„๋ผ์ธ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ง€์†์ ์œผ๋กœ ํ†ตํ•ฉ, ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด ์ž๋™ํ™”์‹œํ‚จ ํ”„๋กœ์„ธ์Šค์ด๋‹ค.

Docker๋ฅผ CI/CD ํ”„๋กœ์„ธ์Šค์— ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์€ ์ผ๊ด€๋œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ณ  ๋น ๋ฅธ ๋นŒ๋“œ, ๋ฐฐํฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฉฐ,
์ปจํ…Œ์ด๋„ˆ์— ํ™•์žฅ์„ฑ๊ณผ ํƒ„๋ ฅ์„ฑ์„ ์ œ๊ณตํ•ด ํŠธ๋ž˜ํ”ฝ ๋ณ€๋™์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ ๋‹ค.
๋˜ํ•œ, ํ™˜๊ฒฝ ๋ณต์›๊ณผ ๋กค๋ฐฑ์„ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ ๋˜ํ•œ ํ†ตํ•ฉ์˜ ์ด์ ์ด๋‹ค.

CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ๋‹จ๊ณ„ ๊ฐ„์— ์ผ๊ด€๋œ ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
๋ชจ๋“  ๋‹จ๊ณ„์—์„œ ๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํ™˜๊ฒฝ ์ฐจ์ด๋กœ ์ธํ•œ ๋ฌธ์ œ๋Š” ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  ๋ฐฐํฌ์˜ ์ผ๊ด€์„ฑ์€ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

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

CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•„์š”ํ•œ ๋งŒํผ์˜ ์ปจํ…Œ์ด๋„ˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ๋ณ‘๋ ฌ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ ์Šค์ผ€์ผ ์•„์›ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋Š” ๋†’์€ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ด ํŠธ๋ž˜ํ”ฝ ๋ณ€๋™์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค.

๋ณธ๋ž˜ Docker ์ด์ง€๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ํ™˜๊ฒฝ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค.
CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ๋ฒ„์ „์˜ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ์‰ฝ๊ฒŒ ๋ณต์›ํ•˜๊ฑฐ๋‚˜ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ๋‹ค.