Docker Volume

dazziยท2024๋…„ 1์›” 15์ผ
0

Docker

๋ชฉ๋ก ๋ณด๊ธฐ
3/6
post-thumbnail

๐Ÿ’ญDocker Volume?

- ๋„์ปค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋งˆ๋‹ค ๋…์ž์ ์ธ ์ €์žฅ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์„ ๊ฒฝ์šฐ ํ•จ๊ป˜ ์‚ฌ๋ผ์ง„๋‹ค.
- ์ด๋Ÿฐ ์ด์Šˆ๋กœ ๋„์ปค๋Š” ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ๋ฐฉ๋ฒ•์„ ์ง€์›ํ•˜๋Š”๋ฐ ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ docker volume์ด๋‹ค.

๋„์ปค ๋ณผ๋ฅจ ์ƒ์„ฑํ•˜๊ธฐ

-v <docker volume ์ด๋ฆ„>:<์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ๋กœ>

[root@localhost]\# IMAGE=centos
[root@localhost]\# CONT=myvol01
[root@localhost]\# docker container run -it --name $CONT -v docker_vol:/cont_vol $IMAGE

# ์ƒ์„ฑ๋œ ๋ณผ๋ฅจ ํ™•์ธํ•˜๊ธฐ
[root@localhost]\# docker volume ls
DRIVER    VOLUME NAME
local     docker_vol

์ƒ์„ฑํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ inspect ํ•˜์—ฌ ๋งˆ์šดํŠธ ์ •๋ณด ๊ด€์ฐฐํ•˜๊ธฐ


- ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋งˆ์šดํŠธ ๋œ ๋””๋ ‰ํ† ๋ฆฌ์™€ ๋งค์นญ๋˜๋Š” ๋กœ์ปฌ ๊ฒฝ๋กœ๋Š” ๋„์ปค ๋ณผ๋ฅจ์˜ ๋งˆ์šดํŠธ ํƒ€์ž…๋งˆ๋‹ค ์ƒ์ด

bind

- bind ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์˜ ์„ ์–ธ๋œ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์— ๋งˆ์šดํŠธ ๋œ๋‹ค.
- ๋ณธ์ธ์˜ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ , ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๊ฐ€ ๋ถ„์‚ฐ๋˜์–ด ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.
-v <ํ˜ธ์ŠคํŠธ์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ>:<์ปจํ…Œ์ด๋„ˆ์—์„œ ๋งˆ์šดํŠธ๋˜๋Š” ๊ฒฝ๋กœ>[:rw|ro]

volume

- Docker.์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ํ˜ธ์ŠคํŠธ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€ (Linux์˜ ๊ฒฝ์šฐ, /var/lib/docker/volumes) ์— ์ €์žฅ๋œ๋‹ค.
- Docker์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๊ณต์‹๋ฌธ์„œ์— ๊ธฐ์žฌ๋˜์–ด์žˆ๋‹ค.
-v <๋ณผ๋ฅจ ์ด๋ฆ„>:<์ปจํ…Œ์ด๋„ˆ์—์„œ ๋งˆ์šดํŠธ๋˜๋Š” ๊ฒฝ๋กœ>[:rw|ro]

tmpfs

- ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค.
- ๋ณด์•ˆ ํ˜น์€ ๋น„์˜๊ตฌ ์ƒํƒœ ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ์ด์œ ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์œผ๋ ค๋Š” ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ์ž˜ ์‚ฌ์šฉ๋œ๋‹ค.
--tmpfs <์ปจํ…Œ์ด๋„ˆ์—์„œ ๋งˆ์šดํŠธ๋˜๋Š” ๊ฒฝ๋กœ>

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณผ๋ฅจ ๋งˆ์šดํŠธ๋ฅผ ํ•˜๋ฉด volume ํƒ€์ž…์œผ๋กœ ๋งˆ์šดํŠธ ๋œ๋‹ค.

[container]\# echo 'Hello, Volume!' > /cont_vol/test/hello.txt
[root@localhost]\# docker container inspect --format='{{json .Mounts}}' $CONT | jq
[
  {
    "Type": "volume",
    "Name": "docker_vol",
    "Source": "/var/lib/docker/volumes/docker_vol/_data",
    "Destination": "/cont_vol",
    "Driver": "local",
    "Mode": "z",
    "RW": true,
    "Propagation": ""
  }
]

-v <volume์ด๋ฆ„>:<๋งˆ์šดํŠธ ๊ฒฝ๋กœ> ์˜ต์…˜์ด ๊ฐ๊ฐ Source์™€ Destination ์œผ๋กœ ๋งค์นญ๋œ๋‹ค.

[root@localhost]\# tree /var/lib/docker/volumes
/var/lib/docker/volumes/
โ”œโ”€โ”€ docker_vol
โ”‚   โ””โ”€โ”€ _data
โ”‚       โ””โ”€โ”€ test
โ”‚           โ””โ”€โ”€ hello.txt

rw (์ฝ๊ธฐ ์“ฐ๊ธฐ ํ—ˆ์šฉ) ro (์ฝ๊ธฐ ์ „์šฉ) ๋””๋ ‰ํ† ๋ฆฌ

[:rw|ro] ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
- ๊ถŒํ•œ์„ ๋ช…์‹œํ•˜์ง€ ์•Š์„์‹œ rw๊ฐ€ ๊ธฐ๋ณธ๊ฐ’

[root@localhost]\# docker container run -it --name $CONT -v writable:/dirw -v readonly:/read_only:ro $IMAGE
[container]\# echo 'can write' >> /dirw/test # ์ •์ƒ์ ์œผ๋กœ ์“ฐ๊ธฐ ๊ฐ€๋Šฅ
[container]\# echo 'cannot write' >> /read_only/test # ์—๋Ÿฌ ๋ฐœ์ƒ
bash: /read_only/test: Read-only file system
[root@localhost]\# docker inspect --format='{{json .Mounts}}' | jq

-ํ™•์ธ์‹œ "RW" ๊ฐ€ true/false(๊ถŒํ•œ) ๊ฐ’์ด ๋‹ค๋ฅธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ถœ์ฒ˜: https://tech.cloudmt.co.kr/2022/06/29/๋„์ปค์™€-์ปจํ…Œ์ด๋„ˆ์˜-์ดํ•ด-2-3-๋ณผ๋ฅจ๊ณผ-๋„คํŠธ์›Œํฌ/

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด