docker container

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

  • ์‹คํ–‰์˜ ๋…๋ฆฝ์„ฑ์„ ํ™•๋ณดํ•ด์ฃผ๋Š” ์šด์˜์ฒด๊ณ„ ์ˆ˜์ค€์˜ ๊ฒฉ๋ฆฌ ๊ธฐ์ˆ 
  • ํ•˜๋‚˜์˜ application ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ

ํŠน์ง•

  • ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์™„์ „ํ•˜๊ฒŒ ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ๋™์ž‘
    • cpu, memory, disk ๋“ฑ์˜ HW ๋ฆฌ์†Œ์Šค
    • ๊ฐ app์˜ user id
    • Network
  • ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ(application)์— ์ˆ˜์ •์‚ฌํ•ญ ์ƒ๊ธธ ๊ฒฝ์šฐ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋งŒ ์ˆ˜์ • ํ›„ ๋ฐฐํฌ ๊ฐ€๋Šฅ

Docker host

  • docker daemon์ด ๋™์ž‘ํ•˜๋Š” linux kernel ์ด ์žˆ๋Š” ์‹œ์Šคํ…œ
  • daemon
    • ํ•ญ์ƒ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ (ex - server)
    • ls, rm -> daemon ์•„๋‹˜
  • ์ฆ‰ docker๊ฐ€ container๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋žซํผ

container

  • ๋…๋ฆฝ๋œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋“ค์€ ํ•˜๋‚˜์˜ docker daemon ํ•˜์— ๋™์ž‘
  • ๊ฐ๊ฐ์˜ ์ปจํ…Œ์ด๋„ˆ๋“ค์€ ์™„๋ฒฝํ•˜๊ฒŒ ๋…๋ฆฝ๋˜์ง€๋งŒ ์ปค๋„์€ ํ•˜๋‚˜ -> ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋™์ผํ•œ ์ปค๋„ ์‚ฌ์šฉ
  • docker host ์ž…์žฅ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‹จ์ˆœํžˆ ๋™์ž‘๋˜๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค
  • ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋Š” ์™„์ „ํžˆ ๋…๋ฆฝ๋˜์–ด ๋™์ž‘ํ•˜๋Š” application์œผ๋กœ ๊ด€๋ฆฌ

๊ตฌ์กฐ

์ด๋ฏธ์ง€

  • ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒŒ์ผ๊ณผ ์„ค์ •๊ฐ’๋“ฑ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ
  • ์ƒํƒœ๊ฐ’์„ ๊ฐ–์ง€ ์•Š๊ณ  ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๊ตฌ์กฐ

  • nodejs web application์ด ๋‹ด๊ธด ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๊ฐ€์ • png

  • 3๋ฒˆ layer
    • base image layer
    • app.js๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์„ค์น˜
  • 2๋ฒˆ layer
    • source image layer
    • app.js ์†Œ์ŠคํŒŒ์ผ
  • 1๋ฒˆ layer
    • app.js(application) ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•๋“ค ๋‚˜์—ด
  • ์‹น๋‹ค ํ†ตํ‹€์–ด์„œ container image๋กœ ๋ถ€๋ฆ„

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

  • ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋Š” ์—ฌ๋Ÿฌ layer ์ด๋ฏธ์ง€๋กœ ๊ตฌ์„ฑ๋จ
  • ํ•˜๋‚˜์˜ application์ด ์ž˜ ์‹คํ–‰ ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋ชจ์•„์ ธ ์žˆ๋Š” ์ด๋ฏธ์ง€๋“ค์˜ ์กฐํ•ฉ
  • ๋‚˜์ค‘์— build ํ•  ๋•Œ ์ด ๊ตฌ์กฐ๋Œ€๋กœ build

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

