๐ ๊ณต๋ถ ๊ณ๊ธฐ
์ถ๊ฐ์ ์ธ ๋์ปค ๊ณต๋ถ๋ฅผ ์ํด ์ ํ๋ธ ๋ฐ๋ฐฐ๋ ๋์ปค ์๋ฆฌ์ฆ๋ฅผ ๋ณด๋ฉด์ ์ ๋ฆฌํด ๋ด ๋๋ค.
๋ชฉ์ฐจ
๐8-1. Docker Container Storage : ์ด๋ก
1๏ธโฃ ์ปจํ ์ด๋ ๋ณผ๋ฅจ์ด ๋ญ์์?
์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ readonly์ด๋ค
์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ปจํ ์ด๋๋ก ๋๋ฆฌ๊ฒ ๋๋ฉด RW (ReadWrite) ๋ ์ด์ด๊ฐ ์ถ๊ฐ๋๊ณ ์ปจํ ์ด๋์ ์ถ๊ฐ๋๋ ๋ฐ์ดํฐ๋ค์ด ์ด๊ณณ์ ์ ์ฅ๋๊ฒ ๋๋ค.
์ด์ฒ๋ผ ๊ธฐ์กด์ readonly ๋ ์ด์ด์ readwrite ๋ ์ด์ด๋ฅผ ์ฌ๋ ค ๋ง์น ํ๋์ธ ๊ฒ์ฒ๋ผ ๊ด๋ฆฌํ๊ณ ๋ณด์ฌ์ฃผ๊ฒ ๋๋๋ฐ
์ด๋ฅผ union file system(๋ค๋ฅธ๋ง๋ก overlay) ์ด๋ผ๊ณ ํ๋ค.
์ด๋ ๊ฒ ํ๋์ฒ๋ผ ์ด์๋๋ ์ปจํ ์ด๋๋ ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ๋ฉด rw๋ ์ด์ด ๋ฐ์ดํฐ๊น์ง ์ง์๋ฒ๋ฆฌ๊ฒ ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ณด์กดํด์ผํ๋๋ฐ!
๊ทธ๋์ ์ปจํ ์ด๋๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด ๋ฐ๋ก ๋ณผ๋ฅจ์ด๋ค.
์ปจํ ์ด๋ rw ๋ ์ด์ด์ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก์ ํธ์คํธ ์ ์ฅ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํ์ฌ rw๋ ์ด์ด์ ์์ผ ๋ฐ์ดํฐ๋ฅผ ํธ์คํธ ์ปดํจํฐ ์ ์ฅ์์ ์์ด๊ฒ ํจ์ผ๋ก์จ ์ปจํ ์ด๋ ์ญ์ ์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด์กดํ ์ ์๊ฒ ํ๋ค.
์ด๋ ๊ฒ ์ฐ๊ฒฐํ๋ ๊ฑธ ๋ณผ๋ฅจ ๋ง์ดํธ๋ผ๊ณ ํ๋ค. ๋ช ๋ น์ด๋ก๋ run์ v์ต์ ์ผ๋ก ๊ฐ๋ฅํ๋ค.
docker run [-v ํธ์คํธ๋๋ ํ ๋ฆฌ:์ปจํ
์ด๋๋๋ ํ ๋ฆฌ] <์ด๋ฏธ์ง๋ช
:ํ๊ทธ>
2๏ธโฃ ๋ฐ์ดํฐ๋ฅผ ๋ณด์กดํ๊ณ ์ถ์ด์
-volume ์ต์ ์ฌ์ฉ
-v | <host path> | : | <container mount path> | ๊ธฐ๋ณธ ๋ฐฉ์ | ||
-v | <host path> | : | <container mount path> | : | <read write mode> | *** |
-v | <container mount path> | ํธ์คํธ์ /var/lib/docker ๋ฐ์ UUID ๋๋ ํ ๋ฆฌ ์๋๋ก ์ ์ฅ์์ผ์ค๋ค. |
*** ๋ณด์์ ์ํด ์ปจํ ์ด๋๋ ์ค์ง ํธ์คํธ ๊ฒฝ๋ก์ ๋ฐ์ดํฐ๋ง ์ฝ์ด์ค๊ณ ์ปจํ ์ด๋์ ์์ด๋ ๊ฒ ํธ์คํธ์ ์ํฅ์ด ๊ฐ์ง ์๊ฒ ํ๋ ๊ฒ์ read write mode ์๋ฆฌ์ ro๋ฅผ (readonly)๋ฅผ ์จ์ฃผ๋ฉด ๋๋ค.
3๏ธโฃ ์ปจํ ์ด๋๋ผ๋ฆฌ ๋ฐ์ดํฐ ๊ณต์ ๊ฐ๋ฅํ๊ฐ์?
ํ๋์ ์ปจํ ์ด๋ ๋๋ ํ ๋ฆฌ์ ํธ์คํธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์๊ณ ,
๋ ๋ค๋ฅธ ์ปจํ ์ด๋ ๋๋ ํ ๋ฆฌ์ ๊ทธ ํธ์คํธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ฉด
๋ ์ปจํ ์ด๋๊ฐ ๊ฐ์ ํธ์คํธ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ๋์ด ์ปจํ ์ด๋๋ผ๋ฆฌ ๋ฐ์ดํฐ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค.
ex)
์ปจํ ์ด๋๊ฐ web content๋ฅผ ๋ง๋ค์ด ์ ์ฅํ๋ฉด ๋ค๋ฅธ webserver ์ปจํ ์ด๋๊ฐ ๊ทธ ์์ฑํ web content ํ์ผ์ ๊ฐ์ง๊ณ ์คํ์ ํ ์๊ฐ ์๋ค. ํด๋ผ์ด์ธํธ๋ webserver ์ปจํ ์ด๋์ ์ ์ํ๋ ๊ฒ ๋ง์ผ๋ก๋ web content ์ปจํ ์ด๋๊ฐ ์ ๊ณตํ๋ ๊ฒ๊ณผ webserver๊ฐ ์ ๊ณตํ๋ ๊ฒ์ ๋ค ๋๋ฆด ์ ์๊ฒ ๋๋ค.
๐8-2. Docker Container Storage : ์ค์ต
1๏ธโฃ mysql DB data ์๊ตฌ ๋ณด์กดํ๊ธฐ
1) MySQL ์ปจํ ์ด๋ ์์ฑ ๋ฐ ์คํํ๊ธฐ
*** MySQL DB ์คํํ ๋๋ ๊ด๋ฆฌ์์ ํจ์ค์๋๋ฅผ ํจ๊ป ์ง์ ํด์ค์ผํ๋ค.
ํด๋น ๊ฒฝ๋ก๊ฐ ์์ผ๋ฉด ๋๋ ํ ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์์ฑํจ
# docker run [-d] [--name ์ปจํ
์ด๋๋ช
] [-v ํธ์คํธ๊ฒฝ๋ก:์ปจํ
์ด๋๊ฒฝ๋ก] [-e ํ๊ฒฝ๋ณ์=๊ฐ] <์ด๋ฏธ์ง:ํ๊ทธ>
docker run -d --name db -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
2) ์ปจํ ์ด๋ ์์ MySQL์ ์ ์ํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑํด๋ณด๊ธฐ
์ปจํ ์ด๋๋ฅผ ํฐ๋ฏธ๋๋ก ์ฐ๊ฒฐํด์ mysql์ ์ ์
๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ธ๊น์ง!
์ปจํ ์ด๋ ์์ ttabae๋ผ๋ DB๋ฅผ ์์ฑํ์ผ๋ ํธ์คํธ ์ฐ๊ฒฐ๋ ๊ฒฝ๋ก์๋ ttabae๊ฐ ์ฐ๊ฒฐ๋ฌ๋ ์ง ํ์ธํ๋ฉด ๋๋ค.
ํธ์คํธ ๊ฒฝ๋ก์ ๋ค์ด๊ฐ ์กฐํํ๋ ttabae๊ฐ ์๋ ๊ฒ์ ํ์ธ!
3) ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ์ ๋๋ ๋จ์๋์ง ํ์ธ
4) ํธ์คํธ ๊ฒฝ๋ก ์์ด ์ปจํ ์ด๋ ๊ฒฝ๋ก๋ง ์ค์ ํ๊ฒ ๋๋ฉด?
# docker run [-d] [--name ์ปจํ
์ด๋๋ช
] [-v ์ปจํ
์ด๋๊ฒฝ๋ก] [-e ํ๊ฒฝ๋ณ์=๊ฐ] <์ด๋ฏธ์ง:ํ๊ทธ>
docker run -d --name db -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
inspect๋ก ์ปจํ ์ด๋ ์กฐํํ๋ฉด ๋ง์ดํธ ์ ๋ณด์ ํธ์คํธ ์์ค๋ /var/lib/docker/volumes/uuid/_data์ ์ ์ฅ๋๊ฑธ ํ์ธํ ์ ์๋ค.
์ด ์ญ์๋ ์ปจํ ์ด๋๋ฅผ ์ญ์ ํ ํ์ ๋ฐ์ดํฐ๊ฐ ๋จ๋ ๊ฑธ ํ์ธ ํ ์ ์๋ค.
5) docker volume ๊ด๋ฆฌ ๋ช ๋ น์ด
- ๋ณผ๋ฅจ ์กฐํ
docker volume ls
- ๋ณผ๋ฅจ ์ ๊ฑฐ
docker volume rm ๋ณผ๋ฅจUUID
2๏ธโฃ ์น๋ฐ์ดํฐ readonly ์๋น์ค๋ก ์ง์ํ๊ธฐ
์น ์ปจํ ์ธ ๋ฅผ ์์ฑํ๊ณ ๊ทธ๊ฑธ nginx๋ก ์ด์ํ๋ webserver๋ก ์๋น์ค ํ ์ ์๊ฒ ํ๋ ์ค์ต
๐ข ์ฌ๊ธฐ์๋ถํฐ๋ ๋ฒ์ธ์ผ๋ฐ์ค์์ ip์ฐ๊ฒฐ ๋ฌธ์ ๋ก ์ด์๊ฐ ์๊ฒจ์ wsl๋ก ์งํ
1) ์น ์ปจํ ์ธ ์์ฑํ๊ธฐ
ํด๋ ํ๋ ๋ง๋ค๊ณ ๊ทธ ์์ ๋จ์ ํ๊ทธ๋ฅผ ์ถ๋ ฅํด index.html์ ํ๋ ์์ฑํ๋ค
2) ์น์๋ฒ ์๋น์คํ index.html์ ํธ์คํธ ํ์ผ๋ก ๊ต์ฒด
# docker run [-d] [--name ์ปจํ
์ด๋๋ช
] [-v ํธ์คํธ๊ฒฝ๋ก:์ปจํ
์ด๋๊ฒฝ๋ก:์ฝ๊ธฐ์ฐ๊ธฐ๋ชจ๋] /
# [-p ํธ์คํธํฌํธ:์ปจํ
์ดํฐํฌํธ] <์ด๋ฏธ์ง๋ช
:ํ๊ทธ>
docker run -d --name web -v /webdata:/usr/share/nginx/html:ro -p 80:80 nginx:1.14
3๏ธโฃ ์ปจํ ์ด๋๊ฐ ๋ฐ์ดํฐ ๊ณต์ ํ๊ธฐ
๋์คํฌ ์ฌ์ฉ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ง๋ค์ด๋ด๋ ์ปจํ ์ด๋๋ฅผ ๋ง๋ค์ด
* ๋์คํฌ ์ฌ์ฉ๋ ๋ชจ๋ํฐ๋ง
๋์คํธ ๋ชจ๋ํฐ๋ง ํ ๋ ์ฌ์ฉํ๋ df ๋ช ๋ น์ด (disk free) ์ h์ต์ (human/์ฌ๋์ด ๋ณด๊ธฐ์ข์ ํฌ๊ธฐ๋จ์ํ์) ๋ก ๋์คํฌ ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋ง
df -h /
๐ฉ ์ผ๋จ ์ด๊ฑธ ์ค์ตํ๊ธฐ ์ํ ํ์ผ ์์ฑ
โ mkdir๋ก lab8์ด๋ผ๋ ํด๋ ์์ฑ
โก lab8๋ก ์ด๋
โข vi๋ก ๋น์ฅฌ์ผ์๋ํฐ ์ด์ด df.sh ํ์ผ ์์ฑ
๊ทธ ์์ ์์คํฌ๋ฆฝํธ ๋ด์ฉ์ ์์ฑ
์คํฌ๋ฆฝํธ | ์ค๋ช |
#! /bin/bash | #!์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์์ ์ง์ ํ๋ ์ ์ธ๋ฌธ ์ด ์คํฌ๋ฆฝํธ๋ /bin/bash๋ผ๋ bash์์ ์คํํ๋ค๊ณ ํ๋ ๊ฒ |
mkdir -p /webdata | mkdir(make directory)๋ก ๋๋ ํ ๋ฆฌ ์์ฑ p์ต์ (parents)์ ๊ธฐ์กด ๋๋ ํ ๋ฆฌ๊ฐ ์กด์ฌํด๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๊ณ ํ์๊ฒฝ์ฐ ๋ถ๋ชจ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๋ค. |
while true | ๋ฐ๋ณต๋ฌธ์ผ๋ก ์กฐ๊ฑด์ true๋ก ํ๊ธฐ์ ๋ฌดํ ๋ฐ๋ณต |
do | ๋ฐ๋ณต๋ ๋ถ๋ถ์ ์์ ํ์ |
df -h / > /webdata/index.html | df ๋ช
๋ น์ด๋ก (disk free) ๋์คํฌ ์ฌ์ฉ๋์ ๋ณด๋ฉฐ h์ต์ (human)์ผ๋ก ์ฌ๋์ด ๋ณด๊ธฐ ์ข์ ํฌ๊ธฐ๋จ์๋ก ํ์ํ๋ค > (๋ฆฌ๋ค์ด๋ ์ )์ ๋ณดํต command > filename๊ณผ ๊ฐ์ ํํ๋ก ์ฌ์ฉํ๋ฉฐ, ํ์ค ์ ๋ ฅ์ ์ ๋ฌ ๋๋ ํ์ค ์ถ๋ ฅ์ ํ์ผ๋ก ์ ์ฅ ๋ฐ๋ผ์ ๋์คํฌ ์ฌ์ฉ๋์ ์ ๊ฒฝ๋ก์ index.htmlํ์ผ๋ก ์ ์ฅํ๋ค๋ ๋ป |
sleep 10 | 10์ด ์ผ์์ ์ง |
done | ๋ฐ๋ณต๋ฌธ ์ค ํ๋๋ก do์ ์ง์ ์ด๋ฃจ์ด ๋ฐ๋ณต๋ ๋ถ๋ถ ๋ซ๋ ์ญํ |
โฃ cat์ผ๋ก df.sh ๋ด์ฉ ๋ค์ ํ์ธ
โค dockerfile๋ vi๋ก ์์ฑํ๊ณ cat์ผ๋ก ํ์ธ
์คํฌ๋ฆฝํธ | ์ค๋ช |
FROM ubuntu:20.04 | ๋ฒ ์ด์ค์ด๋ฏธ์ง๋ฅผ ubuntu:20.04์์ |
ADD df.sh /bin/df.sh | ์ปจํ ์ด๋ ๋น๋์ ํธ์คํธ์ df.sh ํ์ผ์ ์ปจํ ์ด๋ /bin/df.sh๋ก ๋ณต์ฌ |
RUN chmod +x /bin/df.sh | /bin/df.sh์ ๊ถํ ์ค์ ํ๋ chmod (change mode) ๋ช ๋ น์ด๋ก +x ์์ฑ(executable/์คํ๊ฐ๋ฅ) ์ ์ฃผ๋ ๋ช ๋ น์ด๋ฅผ ์คํ |
ENTRYPOINT["/bin/df.sh"] | /bin/df.sh ์คํ |
โฅ ๋์ปค ์ด๋ฏธ์ง ๋น๋ ๋ฐ ํ์ธ
๐ฉ ์์ฑํ ํ์ผ๊ณผ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง๊ณ ์ปจํ ์ด๋๋ฅผ ๋๋ ค ์๋ ๊ตฌ์กฐ๋ก ์ฐ๊ฒฐ
โ index.html์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ง๋๋ ์ปจํ ์ด๋ df ์์ฑ ๋ฐ ์คํ
docker run -d -v /webdata:/webdata --name df df:latest
โก ์์ฑ๋ index.html์ ํด๋ผ์ด์ธํธ๋ก ์ฐ๊ฒฐํ web server ์ปจํ ์ด๋ web ์์ฑ ๋ฐ ์คํ
docker run -d --name web -v /webdata:/usr/share/nginx/html:ro -p 80:80 nginx:1.14
โข ๊ฒฐ๊ณผ
'DevOps > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐ๋ฐฐ๋ ๋์ปค ์๋ฆฌ์ฆ 10] ๋น๋์์ ์ด์๊น์ง (docker compose) (0) | 2023.04.23 |
---|---|
๋ฐ๋ฐฐ๋ ๋์ปค ์๋ฆฌ์ฆ 9] ์ปจํ ์ด๋๊ฐ ํต์ (๋คํธ์ํฌ) (0) | 2023.04.23 |
๋ฐ๋ฐฐ๋ ๋์ปค ์๋ฆฌ์ฆ 7] ์ปจํ ์ด๋ ๊ด๋ฆฌ (0) | 2023.04.15 |
๋ฐ๋ฐฐ๋ ๋์ปค ์๋ฆฌ์ฆ 6] ์ปจํ ์ด๋ ์ฌ์ฉํ๊ธฐ (0) | 2023.04.14 |
๋ฐ๋ฐฐ๋ ๋์ปค ์๋ฆฌ์ฆ 5] ์ปจํ ์ด๋ ๋ณด๊ด์ฐฝ๊ณ Registry (0) | 2023.04.13 |