๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์„œ๋น„์Šค & ํˆด

[Docker] 1. ๋„์ปค, ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ

by ์„œ์•„๋ž‘๐Ÿ˜ 2024. 12. 24.

 

 

Docker

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

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


Docker์˜ ์ฃผ์š” ๊ธฐ๋Šฅ๊ณผ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ์ปจํ…Œ์ด๋„ˆ(Container)
    ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์‹คํ–‰ ํŒŒ์ผ, ๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ๋…๋ฆฝ ์‹คํ–‰ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค.
    • ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ ๋ฐ ํ˜ธ์ŠคํŠธ์™€ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • ๊ฐ€์ƒ ๋จธ์‹ ๋ณด๋‹ค ๊ฒฝ๋Ÿ‰์ด๋ฉฐ, ํ˜ธ์ŠคํŠธ์˜ ์ปค๋„์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.
  2. Docker ์—”์ง„(Docker Engine)
    Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œ, ์‹คํ–‰, ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค.
    • Docker Engine์€ ํด๋ผ์ด์–ธํŠธ, ๋ฐ๋ชฌ(์„œ๋ฒ„), REST API๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  3. Docker CLI
    ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ Docker ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ: docker run, docker build, docker ps.

 

Docker Image

Docker ์ด๋ฏธ์ง€๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค.

  • ์ด๋ฏธ์ง€๋Š” ๊ณ„์ธต(layer) ๊ธฐ๋ฐ˜์œผ๋กœ ์ €์žฅ๋˜๋ฉฐ, ๊ฐ ๊ณ„์ธต์€ ์ฝ๊ธฐ ์ „์šฉ์ž…๋‹ˆ๋‹ค.
  • ์ด๋ฏธ์ง€๋Š” ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋กœ๋“œ๋˜๋ฉฐ, ์‹คํ–‰ ์‹œ์ ์—๋งŒ ์ปจํ…Œ์ด๋„ˆ์˜ ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ๊ณ„์ธต์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ํŠน์ง•

  1. Immutable
    ์ด๋ฏธ์ง€๋Š” ๋ถˆ๋ณ€ํ•˜๋ฉฐ, ํ•œ ๋ฒˆ ๋นŒ๋“œ๋˜๋ฉด ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ˆ˜์ •์ด ํ•„์š”ํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. Layered Structure
    • ์ด๋ฏธ์ง€๋Š” ์—ฌ๋Ÿฌ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ: ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€(Ubuntu) + ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ™˜๊ฒฝ + ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ์ฝ”๋“œ.
  3. Dockerfile
    ์ด๋ฏธ์ง€๋Š” ๋ณดํ†ต Dockerfile์ด๋ผ๋Š” ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค.
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y python3
COPY app.py /app/
CMD ["python3", "/app/app.py"]

 

Docker Container

Docker ์ปจํ…Œ์ด๋„ˆ๋Š” Docker ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ƒ์„ฑ๋œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋ฉฐ, ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ข…์†์„ฑ๋งŒ ํฌํ•จํ•˜๋ฉฐ, ํ˜ธ์ŠคํŠธ OS์˜ ์ปค๋„์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ํŠน์ง•

  1. ๊ฒฉ๋ฆฌ์„ฑ(Isolation)
    ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  2. ๊ฐ€๋ฒผ์›€(Lightweight)
    ๊ฐ€์ƒ๋จธ์‹ (VM)๋ณด๋‹ค ์ ์€ ์ž์›์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘/์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
  3. ์œ ์ง€ ๊ฐ€๋Šฅ์„ฑ(Maintainability)
    ์ปจํ…Œ์ด๋„ˆ๋Š” ์ƒํƒœ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š”(stateless) ํŠน์„ฑ์ด ์žˆ์œผ๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ์‰ฝ๊ฒŒ ์ข…๋ฃŒ ๋ฐ ์žฌ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

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


 

Docker Registry