png

  • docker๊ฐ€ ๋™์ž‘์ค‘์ธ docker host ๋‚ด๋ถ€
  • ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๊ฐ€ ํ•˜๋“œ๋””์Šคํฌ์— ํŒŒ์ผํ˜•ํƒœ๋กœ ์ €์žฅ๋จ
  • ๊ฐ ๋ ˆ์ด์–ด๋ณ„๋กœ ํŒŒ์ผ์ด ๋”ฐ๋กœ๋”ฐ๋กœ ์ €์žฅ๋จ
  • ์ด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ํ•˜๋‚˜์˜ applicationn process๋กœ running ์ค‘ -> container
  • container
    • ๋™์ž‘ ์ค‘์ธ process
  • container image
    • ํŒŒ์ผ

๋™์ž‘ ๋ฐฉ์‹

png

  • $docker search nginx
    • docker hub์— nginx container image ์žˆ๋Š”์ง€ search, ์žˆ์œผ๋ฉด ๋ฆฌ์ŠคํŠธ๋กœ ๋ฝ‘์•„์คŒ
    • docker hub
      • ์ปจํ…Œ์ด๋„ˆ image๋ฅผ ์ €์žฅํ•ด ๋†“๊ณ  ์žˆ๋Š” ์ฐฝ๊ณ 
      • ์•ฝ 10๋งŒ์—ฌ๊ฐœ ๋„˜๊ฒŒ ์žˆ์Œ
  • $docker pull nginx:latest
    • ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์šฐ๋ฆฌ hdd๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ
    • ์•„์ง ์ปจํ…Œ์ด๋„ˆ ์•„๋‹˜
  • $docker run โ€“d โ€“name web -p 80:80 nginx:latest
    • ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ปจํ…Œ์ด๋„ˆํ™” ์‹œํ‚ด
    • docker ํ”Œ๋žซํผ ์œ„์— ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ ๋™์ž‘
    • nginx๋ผ๋Š” ์›น ์„œ๋ฒ„๊ฐ€ ์›น์ด๋ผ๋Š” ์ด๋ฆ„์˜ค๋กœ ์ปจํ…Œ์ด๋„ˆ ํ™” ๋˜์–ด์„œ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ application ์ด ๋จ

์‹ค์Šต

1. docker daemon์ด ๋™์ž‘์ค‘์ธ์ง€ ํ™•์ธ

  • $ systemctl status docker

png

  • active(running) -> ํ˜„์žฌ docker ์ž˜ ์‹คํ–‰๋จ
  • enabled -> ๋‹ค์Œ ๋ถ€ํŒ…์‹œ์—๋„ ์ž˜ ์‹คํ–‰๋จ

png

  • ๋‚ด๊ฐ€ ์›ํ•˜๋Š” container image๊ฐ€ docker hub์— ์žˆ๋Š”์ง€ search
  • permission denied error
    • Got permission denied while trying to connect to the Docker daemon socket
    • ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ /var/run/docker.sock๋ฅผ ์ ‘๊ทผํ•˜๋ คํ–ˆ์ง€๋งŒ ๊ถŒํ•œ์ด ์—†์–ด ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ
    • ์‚ฌ์šฉ์ž๊ฐ€ root:docker ๊ถŒํ•œ ๊ฐ–๊ณ  ์žˆ์–ด์•ผํ•จ
      • ์‚ฌ์šฉ์ž๋ฅผ docker group ์— ํฌํ•จ์‹œํ‚ค๋ฉด ๋จ
      • sudo usermod -a -G docker $USER
      • ์œ„ ๋ช…๋ น ํ›„ ์‹œ์Šคํ…œ ์žฌ๊ตฌ๋™

3. image ํ™•์ธ

  • $ docker images
    • ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋ญ ์žˆ๋Š”์ง€ ํ™•์ธ png

4. image pull

  • hub์— ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์šฐ๋ฆฌ ์‹œ์Šคํ…œ์— ๋‹ค์šด๋กœ๋“œ
  • $ docker pull nginx
  • ์•„์ง ์ปจํ…Œ์ด๋„ˆ ์•„๋‹˜

png

5. docker run

  • ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ํ•˜๊ณ  ํ™•์ธ
  • ์‹คํ–‰ ํ›„ ๋œจ๋Š” ๋ฌธ์ž๋“ค -> uniqueํ•œ container id

png

  • ํ™•์ธ png