๐Ÿณ Docker๋ž€


๋„์ปค๋ž€?

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

ํŠน์ง•

ํ™•์žฅ์„ฑ

  • ์ด๋ฏธ์ง€๋งŒ ๋งŒ๋“ค์–ด ๋†“์œผ๋ฉด ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ทธ๋ƒฅ ๋„์šฐ๋ฉด ๋จ
  • ์„œ๋ฒ„์— ์„œ๋น„์Šค ํ•˜๋‚˜ ๋” ๋„์šธ๋ผ๋ฉด run ๋ช…๋ น์–ด๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐ

ํ‘œ์ค€์„ฑ

  • ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ruby, nodejs, go, php๋กœ ๋งŒ๋“  ์„œ๋น„์Šค๋“ค์˜ ๋ฐฐํฌ ๋ฐฉ์‹์€ ๊ฐ๊ฐ ๋‹ค๋ฆ„
  • ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ํ‘œ์ค€์œผ๋กœ ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•˜๋ฏ€๋กœ ๋ชจ๋“  ์„œ๋น„์Šค๋“ค์˜ ๋ฐฐํฌ๊ณผ์ •์ด ๋™์ผ

์ด๋ฏธ์ง€

  • ์ด๋ฏธ์ง€์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด ํ•„์š”
  • ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•  ๊ณณ์ด ํ•„์š”

์„ค์ •

  • ๋ณดํ†ต ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ œ์–ด
  • ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๊ฐ€ ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์„ค์ •ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ ธ์•ผํ•จ

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

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

BUT. ๊ธฐ์กด์˜ ๋ฐฉ์‹๊ณผ๋Š” ์ฐจ์ด๊ฐ€ ์žˆ์Œ

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

์ด๋ฏธ์ง€

  • ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ชจ๋“  ํŒŒ์ผ๊ณผ ์„ค์ • ๊ฐ’๋“ฑ์„ ํฌํ•จ
  • ์ƒํƒœ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š๊ณ  ๋ณ€ํ•˜์ง€ ์•Š์Œ
  • ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ ์ƒํƒœ
  • ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ๋ณ€ํ•˜๋Š” ๊ฐ’์€ ์ปจํ…Œ์ด๋„ˆ์— ์ €์žฅ๋จ
  • ๊ฐ™์€ ์ด๋ฏธ์ง€์—์„œ ์—ฌ๋Ÿฌ๊ฐœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ˆ˜์ •/์‚ญ์ œ๋˜์–ด๋„ ์ด๋ฏธ์ง€๋Š” ๋ณ€ํ•˜์ง€ ์•Š์Œ
  • ex) MySQL์ด๋ฏธ์ง€๋Š” MySQL์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ํŒŒ์ผ๊ณผ ์‹คํ–‰ ๋ช…๋ น์–ด, ํฌํŠธ ์ •๋ณด๋“ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  • ๋„์ปค ์ด๋ฏธ์ง€๋Š” Docker hub์— ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜ Docker Registry ์ €์žฅ์†Œ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ์šฉ๋Ÿ‰์ด ์—„์ฒญ ํดํ…๋ฐโ€ฆ

  • ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ ˆ์ด์–ด ๋ผ๋Š” ๊ฐœ๋… ๋„์ž…

๋ ˆ์ด์–ด

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

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

  • ์ด๋ฏธ์ง€๋Š” URL ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ ํƒœ๊ทธ๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ์Œ

Dockerfile

  • ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด DSL์„ ํ†ตํ•ด ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๊ณผ์ •์„ ์ ์Œ

๋„์ปค ์„ค์น˜ & ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

๋ฆฌ๋ˆ…์Šค์— ๋„์ปค ์„ค์น˜ํ•˜๊ธฐ

curl -fsSL https://get.docker.com/ | sudo sh

sudo ์—†์ด ์‚ฌ์šฉํ•˜๊ธฐ

  • ๋„์ปค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ root ๊ถŒํ•œ์ด ํ•„์š”
  • ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ์‚ฌ์šฉ์ž๊ฐ€ sudo ์—†์ด ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋ฅผ docker ๊ทธ๋ฃน์— ์ถ”๊ฐ€
sudo usermod -aG docker $USER # ํ˜„์žฌ ์ ‘์†์ค‘์ธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์ฃผ๊ธฐ

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

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
  • docker run --help ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ์•Œ์•„๋ณด์ž
  • ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์—†๋‹ค๋ฉด ๋‹ค์šด๋กœ๋“œ pull๋ฅผ ํ•œ ํ›„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑ createํ•˜๊ณ  ์‹œ์ž‘ start

๋„์ปค ๊ธฐ๋ณธ ๋ช…๋ น์–ด

์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก ํ™•์ธํ•˜๊ธฐ (ps)

  • ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก์„ ํ™•์ธ
docker ps [OPTIONS]

์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ํ•˜๊ธฐ (stop)

  • ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€
docker stop [OPTIONS] CONTAINER [CONTAINER...]

์ปจํ…Œ์ด๋„ˆ ์ œ๊ฑฐํ•˜๊ธฐ (rm)

docker rm [OPTIONS] CONTAINER [CONTAINER...]

์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ (pull)

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

์ด๋ฏธ์ง€ ์‚ญ์ œํ•˜๊ธฐ (rmi)

docker rmi [OPTIONS] IMAGE [IMAGE...]

์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์— ๋ช…๋ น์–ด ์‹คํ–‰ (exec)

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

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

  • ๋„์ปค๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ์ด๋ฏธ์ง€๋กœ ์ €์žฅํ•จ
  • ex) ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ ๋‹ค๋ฉด, ๋ฆฌ๋ˆ…์Šค๋งŒ ์„ค์น˜๋œ ์ปจํ…Œ์ด๋„ˆ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค์น˜ํ•˜๊ณ  ์ด ์ƒํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ์ด๋ฏธ์ง€๋กœ ์ €์žฅ
  • ๊ฐ€์ƒ๋จธ์‹ ์˜ ์Šค๋ƒ…์ƒท๊ณผ ๋น„์Šทํ•œ ๋ฐฉ์‹

  • ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” Dockerfile์ด๋ผ๋Š” ์ด๋ฏธ์ง€ ๋นŒ๋“œ์šฉ DSLDomain Specific Language ํŒŒ์ผ ์ž‘์„ฑ

์ด๋ฏธ์ง€ ๋นŒ๋“œ

docker build [OPTIONS] PATH | URL | -
  • ์ƒ์„ฑํ•  ์ด๋ฏธ์ง€ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ -t(--tag) ์˜ต์…˜๋งŒ ์•Œ๋ฉด ๋นŒ๋“œ๊ฐ€ ๊ฐ€๋Šฅ

๋„์ปค ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ

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

๋„์ปค ํ—ˆ๋ธŒ ์‚ฌ์šฉ

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

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

์ฐธ๊ณ ์ž๋ฃŒ