File System


/var/lib/docker
โ”œโ”€โ”€ aufs
โ”œโ”€โ”€ containers
โ”œโ”€โ”€ image
โ””โ”€โ”€ volumes
  • Docker ๋ฅผ ์„ค์น˜ํ•˜๋ฉด Local File System ์— /var/lib/docker ์™€ ๊ฐ™์€ ํด๋” ๊ตฌ์กฐ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๊ฒฝ๋กœ์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•จ
    • ์—ฌ๊ธฐ์„œ ๋ฐ์ดํ„ฐ๋Š” Docker Host ์—์„œ ์‹คํ–‰๋˜๋Š” Image ์™€ Container ๊ด€๋ จ ํŒŒ์ผ
  • docker system df ๋ช…๋ น์–ด๋กœ Docker ์˜ ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์•Œ ์ˆ˜ ์žˆ์Œ
    • docker system df -v ๋ช…๋ น์–ด๋กœ Image ๋ณ„ ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์•Œ ์ˆ˜ ์žˆ์Œ

Layered Architecture


  • Docker ๊ฐ€ Image ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ Layered Architecture ํ˜•์‹์œผ๋กœ ์ƒ์„ฑ๋ผ์„œ ์ค‘๋ณต๋˜๋Š” Layer ๋Š” ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์ฐจ์ด๊ฐ€ ์žˆ๋Š” Layer ๋งŒ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— Image ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  ๋””์Šคํฌ ๊ณต๊ฐ„๋„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Œ

Copy-On-Write(COW) Mechanism


  • docker build Dockerfile -t mmumshad/my-custom-app ์‹คํ–‰ ์‹œ Read Only ์˜ Image Layers ๊ฐ€ ์ƒ์„ฑ๋จ
  • docker run mmumshad/my-custom-app ์‹คํ–‰ ์‹œ Read Write ์ด ๊ฐ€๋Šฅํ•œ Container Layer ๊ฐ€ Image Layers ์œ„์— ์ƒ์„ฑ๋จ
    • Read Write ์ด ๊ฐ€๋Šฅํ•œ Container Layer ์—๋Š” Container ๊ฐ€ ์ƒ์„ฑํ•œ ๋ฐ์ดํ„ฐ(Application ๋กœ๊ทธ, Container ๋‚ด์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜์ •ํ•œ ํŒŒ์ผ ๋“ฑ)๊ฐ€ ์ €์žฅ๋จ
    • Image ์ƒ์„ฑ ์‹œ ๋ณต์‚ฌํ•ด ๋†“์€ app.py ์™€ ๊ฐ™์€ Application ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ Container Layer ์— ์‚ฌ๋ณธ์„ ์ƒ์„ฑํ•ด์„œ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— Image ์— ์žˆ๋Š” app.py ๋Š” ๋ณ€ํ•˜์ง€ ์•Š์Œ

Volumes


  • docker volume create data_volume
    • ์œ„ ๋ช…๋ น์–ด๋กœ /var/lib/docker/volumes/data_volume ํด๋” ์ƒ์„ฑ
  • docker run -v data_volume:/var/lib/mysql mysql
    • ์œ„ ๋ช…๋ น์–ด๋กœ Container ์˜ Read Write Layer ์™€ Mount ๊ฐ€๋Šฅ
    • docker volume create data_volume ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์คŒ
    • ์ด๋Ÿฐ ๋ฐฉ์‹์„ Volume Mounting ์ด๋ผ๊ณ  ํ•จ
  • docker run -v /data/mysql:/var/lib/mysql mysql
    • ์œ„ ๋ช…๋ น์–ด์ฒ˜๋Ÿผ ๋‹ค๋ฅธ ์œ„์น˜์™€ Mounting ํ•˜๊ณ  ์‹ถ์„ ๋• Mount ํ•  ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅ
    • ์ด๋Ÿฐ ๋ฐฉ์‹์„ Bind Mounting ์ด๋ผ๊ณ  ํ•จ
  • docker run --mount type=bind,source=/data/mysql,target=/var/lib/mysql mysql
    • -v ์˜ต์…˜์€ ๊ตฌ์‹์ด๊ณ  --mount ๊ฐ€ ์‹ ์‹

Storage Drivers


  • Docker ๋Š” Storage Driver ๋ฅผ ํ†ตํ•ด Layered Architecture ๋ฅผ ๊ตฌํ˜„ ๋ฐ ๊ด€๋ฆฌ, Write Layer ์ƒ์„ฑ, Layer ๊ฐ„ ํŒŒ์ผ ์ด๋™๊ณผ ๋ณต์‚ฌ, ์“ฐ๊ธฐ ๋“ฑ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•จ
    • Storage Driver ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ์ข…๋ฅ˜๊ฐ€ ์žˆ๊ณ  ๊ธฐ๋ฐ˜ OS ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉํ•จ
      • AUFS
      • ZFS
      • BTRFS
      • Device Mapper
      • Overlay
      • Overlay2
    • Ubuntu ์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ Storage Driver ๋Š” AUFS
    • Fedora ๋‚˜ CentOS ๊ฐ™์€ OS ๋Š” AUFS ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋‹ˆ Device Mapper ๋ฅผ ์‚ฌ์šฉ
  • Docker ๋Š” OS ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ Storage Driver ๋ฅผ ์ž๋™์œผ๋กœ ์„ ํƒํ•จ

References