๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Spring] Docker ๋ณธ๋ฌธ

Docker

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

 

์™œ Docker ๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

  • ๋„์ปค๋Š” ์„œ๋ฒ„๋งˆ๋‹ค ๋™์ผํ•œ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์šด์˜์ฒด์ œ๋ถ€ํ„ฐ ์ปดํŒŒ์ผ๋Ÿฌ, ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ๋“ฑ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ด์ค€๋‹ค. 
  • ๋”ฐ๋ผ์„œ auto scaling ์— ์œ ๋ฆฌํ•˜๋‹ค.

 

๋„์ปค์™€ ๊ธฐ์กด ๊ฐ€์ƒํ™” ๊ธฐ์ˆ (VM)

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

 

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

 

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

 

๋„์ปค์˜ ์ปจํ…Œ์ด๋„ˆ์™€ ์ด๋ฏธ์ง€

  • ์ด๋ฏธ์ง€๋ž€ ์ฝ”๋“œ, ๋Ÿฐํƒ€์ž„, ์‹œ์Šคํ…œ ๋„๊ตฌ, ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ์„ค์ •๊ณผ ๊ฐ™์€ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ํŒจํ‚ค์ง€์ด๋‹ค.
  • ์ด๋ฏธ์ง€๋Š” Github์™€ ์œ ์‚ฌํ•œ ์„œ๋น„์Šค์ธ https://hub.docker.com/ ์„ ํ†ตํ•ด ๋ฒ„์ „ ๊ด€๋ฆฌ
  • ์ปจํ…Œ์ด๋„ˆ๋ž€ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ 

 

 

๋„์ปค ํŒŒ์ผ ์ด๋ž€?

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

 

 

๋„์ปค ํŒŒ์ผ ์ฃผ์š” ๋ช…๋ น์–ด

 

 

 

๋„์ปค ์ปดํฌ์ฆˆ๋ž€?

  • Docker Compose๋ž€ ๋ฉ€ํ‹ฐ ์ปจํ…Œ์ด๋„ˆ ๋„์ปค ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ •์˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋„๊ตฌ
  • Application, Database, Redis, Nginx ๋“ฑ ๊ฐ ๋…๋ฆฝ์ ์ธ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ• ๊นŒ?
  • ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ถ€ํ„ฐ ์ด๋ฃจ์–ด์ง„ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ• ๋ฐ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ, ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ
  • docker-compose.yml ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์—ฌ 1ํšŒ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์„ค์ •๋œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰

 

Docker ๊ธฐ๋ณธ ๋ช…๋ น์–ด ์ •๋ฆฌ

 

๋ฒ„์ „ ํ™•์ธ

docker -v

์ด๋ฏธ์ง€ ๋‚ด๋ ค ๋ฐ›๊ธฐ

docker pull [์ด๋ฏธ์ง€ ์ด๋ฆ„]

ex) docker pull centos:7

์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

docker start mycentos

์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์ ‘๊ทผ

docker attach mycentos

์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๋ฐ ๋‚ด๋ถ€์ ‘๊ทผ

docker run -i -t --name centos7 centos:7

์ปจํ…Œ์ด๋„ˆ ์ •์ง€

docker stop centos7

์ปจํ…Œ์ด๋„ˆ ์ •์ง€ ํ›„ ๋น ์ ธ๋‚˜์˜ค๊ธฐ

exit

or Ctrl + D

์ปจํ…Œ์ด๋„ˆ ์ •์ง€ํ•˜์ง€ ์•Š๊ณ  ๋น ์ ธ๋‚˜์˜ค๊ธฐ

Ctrl + P, Q

์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์ค‘์ธ ๋ชฉ๋ก ํ™•์ธ

docker ps

์ปจํ…Œ์ด๋„ˆ ๋ชจ๋“  ๋ชฉ๋ก ํ™•์ธ

docker ps -a

์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ๋ณ€๊ฒฝ

docker rename [๋ณ€๊ฒฝ ์ „ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„] [๋ณ€๊ฒฝ ํ›„ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„]

exec ๋ช…๋ น์–ด์‚ฌ์šฉ์„ ํ†ตํ•œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์ ‘์†

docker exec -i -t wordpressdb /bin/bash

Docker container & image ์‚ญ์ œ๊ด€๋ จ ๋ช…๋ น์–ด

์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ

docker rm [์ปจํ…Œ์ด๋„ˆid]

์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‘ ์‚ญ์ œ

docker rm `docker ps -a -q`

์ด๋ฏธ์ง€ ์‚ญ์ œ

ํ˜„์žฌ ์ด๋ฏธ์ง€ ํ™•์ธ

docker images

์ด๋ฏธ์ง€ ์‚ญ์ œ

docker rmi [์ด๋ฏธ์ง€id]

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์ „์— ์ด๋ฏธ์ง€๋ฅผ ์‚ญ์ œ

docker rmi -f [์ด๋ฏธ์ง€id]

๋ชจ๋“  ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ(remove all docker containers)

  • ๊ตฌ๋™์ค‘์ธ ๋ชจ๋“  ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ์ค‘์ง€์‹œํ‚ค๊ณ , ์‚ญ์ œ
     docker stop `docker ps -a -q`
     docker rm `docker ps -a -q`
    

๋ชจ๋“  ๋„์ปค ์ด๋ฏธ์ง€ ์‚ญ์ œ(remove all docker images)

- docker rmi `docker images -q`

docker image ์‹คํ–‰ ๋ฐ ์˜ต์…˜์„ค๋ช… (ex : jenkins image ์‹คํ–‰)

$ docker run -d -p 8080:8080 -v /jenkins:/var/jenkins_home –name jenkins -u root jenkins

์œ„ ์‹คํ–‰ ์ปค๋ฉ˜๋“œ์— ๋Œ€ํ•œ ์˜ต์…˜ ๊ฐ„๋‹จ ์„ค๋ช…

-d	detached mode ํ”ํžˆ ๋งํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ชจ๋“œ
-p	ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ๋ฅผ ์—ฐ๊ฒฐ (ํฌ์›Œ๋”ฉ)
-v	ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ์˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐ (๋งˆ์šดํŠธ)
–name	์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ์„ค์ •
-u ์‹คํ–‰ํ•  ์‚ฌ์šฉ์ž ์ง€์ •

 

 

 

์ถœ์ฒ˜

https://dbknowledge.tistory.com/83

https://velog.io/@kdaeyeop/%EB%8F%84%EC%BB%A4-Docker-%EC%99%80-VM%EC%9D%98-%EC%B0%A8%EC%9D%B4

http://jmlim.github.io/docker/2019/02/24/docker-command/