Search

[CKA] 53. Storage in Docker

Date
2025/01/24
Category
Devops
Tag
Kubernetes
CKA
Storage
๋ชฉ์ฐจ

ย File System

๋„์ปค(Docker)๊ฐ€ ์„ค์น˜๋˜๋ฉด /var/lib/docker ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์ด ํด๋”๋Š” ๋„์ปค๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณณ์œผ๋กœ, aufs, containers, image, volumes ๋“ฑ์˜ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ–๋Š”๋‹ค.

ย Layered Architecture

ย Image Layer

๋„์ปค๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ๋ ˆ์ด์–ด ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Dockerfile์˜ ๊ฐ ๋ช…๋ น์–ด๋Š” ์ด์ „ ๋ ˆ์ด์–ด์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ํฌํ•จํ•˜์—ฌ ๋„์ปค ์ด๋ฏธ์ง€์˜ ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
์ฐธ๊ณ : Container & Image
FROM Ubuntu RUN apt-get update && apt-get -y install python RUN pip install flask flask-mysql COPY . /opt/source-code ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask fun
Docker
๋ณต์‚ฌ
โ€ข
Layer 1 - ๊ธฐ๋ณธ Ubuntu ์šด์˜ ์ฒด์ œ
โ€ข
Layer2 - apt ํŒจํ‚ค์ง€ ์„ค์น˜
โ€ข
Layer3 - python ํŒจํ‚ค์ง€ ์„ค์น˜
โ€ข
Layer4 - ์†Œ์Šค ์ฝ”๋“œ ๋ณต์‚ฌ
โ€ข
Layer5 - ์—”ํŠธ๋ฆฌํฌ์ธํŠธ ์—…๋ฐ์ดํŠธ
๊ฐ ๋ ˆ์ด์–ด๋Š” ์ด์ „ ๋ ˆ์ด์–ด์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ์ €์žฅํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ ๋•์— ์ „์ฒด ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค.

ย Container Layer

์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋Š” docker build ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ์ฝ๊ธฐ ์ „์šฉ(read-only)์ด๋‹ค. ๋ ˆ์ด์–ด๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒˆ๋กœ ๋นŒ๋“œํ•ด์•ผ ํ•œ๋‹ค. ์ด ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜์œผ๋กœ docker run ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด ์œ„์— ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ(Writable) ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‹คํ–‰๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•ด๋‹น ์“ฐ๊ธฐ ๊ฐ€๋Šฅ ๋ ˆ์ด์–ด๋ฅผ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด๋ผ๊ณ  ํ•˜์ž. ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด๋Š” ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋งŒ ๊ฐ–๋Š” ๋ ˆ์ด์–ด๋กœ, ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ™์€ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง„๋‹ค. ๋”ฐ๋ผ์„œ ์ปจํ…Œ์ด๋„ˆ์—์„œ์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ์—๋งŒ ์ ์šฉ๋˜๋ฉฐ, ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋Š” ์œ ์ง€๋œ๋‹ค. ์ด๋กœ ์ธํ•ด ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋™์ผํ•œ ์ด๋ฏธ์ง€๋ฅผ ๊ณต์œ ํ•˜๋ฉด์„œ๋„ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

ย Copy-On-Write Mechanism

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

ย Volumes

๋„์ปค์˜ ์“ฐ๊ธฐ ๊ฐ€๋Šฅ ๋ ˆ์ด์–ด, ์ฆ‰ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ด์–ด๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ์™€ ๊ฐ™๋‹ค๊ณ  ํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ Copy-On-Write Mechanism์„ ํ†ตํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฃผ๋”๋ผ๋„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œ ๋˜๋Š” ์žฌ์‹œ์ž‘ํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์—†๋‹ค. ๋ฐ์ดํ„ฐ ์œ ์ง€๋ฅผ ์œ„ํ•ด ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Create Volume

# docker volume create <volume_name> docker volume create data_volume
Docker
๋ณต์‚ฌ
๋จผ์ € ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ์„ ํ•ด์ค€๋‹ค. ๋ณผ๋ฅจ์„ ์ƒ์„ฑํ•˜๋ฉด /var/lib/docker/volume ๋””๋ ‰ํ† ๋ฆฌ ํ•˜์œ„์— ์ƒ์„ฑํ•œ ๋ณผ๋ฅจ ์ด๋ฆ„์˜ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
# docker run -v <volume_name>:<container_dir_for_mount> <image_name> docker run -v data_volume:/var/lib/mysql mysql
Docker
๋ณต์‚ฌ