์ด๋ฒ ํฌ์คํธ์์๋ Docker Volume์ ๋ํด ์ฌ๋ ์๊ฒ ๋ค๋ฃจ์ด๋ณด๊ฒ ์ต๋๋ค Docker Volume์ ์ปจํ ์ด๋์ ๋ฐ์ดํฐ๋ฅผ ์์์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด ๊ธ์์๋ Docker Volume์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ์ค์ต ์์ ๊น์ง ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
Docker Volume์ด๋?
Docker Volume์ ์ปจํ ์ด๋์ ํ์ผ ์์คํ ๊ณผ ํธ์คํธ ์์คํ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ณต์ ํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
์ปจํ ์ด๋๋ ์ผ์์ ์ธ ํ๊ฒฝ์ด๊ธฐ ๋๋ฌธ์, ์ปจํ ์ด๋๊ฐ ์ญ์ ๋๋ฉด ๋ด๋ถ์ ๋ฐ์ดํฐ๋ ํจ๊ป ์ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Docker Volume์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํธ์คํธ์ ์ ์ฅํจ์ผ๋ก์จ, ์ปจํ ์ด๋์ ์๋ช ๊ณผ ๋ฌด๊ดํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด์กดํ ์ ์์ต๋๋ค.
์ฃผ์ ํน์ง
- ๋ฐ์ดํฐ ์์์ฑ: ์ปจํ ์ด๋๊ฐ ์ญ์ ๋๋๋ผ๋ ๋ณผ๋ฅจ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ์ ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ณต์ : ์ฌ๋ฌ ์ปจํ ์ด๋๊ฐ ๋์ผํ ๋ณผ๋ฅจ์ ๋ง์ดํธํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
- ๋ฐฑ์ ๋ฐ ๋ณต๊ตฌ ์ฉ์ด: ํธ์คํธ์ ์ ์ฅ๋ ๋ณผ๋ฅจ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋ฐฑ์ ํ๊ณ ๋ณต๊ตฌํ ์ ์์ต๋๋ค.
- ๋ณด์ ๋ฐ ๊ฒฉ๋ฆฌ: ํธ์คํธ์ ์ปจํ ์ด๋ ๊ฐ์ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ ์ดํ ์ ์์ต๋๋ค.
Docker Volume ์์ฑ ๋ฐ ๊ด๋ฆฌ
Docker Volume์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๋ณผ๋ฅจ ์์ฑํ๊ธฐ
๋ณผ๋ฅจ์ ์์ฑํ๋ ค๋ฉด docker volume create ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ณผ๋ฅจ ์ด๋ฆ์ ์ง์ ํ์ง ์์ผ๋ฉด Docker๊ฐ ์๋์ผ๋ก ๋๋คํ ์ด๋ฆ์ ์์ฑํฉ๋๋ค.
docker volume create my-first-volume
์คํ ๊ฒฐ๊ณผ
my-first-volume
๋ณผ๋ฅจ ๋ชฉ๋ก ํ์ธํ๊ธฐ
ํ์ฌ Docker์ ์์ฑ๋ ๋ชจ๋ ๋ณผ๋ฅจ์ ํ์ธํ๋ ค๋ฉด docker volume ls ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
docker volume ls
์์ ์ถ๋ ฅ
DRIVER VOLUME NAME
local my-first-volume
๋ณผ๋ฅจ ์ญ์ ํ๊ธฐ
๋ถํ์ํ ๋ณผ๋ฅจ์ ์ญ์ ํ๋ ค๋ฉด docker volume rm ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋จ, ๊ธฐ๋ณธ ์ ๊ณต๋๋ ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ์ ๋ณผ๋ฅจ์ ์ญ์ ํ ์ ์์ต๋๋ค.
docker volume rm my-first-volume
์คํ ๊ฒฐ๊ณผ
my-first-volume
๊ธฐ๋ณธ ์ ๊ณต๋๋ ๋ณผ๋ฅจ์ ์ญ์ ํ ์ ์์ผ๋ฉฐ, ์ญ์ ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
docker volume rm bridge
์คํ ๊ฒฐ๊ณผ
Error response from daemon: bridge is a pre-defined volume and cannot be removed
์ปจํ ์ด๋์ ๋ณผ๋ฅจ ๋ง์ดํธํ๊ธฐ
์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋ -v ์ต์ ์ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ์ ๋ง์ดํธํ ์ ์์ต๋๋ค.
๋ณผ๋ฅจ ์ด๋ฆ๊ณผ ์ปจํ ์ด๋ ๋ด๋ถ์ ๋ง์ดํธํ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.
๋ณผ๋ฅจ์ ์ปจํ ์ด๋์ ์ฐ๊ฒฐํ๊ธฐ
์๋ ์์ ์์๋ busybox-volume์ด๋ผ๋ ๋ณผ๋ฅจ์ /data ๋๋ ํ ๋ฆฌ์ ๋ง์ดํธํ์ฌ busybox ์ปจํ ์ด๋๋ฅผ ์คํํฉ๋๋ค.
docker image pull busybox
Using default tag: latest
latest: Pulling from library/busybox
559c60843878: Pull complete
Digest: sha256:2919d0172f7524b2d8df9e50066a682669e6d170ac0f6a49676d54358fe970b5
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
docker volume create busybox-volume
busybox-volume
[๋ณผ๋ฅจ ์ด๋ฆ:์ปจํ ์ด๋ ๋ด๋ถ์ ๋ง์ดํธํ ๊ฒฝ๋ก]
docker container run \
--name busybox \
--rm \
-v busybox-volume:/data \
-it \
busybox \
sh
์คํ ๊ฒฐ๊ณผ
/ # cd /data/
/data # touch busy.dat box.log
/data # ls
box.log busy.dat
/data #
์ปจํ ์ด๋ ๋ด๋ถ์์ ๋ณผ๋ฅจ ์ฌ์ฉํ๊ธฐ
์์์ ์์ฑํ ๋ณผ๋ฅจ์ /data ๋๋ ํ ๋ฆฌ์ ๋ง์ดํธ๋์ด ์์ต๋๋ค.
์ด ๋๋ ํ ๋ฆฌ ์์ ํ์ผ์ ์์ฑํ๋ฉด, ํธ์คํธ์ ๋ณผ๋ฅจ์๋ ๋์ผํ ํ์ผ์ด ์์ฑ๋ฉ๋๋ค.
/data # touch newfile.txt
/data # ls
box.log busy.dat newfile.txt
๋ค๋ฅธ ์ปจํ ์ด๋์์ ๋์ผํ ๋ณผ๋ฅจ ์ฌ์ฉํ๊ธฐ
๋์ผํ ๋ณผ๋ฅจ์ ๋ค๋ฅธ ์ปจํ ์ด๋์์๋ ๋ง์ดํธํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
docker container run \
--name other-busybox \
--rm \
-v busybox-volume:/other-data \
-it \
busybox \
sh
์คํ ๊ฒฐ๊ณผ
/ # cd /other-data/
/other-data # ls
box.log busy.dat newfile.txt
์ปจํ ์ด๋ ์ญ์ ์ ๋ณผ๋ฅจ ๋ฐ์ดํฐ ์ ์ง
์ปจํ ์ด๋๋ฅผ ์ญ์ ํด๋ ๋ณผ๋ฅจ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
๋ค์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ์ฌ ๋์ผํ ๋ณผ๋ฅจ์ ๋ง์ดํธํ๋ฉด ์ด์ ์ ์ ์ฅํ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ๋ค๋ฅธ ์ปจํ ์ด๋ ์์ฑ (๋ค๋ฅธ ํฐ๋ฏธ๋์ฐฝ ์์ฑ)ํด์ ํ์ธ.
docker container run \
--name busybox \
--rm \
-v busybox-volume:/data \
-it \
busybox \
sh
์คํ ๊ฒฐ๊ณผ
other-busybox๋ผ๋ ์ปจํ ์ด๋ ์์ other-data ๋๋ ํ ๋ฆฌ๊ฐ ๋ง์ดํธ ๋๊ฑธ ๋ณผ์ ์์.
/ # cd /data/
/data # ls
box.log busy.dat newfile.txt
์ปจํ ์ด๋์ ๋คํธ์ํฌ ์ฐ๊ฒฐ ํด์ ํ๊ธฐ
์ปจํ ์ด๋์ ๋ณผ๋ฅจ์ ์ฐ๊ฒฐ์ ํด์ ํ๋ ค๋ฉด, ๋จผ์ ์ปจํ ์ด๋๋ฅผ ์ค์งํ๊ณ ์ญ์ ํ ํ ๋ณผ๋ฅจ์ ์ญ์ ํด์ผ ํฉ๋๋ค.
๋๋ docker container inspect ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ดํธ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
docker container inspect busybox
์ฃผ์ ์ ๋ณด ํ์ธ
"Mounts": [
{
"Type": "volume",
"Name": "busybox-volume",
"Source": "/var/lib/docker/volumes/busybox-volume/_data",
"Destination": "/data",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
]
Dockerfile์์ ๋ณผ๋ฅจ ์ง์ ํ๊ธฐ
Dockerfile ๋ด์์ VOLUME ์ง์์ด๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณผ๋ฅจ์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ ํธ์คํธ๋ ๋ค๋ฅธ ์ปจํ ์ด๋์ ๊ณต์ ํ ์ ์๊ฒ ํด์ค๋๋ค.
# Node ์ค์น. (์ด๋ฏธ์ง ๊ด์ - ๋งจ ์๋ Layer (Base image))
# FROM ๋ฒ ์ด์ค ์ด๋ฏธ์ง
ARG NODE_VERSION
FROM node:${NODE_VERSION}
# ์์ค์ฝ๋ ๋ค์ด๋ก๋
# COPY <๋ณต์ฌํ ๊ฒฝ๋ก> <๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ํ ๊ฒฝ๋ก>
COPY . /app
# ์์ค์ฝ๋์ ์ต์๋จ ๋๋ ํ ๋ฆฌ๋ก ์ด๋
WORKDIR /app
# ์์ค์ฝ๋๋ฅผ ์คํํ ๋ ํ์ํ ํ์ผ ๋ค์ด๋ก๋ (npm ci)
# ์์ค์ฝ๋๋ฅผ ๋น๋ (npm run build)
RUN npm ci \
&& npm run build
# ํ๊ฒฝ๋ณ์ ์ ์ (PORT)
ENV PORT=3000
# ๋ง์ดํธํ ๋๋ ํ ๋ฆฌ ์ง์
VOLUME /data
# ์์ค์ฝ๋ ์คํ (npm run start)
ENTRYPOINT ["npm", "run", "start"]
Dockerfile ์ค๋ช
- VOLUME /data: ์ปจํ ์ด๋์ /data ๋๋ ํ ๋ฆฌ๋ฅผ ๋ณผ๋ฅจ์ผ๋ก ์ง์ ํ์ฌ ํธ์คํธ๋ ๋ค๋ฅธ ์ปจํ ์ด๋์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์๊ฒ ํฉ๋๋ค.
๋ฐ์ธ๋ ๋ง์ดํธ๋ฅผ ํ์ฉํ ๋ณผ๋ฅจ ์ฌ์ฉ
๋ณผ๋ฅจ ๋ง์ดํธ๋ Docker Volume์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด์ง๋ง, ๋ฐ์ธ๋ ๋ง์ดํธ(Bind Mount)๋ฅผ ์ฌ์ฉํ๋ฉด ํธ์คํธ์ ํน์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ปจํ ์ด๋ ๋ด๋ถ์ ๋ง์ดํธํ ์ ์์ต๋๋ค. ์ด๋ ํธ์คํธ์ ํ์ผ ์์คํ ๊ณผ ์ง์ ์ฐ๋๋๋ฏ๋ก ๊ฐ๋ฐ ํ๊ฒฝ์์ ์์ค ์ฝ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฆ์ ๋ฐ์ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
๋ฐ์ธ๋ ๋ง์ดํธ ์ฌ์ฉ ์์
ํธ์คํธ์ ํน์ ๊ฒฝ๋ก๋ฅผ ์ปจํ ์ด๋์ ๋ง์ดํธํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
docker container run \
--rm \
-it \
-v /Users/daehyunkim/Downloads/mbti-embedded-db/host-volume:/data \
busybox \
sh
์คํ ๊ฒฐ๊ณผ
/ # cd /data/
/data # touch box.log
/data # touch busy.dat
/data # ls
box.log busy.dat
- ํธ์คํธ์ /Users/daehyunkim/Downloads/mbti-embedded-db/host-volume ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ์์ฑํ๋ฉด, ์ปจํ ์ด๋ ๋ด๋ถ์ /data ๋๋ ํ ๋ฆฌ์๋ ๋์ผํ ํ์ผ์ด ์์ฑ๋ฉ๋๋ค.
Example) MySQL ๋ฐ์ดํฐ ์์ํ
Docker Volume์ ํ์ฉํ์ฌ MySQL ๋ฐ์ดํฐ๊ฐ ์ปจํ ์ด๋ ์ญ์ ํ์๋ ์ ์ง๋๋๋ก ์ค์ ํด๋ณด๊ฒ ์ต๋๋ค.
Docker Volume์ ์ฌ์ฉํ MySQL ๋ฐ์ดํฐ ์ ์ง
1. ๋ณผ๋ฅจ ์์ฑ
๋จผ์ , MySQL ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ณผ๋ฅจ์ ์์ฑํฉ๋๋ค.
docker volume create mysql-vol
2. MySQL ์ปจํ ์ด๋ ์คํ
๋ค์ ์กฐ๊ฑด์ ๋ง๊ฒ MySQL ์ปจํ ์ด๋๋ฅผ ์คํํฉ๋๋ค.
- ์ปจํ ์ด๋ ์ด๋ฆ: mysql
- ์ด๋ฏธ์ง: mysql:8.3.0
- ํ๊ฒฝ ๋ณ์:
- MYSQL_ROOT_PASSWORD=pw_root
- MYSQL_DATABASE=db_mbti
- MYSQL_USER=user_mbti
- MYSQL_PASSWORD=pw_mbti
- ์ปจํ ์ด๋ ์ข ๋ฃ ์ ์๋ ์ญ์ : --rm
- ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ: -d
- MySQL ๋ฐ์ดํฐ ์ ์ฅ ๊ฒฝ๋ก: /var/lib/mysql
docker container run \
--name mysql \
--rm \
-d \
-e MYSQL_ROOT_PASSWORD=pw_root \
-e MYSQL_DATABASE=db_mbti \
-e MYSQL_USER=user_mbti \
-e MYSQL_PASSWORD=pw_mbti \
-v mysql-vol:/var/lib/mysql \
mysql:8.3.0
3. MySQL ์๋ฒ์ ์ ์
์ปจํ ์ด๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๋ฉด MySQL ์๋ฒ์ ์ ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค.
docker container exec \
-it \
mysql \
mysql -u user_mbti -p db_mbti
4. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
MySQL ์๋ฒ์ ์ ์ํ ํ, ์๋์ ์ฟผ๋ฆฌ๋ฅผ ์์๋๋ก ์คํํฉ๋๋ค.
- ํ ์ด๋ธ ์์ฑ
CREATE TABLE MBTI_TEST (
mbti_type VARCHAR(4)
);
- ๋ ์ฝ๋ ์ ๋ ฅ
INSERT INTO MBTI_TEST
VALUES
('ENTJ'),
('INTP');
- ๋ ์ฝ๋ ํ์ธ
SELECT * FROM MBTI_TEST;
5. ์ปจํ ์ด๋ ์ญ์ ํ ๋ฐ์ดํฐ ํ์ธ
์ปจํ ์ด๋๋ฅผ ์ญ์ ํ ํ, ๋์ผํ ๋ณผ๋ฅจ์ ๋ง์ดํธํ์ฌ ๋ค์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ฉด ์ด์ ์ ์ ์ฅํ ๋ฐ์ดํฐ๊ฐ ์ ์ง๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
docker container run \
--name mysql \
--rm \
-d \
-e MYSQL_ROOT_PASSWORD=pw_root \
-e MYSQL_DATABASE=db_mbti \
-e MYSQL_USER=user_mbti \
-e MYSQL_PASSWORD=pw_mbti \
-v mysql-vol:/var/lib/mysql \
mysql:8.3.0
- ๋ค์ MySQL ์๋ฒ์ ์ ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ์ธํด๋ณด์ธ์.
docker container exec \
-it \
mysql \
mysql -u user_mbti -p db_mbti
SELECT * FROM MBTI_TEST;
์คํ ๊ฒฐ๊ณผ
+-----------+
| mbti_type |
+-----------+
| ENTJ |
| INTP |
+-----------+
2 rows in set (0.00 sec)
๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ์ ์ง๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ฐ์ธ๋ ๋ง์ดํธ๋ฅผ ์ฌ์ฉํ MySQL ๋ฐ์ดํฐ ์ ์ง
๋ฐ์ธ๋ ๋ง์ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ํธ์คํธ์ ํน์ ๋๋ ํ ๋ฆฌ์ MySQL ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์๋ ์์ต๋๋ค.
์ด๋ ํธ์คํธ์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋๋ค.
1. ํธ์คํธ ๋๋ ํ ๋ฆฌ ์์ฑ
ํธ์คํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
mkdir ~/mysql-bind-mount
2. MySQL ์ปจํ ์ด๋ ์คํ
๋ค์ ์กฐ๊ฑด์ ๋ง๊ฒ MySQL ์ปจํ ์ด๋๋ฅผ ์คํํฉ๋๋ค.
- ์ปจํ ์ด๋ ์ด๋ฆ: mysql
- ์ด๋ฏธ์ง: mysql:8.3.0
- ํ๊ฒฝ ๋ณ์:
- MYSQL_ROOT_PASSWORD=pw_root
- MYSQL_DATABASE=db_mbti
- MYSQL_USER=user_mbti
- MYSQL_PASSWORD=pw_mbti
- ์ปจํ ์ด๋ ์ข ๋ฃ ์ ์๋ ์ญ์ : --rm
- ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ: -d
- MySQL ๋ฐ์ดํฐ ์ ์ฅ ๊ฒฝ๋ก: /var/lib/mysql
- ๋ฐ์ธ๋ ๋ง์ดํธ ๊ฒฝ๋ก: ํธ์คํธ์ ~/mysql-bind-mount๋ฅผ ์ปจํ ์ด๋์ /var/lib/mysql์ ๋ง์ดํธ
docker container run \
--name mysql \
--rm \
-d \
-e MYSQL_ROOT_PASSWORD=pw_root \
-e MYSQL_DATABASE=db_mbti \
-e MYSQL_USER=user_mbti \
-e MYSQL_PASSWORD=pw_mbti \
-v ~/mysql-bind-mount:/var/lib/mysql \
mysql:8.3.0
3. MySQL ์๋ฒ์ ์ ์ ๋ฐ ๋ฐ์ดํฐ ์์ฑ
์ปจํ ์ด๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๋ฉด MySQL ์๋ฒ์ ์ ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค.
docker container exec \
-it \
mysql \
mysql -u user_mbti -p db_mbti
- ํ ์ด๋ธ ์์ฑ
CREATE TABLE MBTI_TEST (
mbti_type VARCHAR(4)
);
- ๋ ์ฝ๋ ์ ๋ ฅ
INSERT INTO MBTI_TEST
VALUES
('ENTJ'),
('INTP');
- ๋ ์ฝ๋ ํ์ธ
SELECT * FROM MBTI_TEST;
4. ์ปจํ ์ด๋ ์ญ์ ํ ๋ฐ์ดํฐ ํ์ธ
์ปจํ ์ด๋๋ฅผ ์ญ์ ํ ํ, ๋์ผํ ๋ฐ์ธ๋ ๋ง์ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ฉด ์ด์ ์ ์ ์ฅํ ๋ฐ์ดํฐ๊ฐ ์ ์ง๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
docker container run \
--name mysql \
--rm \
-d \
-e MYSQL_ROOT_PASSWORD=pw_root \
-e MYSQL_DATABASE=db_mbti \
-e MYSQL_USER=user_mbti \
-e MYSQL_PASSWORD=pw_mbti \
-v ~/mysql-bind-mount:/var/lib/mysql \
mysql:8.3.0
- ๋ค์ MySQL ์๋ฒ์ ์ ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ์ธํด๋ณด์ธ์.
docker container exec \
-it \
mysql \
mysql -u user_mbti -p db_mbti
SELECT * FROM MBTI_TEST;
์คํ ๊ฒฐ๊ณผ
+-----------+
| mbti_type |
+-----------+
| ENTJ |
| INTP |
+-----------+
2 rows in set (0.00 sec)
๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ์ ์ง๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ถ๊ฐ ํ ๋ฐ ์ฃผ์์ฌํญ
Docker Volume์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ํ๊ณผ ์ฃผ์์ฌํญ์ ์์๋๋ฉด ์ข์ต๋๋ค.
์ฌ์ฉ์ ์ ์ ๋ณผ๋ฅจ ์ฌ์ฉ ๊ถ์ฅ
- ๋ช ํํ ๋ค์ด๋ฐ: ๋ณผ๋ฅจ์ ์์ฑํ ๋ ์๋ฏธ ์๋ ์ด๋ฆ์ ์ง์ ํ์ฌ ๊ด๋ฆฌ์ ํธ์์ฑ์ ๋์ ๋๋ค.
- ๋ณด์: ๋ณผ๋ฅจ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ณด์ ์ค์ ์ ์ ์ ํ ๊ด๋ฆฌํฉ๋๋ค.
๋ณผ๋ฅจ๊ณผ ๋ฐ์ธ๋ ๋ง์ดํธ์ ์ฐจ์ด ์ดํดํ๊ธฐ
- ๋ณผ๋ฅจ (Volume): Docker๊ฐ ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ ์ ์ฅ์๋ก, ์ปจํ ์ด๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ณ ์์์ ์ผ๋ก ์ ์ฅํ ์ ์์ต๋๋ค.
- ๋ฐ์ธ๋ ๋ง์ดํธ (Bind Mount): ํธ์คํธ์ ํน์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ปจํ ์ด๋์ ๋ง์ดํธํ์ฌ ํธ์คํธ์ ์ปจํ ์ด๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๊ณต์ ํฉ๋๋ค.
๋ณผ๋ฅจ ๋ฐฑ์ ๋ฐ ๋ณต์
๋ณผ๋ฅจ ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์ ํ๊ณ ๋ณต์ํ๋ ค๋ฉด docker run ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ ์ ์์ต๋๋ค.
๋ณผ๋ฅจ ๋ฐฑ์
docker container run --rm -v mysql-vol:/data -v $(pwd):/backup busybox tar czf /backup/mysql-vol-backup.tar.gz /data
๋ณผ๋ฅจ ๋ณต์
docker container run --rm -v mysql-vol:/data -v $(pwd):/backup busybox tar xzf /backup/mysql-vol-backup.tar.gz -C /
์ต๋ช ๋ณผ๋ฅจ ์ฌ์ฉ ํผํ๊ธฐ
์ต๋ช ๋ณผ๋ฅจ์ ๋ณผ๋ฅจ ์ด๋ฆ์ ์ง์ ํ์ง ์์ Docker๊ฐ ์๋์ผ๋ก ์ด๋ฆ์ ์์ฑํฉ๋๋ค. ์ด๋ ๊ด๋ฆฌ์ ์ด๋ ค์์ ์ด๋ํ ์ ์์ผ๋ฏ๋ก, ๊ฐ๋ฅํ ํ ๋ช ํํ ์ด๋ฆ์ ์ง์ ํ์ฌ ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ณผ๋ฅจ ๋๋ผ์ด๋ฒ ํ์ฉ
ํน์ ์คํ ๋ฆฌ์ง ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, NFS, AWS EBS ๋ฑ ๋ค์ํ ๋๋ผ์ด๋ฒ๋ฅผ ํตํด ๋ณผ๋ฅจ์ ํ์ฅํ ์ ์์ต๋๋ค.
Docker Volume์ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ ์์์ฑ์ ํ๋ณดํ๋ ๋ฐ ํ์์ ์ธ ๊ธฐ๋ฅ์ ๋๋ค. ๋ณผ๋ฅจ์ ์ ์ ํ ํ์ฉํ๋ฉด ์ปจํ ์ด๋๊ฐ ์ญ์ ๋๋๋ผ๋ ๋ฐ์ดํฐ๊ฐ ์์ค๋์ง ์๊ณ , ์ฌ๋ฌ ์ปจํ ์ด๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฐ์ฑ๊ณผ ํ์ฅ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
Docker Volume์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ์์ฑ, ๋ง์ดํธ, ์ค์ต ์์ ๊น์ง ์์ธํ ์ดํด๋ณด์์ต๋๋ค. ๋ํ, ๋ฐ์ธ๋ ๋ง์ดํธ๋ฅผ ํ์ฉํ ๋ณผ๋ฅจ ์ฌ์ฉ๋ฒ๊ณผ ์ค์ ์์ ๋ฅผ ํตํด ์ค์ ํ๊ฒฝ์์์ ํ์ฉ ๋ฐฉ๋ฒ์ ์ตํ์ต๋๋ค.
์ฐธ๊ณ ์๋ฃ
- Docker ๊ณต์ ๋ฌธ์: https://docs.docker.com/
- Docker Volume CLI Reference: Docker Volume Commands
- Docker Hub: Docker Hub Container Image Library | App Containerization
- BusyBox ๊ณต์ ๋ฌธ์: BusyBox
- MySQL ๊ณต์ ๋์ปค ์ด๋ฏธ์ง: MySQL Docker Image
- Docker Networking Best Practices: Networking Best Practices
- Docker Bind Mounts vs Volumes: Bind Mounts vs Volumes
'โ๏ธ Cloud Native > ๐ณ Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Docker] ENTRYPOINT์ CMD์ ๊ด๊ณ (0) | 2025.01.17 |
---|---|
[Docker] Docker Compose: ๋ค์ค ์ปจํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ด๋ฆฌํ๊ธฐ (0) | 2025.01.17 |
[Docker] Docker Network: ๋์ปค ๋คํธ์ํฌ (0) | 2025.01.15 |
[Docker] Docker Container ์คํํ๊ธฐ: ๋จ๊ณ๋ณ ๊ฐ์ด๋ (0) | 2025.01.15 |
[Docker] Docker ์ด๋ฏธ์ง ๋น๋ & ๋ฐฐํฌ (0) | 2025.01.10 |