[Docker] Docker๋ž€?

๐Ÿ“ ์ด ๊ธ€์€ 12์›” ์›ํ‹ฐ๋“œ์—์„œ ์ง„ํ–‰ํ•˜๋Š” ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ BE ์ฑŒ๋ฆฐ์ง€๋ฅผ ์ฐธ์—ฌํ•˜๊ฒŒ ๋˜์–ด ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ™‡‍โ™€๏ธ

 

๐Ÿ”น ์ปจํ…Œ์ด๋„ˆ(Container) ๊ธฐ์ˆ ์ด๋ž€ ?

  • ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์ด๋ž€ ๊ฐ€์ƒํ™” ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
  • ๋‹ค๋ฅธ ์„œ๋ฒ„ ๋ฐ ํ™˜๊ฒฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

 

๐Ÿ”น ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์˜ ํŠน์ง•

  • ๊ธฐ์กด Virtual Machines ๋ชจ๋ธ๋“ค๊ณผ ๋‹ฌ๋ฆฌ ๋ณ„๋„์˜ guest OS ์—†์ด ๊ฐ€๋ฒผ์šด ๊ฐ€์ƒํ™” ๊ธฐ์ˆ  ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๐Ÿ”น ๋„์ปค(Docker)๋ž€ ?

  • ๋„์ปค๋ž€ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๊ฐ€์ƒํ™” ๋„๊ตฌ์ด๋‹ค.
    • ๋ฆฌ๋ˆ…์Šค ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ˆ ์ธ LXC(Linux Containers) ๊ธฐ๋ฐ˜
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ๋‹จ์œ„๋กœ ๊ฒฉ๋ฆฌํ•˜์—ฌ ์‹คํ–‰ํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
  • ๋‹ค์–‘ํ•œ ์šด์˜์ฒด์ œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์†์‰ฝ๊ฒŒ ๋นŒ๋“œ, ๋ฐฐํฌ, ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ์œ„ ๊ธฐ๋Šฅ๋“ค์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ , ํšจ์œจ์ ์œผ๋กœ ๋ฐฐํฌ, ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ”น Docker Architecture

  • ๋„์ปค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋„์ปค๋Š” Docker daemon์„ ์‹คํ–‰ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์š”์ฒญ(๋นŒ๋“œ, ์‹คํ–‰ ๋“ฑ)์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๋„์ปค์˜ ๊ธฐ๋ณธ CLI ํด๋ผ์ด์–ธํŠธ๋Š” UNIX ์†Œ์ผ“(default) ํ˜น์€ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋„์ปค ๋ฐ๋ชฌ์œผ๋กœ REST API ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค.

 

โ—ฝ Docker daemon(dockerd)

  • Docker API ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ ,
  • ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ ๋“ฑ์˜ ๋„์ปค ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

 

โ—ฝ Docker Client

  • Docker์™€ ์ƒํ˜ธ์ž‘์šฉํ•œ๋‹ค.
  • ๋ช…๋ น์–ด๋ฅผ REST API Call์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋„์ปค ๋ฐ๋ชฌ์œผ๋กœ ์ „์†กํ•œ๋‹ค.

 

โ—ฝ Docker Registries

  • ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ์ €์žฅ์†Œ์˜ ์—ญํ• ์„ ํ•œ๋‹ค.
    • Docker Hub : ๋””ํดํŠธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ, ๋ˆ„๊ตฌ๋‚˜ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐœํ˜• ์ €์žฅ์†Œ์ด๋‹ค.

 

โ—ฝ Docker objects

  • Docker Images
    • ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ฝ๊ธฐ ์ „์šฉ ํ…œํ”Œ๋ฆฟ
  • Docker container
    • ํ•œ ๋„์ปค ์ด๋ฏธ์ง€์˜ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ธ์Šคํ„ด์Šค
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ํŒŒ์ผ๊ณผ ์„ค์ • ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํŒจํ‚ค์ง€

 

๐Ÿ”น ๋„์ปค ํŒŒ์ผ, ๋„์ปค ์ด๋ฏธ์ง€, ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์˜ ๊ด€๊ณ„

โ—ฝ ๋„์ปค ํŒŒ์ผ(Dockerfile)

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

 

[ ๋„์ปค ํŒŒ์ผ ์ฃผ์š” ๋ฌธ๋ฒ• ]

  ๊ตฌ๋ฌธ   ์„ค๋ช…
  #   ์ฝ”๋ฉ˜ํŠธ
  FROM   ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€(Base Image) ์ง€์ •
  MAINTAINER   ๋ช…๋ น ๋ฐ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ์ ์šฉํ•  ์œ ์ € ์„ค์ •(๊ธฐ๋ณธ : root)
  WORKDIR   work directory ์ง€์ •
  RUN   ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ์‹คํ–‰ ๋ช…๋ น์–ด
  COPY   ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ ์‹œ ํ˜ธ์ŠคํŠธ ํŒŒ์ผ ๋ณต์‚ฌ
  ADD   ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ ์‹œ ํ˜ธ์ŠคํŠธ์˜(tar, url) ๋ณต์‚ฌ
  ENV   ํ™˜๊ฒฝ ๋ณ€์ˆ˜
  USER   ๋ช…๋ น ๋ฐ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ์ ์šฉํ•  ์œ ์ € ์„ค์ •(๊ธฐ๋ณธ : root)

 

โ—ฝ ๋„์ปค ์ด๋ฏธ์ง€(Docker Image)

  • ๋„์ปค ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

 

โ—ฝ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ(Docker Container)

  • ๋„์ปค ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.

 

 

 

 

 

๐Ÿ“ƒ reference

'Docker' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Docker] Docker CLI  (0) 2023.12.16