Docker Registry๋Š” Docker ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์•™ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.

  • ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์—…๋กœ๋“œํ•˜๊ณ , ํ•„์š” ์‹œ ๋‹ค์šด๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ์š”์†Œ

  1. Docker Hub
    • Docker์—์„œ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜๋Š” ํผ๋ธ”๋ฆญ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.
    • ์ „ ์„ธ๊ณ„์˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ๊ฐœ์ธ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ: nginx, mysql๊ณผ ๊ฐ™์€ ์ธ๊ธฐ ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      docker pull nginx
      
  2. Private Registry
    ๊ธฐ์—… ๋˜๋Š” ๊ฐœ์ธ์ด ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋ผ์ด๋น— ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.
    • Docker Registry๋ฅผ ์ง์ ‘ ํ˜ธ์ŠคํŒ…ํ•˜๊ฑฐ๋‚˜ AWS ECR, Google Container Registry ๋“ฑ์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  3. ์ด๋ฏธ์ง€ ์ด๋ฆ„ ๊ทœ์น™
    • repository:tag ํ˜•์‹์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ: myapp:1.0, nginx:latest.
  4. Push & Pull
    • docker push: ์ด๋ฏธ์ง€๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์—…๋กœ๋“œ.
    • docker pull: ์ด๋ฏธ์ง€๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๋‹ค์šด๋กœ๋“œ.

 

Docker์˜ ์ „์ฒด ์ž‘์—… ํ๋ฆ„

  1. Dockerfile ์ž‘์„ฑ
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•„์š”ํ•œ ํ™˜๊ฒฝ์„ ์ •์˜ํ•œ Dockerfile ์ž‘์„ฑ.
  2. ์ด๋ฏธ์ง€ ๋นŒ๋“œ
    docker build -t myapp:1.0 .
  3. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
    docker run -d --name mycontainer -p 8080:80 myapp:1.0
  4. ์ด๋ฏธ์ง€ ๋ฐฐํฌ
    • Docker Registry์— ์—…๋กœ๋“œํ•˜์—ฌ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
    docker tag myapp:1.0 myregistry.com/myapp:1.0
    docker push myregistry.com/myapp:1.0
    

 

โœ… ๋„์ปค๋ฅผ ์ ‘ํ•ด๋ณด์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ถ”์ฒœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋„์ปค๋ฅผ ์„ค์น˜ํ•˜๊ณ  docker run --rm -d -p 8080:80 nginx ๋ช…๋ น์–ด๋ฅผ ๋ฌด์ž‘์ • ์‹คํ–‰ํ•ด๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. nginx๋ผ๋Š” ์ด๋ฏธ์ง€๊ฐ€ ๋กœ์ปฌ์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋„์ปค ํ—ˆ๋ธŒ์—์„œ nginx ์ด๋ฏธ์ง€๋ฅผ Pullํ•ด์„œ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ด๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  docker ps๋ฅผ ์ž…๋ ฅํ•ด๋ณด๊ณ , localhost:8080์œผ๋กœ ์›น ์„œ๋ฒ„๊ฐ€ ๋™์ž‘ํ•˜๋Š”์ง€ ์ฒดํฌํ•ด๋ณด์„ธ์š”. 


Docker๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  1. ์ผ๊ด€๋œ ํ™˜๊ฒฝ ์ œ๊ณต
    • ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ ํ™˜๊ฒฝ์˜ ์ฐจ์ด๋กœ ์ธํ•œ ๋ฌธ์ œ๋ฅผ ์ตœ์†Œํ™”.
  2. ํšจ์œจ์„ฑ
    • ๋น ๋ฅธ ์‹œ์ž‘๊ณผ ์ž์› ํšจ์œจ์„ฑ์„ ์ œ๊ณต(๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์œผ๋กœ ๋ฒ„์ „/์ข…์†์„ฑ ์‹ ๊ฒฝ ์•ˆ์จ๋„ ๋จ)
  3. ํ™•์žฅ์„ฑ
    • Kubernetes์™€ ๊ฐ™์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋Œ€๊ทœ๋ชจ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ.
    • MSA์˜ ๊ฐ€์†ํ™”
  4. ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ์˜ˆ์ธก ๊ฐ€๋Šฅ ๋ฐ ์ž์› ์‚ฌ์šฉ ํšจ์œจ์„ฑ ์ฆ๊ฐ€
    • Kubernetes์™€ ๊ฐ™์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋Œ€๊ทœ๋ชจ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ.

 

๋„์ปค ์•„ํ‚คํ…์ฒ˜

https://docs.docker.com/get-started/docker-overview/

Docker๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋นŒ๋“œ, ๋ฐฐํฌ, ์‹คํ–‰์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์„ฑ๋œ ๋‹ค์–‘ํ•œ ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.ํด๋ผ์ด์–ธํŠธ์™€ docker host๋Š” ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ๋‚จ๋“ค์ด ๋งŒ๋“ค์–ด ๋†“์€ Docker hub์˜ Repository ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.

Docker Client

Docker Client๋Š” ์‚ฌ์šฉ์ž๊ฐ€ Docker๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

  • ์—ญํ• 
    • ์‚ฌ์šฉ์ž์˜ ๋ช…๋ น(docker run, docker build, docker pull)์„ ์ „๋‹ฌํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ํ‘œ์‹œ.
    • Docker Server(Daemon)์™€ ํ†ต์‹ ํ•˜์—ฌ ์‹ค์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰.
  • ์ž‘๋™ ๋ฐฉ์‹
    • Docker Client๋Š” REST API๋ฅผ ํ†ตํ•ด Docker Daemon๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.
    • CLI(Command Line Interface)์™€ GUI ๋„๊ตฌ(์˜ˆ: Docker Desktop)๋ฅผ ํฌํ•จ.

Docker Daemon (Server)

Docker Daemon์€ Docker์˜ ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ๋กœ, Docker ์ปจํ…Œ์ด๋„ˆ์™€ ์ด๋ฏธ์ง€๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

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

Docker Engine

Docker Engine์€ Docker ์•„ํ‚คํ…์ฒ˜์˜ ์ค‘์‹ฌ์œผ๋กœ, ์•„๋ž˜ ์„ธ ๊ฐ€์ง€ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

  1. Docker Daemon: ์‹ค์ œ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰.
  2. Docker CLI: ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค.
  3. REST API: Docker Daemon๊ณผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹.

 

Docker Command

  1. Docker build
      • ์ด๋ฏธ ์ •์˜๋œ Dockerfile๋Œ€๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. Docker pull
    • ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ ์˜ต๋‹ˆ๋‹ค.
  3. Docker run
    • ์ด๋ฏธ์ง€(ํ”„๋กœ๊ทธ๋žจ)๋ฅผ ์‹คํ–‰์‹œ์ผœ์„œ ์ปจ๋„ค์ด๋„ˆ(ํ”„๋กœ์„ธ์Šค)๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

 

docker build ์ƒ์„ธ

docker build ๋ช…๋ น์–ด๋Š” Dockerfile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


๊ธฐ๋ณธ ํ˜•์‹

docker build [OPTIONS] PATH | URL | -

์ฃผ์š” ์˜ต์…˜

์˜ต์…˜ ์„ค๋ช…
-t, --tag ์ƒ์„ฑํ•  ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„๊ณผ ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: myimage:1.0)
--build-arg KEY=VALUE Dockerfile์—์„œ ์‚ฌ์šฉํ•  ๋นŒ๋“œ ํƒ€์ž„ ๋ณ€์ˆ˜ ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
--no-cache ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
--pull ๋นŒ๋“œ ์‹œ ์ตœ์‹  ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ํ•ญ์ƒ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
--file, -f ์‚ฌ์šฉํ•  Dockerfile์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ Dockerfile์ž…๋‹ˆ๋‹ค.
--progress ๋นŒ๋“œ ์ง„ํ–‰ ์ƒํ™ฉ ํ‘œ์‹œ ์Šคํƒ€์ผ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. (auto, plain, tty)
--build-context ๋นŒ๋“œ ์‹œ ์‚ฌ์šฉํ•  ์ปจํ…์ŠคํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
--target ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ์—์„œ ํŠน์ • ์Šคํ…Œ์ด์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
--platform ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ํ”Œ๋žซํผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: linux/amd64, linux/arm64)

์˜ˆ์ œ

  1. ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ๋นŒ๋“œ:
    docker build -t myimage:1.0 .
    
  2. ํŠน์ • Dockerfile ๊ฒฝ๋กœ ์ง€์ •:
    docker build -f ./path/to/Dockerfile -t myimage:1.0 .
    
  3. ์บ์‹œ ์—†์ด ๋นŒ๋“œ:
    docker build --no-cache -t myimage:1.0 .
    
  4. ๋นŒ๋“œ ์ธ์ˆ˜ ์ „๋‹ฌ:
    docker build --build-arg ENV=production -t myimage:prod .
    

docker run ์ƒ์„ธ

docker run ๋ช…๋ น์–ด๋Š” Docker ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํ˜•์‹

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

์ฃผ์š” ์˜ต์…˜

์˜ต์…˜ ์„ค๋ช…
-d, --detach ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
-i, --interactive ์ปจํ…Œ์ด๋„ˆ์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. (์ฃผ๋กœ -t์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ)
-t, --tty ๊ฐ€์ƒ ํ„ฐ๋ฏธ๋„์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
--name ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
-p, --publish ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํฌํŠธ๋ฅผ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: -p 8080:80)
-P, --publish-all ์ปจํ…Œ์ด๋„ˆ์˜ ๋ชจ๋“  ๋…ธ์ถœ๋œ ํฌํŠธ๋ฅผ ๋žœ๋ค์œผ๋กœ ํ˜ธ์ŠคํŠธ์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.
-v, --volume ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: -v /host/path:/container/path)
--env, -e ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ปจํ…Œ์ด๋„ˆ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: -e ENV=production)
--env-file ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: --env-file ./env.list)
--rm ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
--network ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉํ•  ๋„คํŠธ์›Œํฌ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: --network my_network)
--cpu-shares CPU ์‚ฌ์šฉ๋Ÿ‰ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
--memory ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํ•œ๋„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: --memory 512m)
--restart ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘ ์ •์ฑ…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. (no, always, on-failure, unless-stopped)
--entrypoint ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์˜ ENTRYPOINT๋ฅผ ๋ฎ์–ด์”๋‹ˆ๋‹ค.
--privileged ์ปจํ…Œ์ด๋„ˆ์— ์ถ”๊ฐ€ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
--detach-keys ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋ณด๋‚ผ ๋‹จ์ถ•ํ‚ค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์ œ

  1. ๊ธฐ๋ณธ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰:
    docker run -it ubuntu
    
  2. ํฌํŠธ ๋งคํ•‘ํ•˜์—ฌ ์‹คํ–‰:
    docker run -d -p 8080:80 nginx
    
  3. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ „๋‹ฌ:
    docker run -e ENV=production -it ubuntu
    
  4. ๋ณผ๋ฅจ ๋งˆ์šดํŠธ:
    docker run -v /host/data:/container/data -it ubuntu
    
  5. ์ข…๋ฃŒ ํ›„ ์ปจํ…Œ์ด๋„ˆ ์ œ๊ฑฐ:
    docker run --rm -it ubuntu
    
  6. ๋„คํŠธ์›Œํฌ ์ง€์ •:
    docker run --network my_network -it ubuntu
    

 

๋Œ“๊ธ€