[[Docker ๐ณ] 3. ๋์ปค ๋ณผ๋ฅจ์ ํ์ฉํด ๋ฐ์ดํฐ ์ ์ค ๋ฐฉ์งํ๊ธฐ
![[[Docker ๐ณ] 3. ๋์ปค ๋ณผ๋ฅจ์ ํ์ฉํด ๋ฐ์ดํฐ ์ ์ค ๋ฐฉ์งํ๊ธฐ](/images/useBlog/docker.png)
Docker Volume (๋์ปค ๋ณผ๋ฅจ)
์ปจํ ์ด๋๊ฐ ๊ฐ์ง ๋ฌธ์ ์
Docker๋ฅผ ํ์ฉํ๋ฉด ํน์ ํ๋ก๊ทธ๋จ์ ์ปจํ ์ด๋๋ก ๋์ธ ์ ์๋ค. ์ด ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉด ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด์ ์ปจํ ์ด๋๋ฅผ ์คํ์์ผ์ผ ํ๋ค. ์ด ๋, Docker๋ ๊ธฐ์กด ์ปจํ ์ด๋์์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ์ ์์ ํ์ง ์๊ณ , ์๋ก์ด ์ปจํ ์ด๋๋ฅผ ๋ง๋ค์ด์ ํต์งธ๋ก ๊ฐ์๋ผ์ฐ๋ ๋ฐฉ์์ผ๋ก ๊ต์ฒด๋ฅผ ํ๋ค.
์ด๋ฐ ํน์ง ๋๋ฌธ์ ๊ธฐ์กด ์ปจํ ์ด๋๋ฅผ ์๋ก์ด ์ปจํ ์ด๋๋ก ๊ต์ฒดํ๋ฉด, ๊ธฐ์กด ์ปจํ ์ด๋ ๋ด๋ถ์ ์๋ ๋ฐ์ดํฐ๋ ๊ฐ์ด ์ญ์ ๋๋ค.
Docker Volume์ด๋?
๋์ปค ์ปจํ
์ด๋์์ ๋ฐ์ดํฐ๋ฅผ ์์์ ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ค. ๋ณผ๋ฅจ(Volume)์ ์ปจํ
์ด๋ ์์ฒด์ ์ ์ฅ ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์๊ณ , ํธ์คํธ ์์ฒด์ ์ ์ฅ ๊ณต๊ฐ์ ๊ณต์ ํด์ ์ฌ์ฉํ๋ ํํ์ด๋ค.

๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ ๋ช ๋ น์ด
$ docker run **-v [ํธ์คํธ์ ๋๋ ํ ๋ฆฌ ์ ๋๊ฒฝ๋ก]:[์ปจํ
์ด๋์ ๋๋ ํ ๋ฆฌ ์ ๋๊ฒฝ๋ก]** [์ด๋ฏธ์ง๋ช
]:[ํ๊ทธ๋ช
]
[ํธ์คํธ์ ๋๋ ํ ๋ฆฌ ์ ๋ ๊ฒฝ๋ก]์ ๋๋ ํ ๋ฆฌ๊ฐ ์ด๋ฏธ ์กด์ฌํ ๊ฒฝ์ฐ, ํธ์คํธ์ ๋๋ ํฐ๋ฆฌ๊ฐ ์ปจํ ์ด๋์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ฎ์ด์์ด๋ค.
[ํธ์คํธ์ ๋๋ ํ ๋ฆฌ ์ ๋ ๊ฒฝ๋ก]์ ๋๋ ํ ๋ฆฌ๊ฐ ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ, ํธ์คํธ์ ๋๋ ํฐ๋ฆฌ ์ ๋ ๊ฒฝ๋ก์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์๋ก ๋ง๋ค๊ณ ์ปจํ ์ด๋์ ๋๋ ํฐ๋ฆฌ์ ์๋ ํ์ผ๋ค์ ํธ์คํธ์ ๋๋ ํฐ๋ฆฌ๋ก ๋ณต์ฌํด์จ๋ค.
Docker๋ก MySQL ์คํ์์ผ๋ณด๊ธฐ
MySQL ์ด๋ฏธ์ง๋ฅผ ๋ฐํ์ผ๋ก ์ปจํ ์ด๋ ์คํ์ํค๊ธฐ
$ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -d mysql
- ์ฐธ๊ณ )
docker pull๊ณผ์ ์ ์๋ตํด๋ ์๊ด์๋ค. ์๋ํ๋ฉดdocker run mysql๋ก ์คํ์์ผฐ์ ๋, ๋ก์ปฌ์ ์ด๋ฏธ์ง๊ฐ ์์ผ๋ฉด Dockerhub์ผ๋ก๋ถํฐ MySQL ์ด๋ฏธ์ง๋ฅผ ์์์ ๋ค์ด๋ฐ์์ ์คํ์ํค๊ธฐ ๋๋ฌธ์ด๋ค. -e MYSQL_ROOT_PASSWORD=password123:-e์ต์ ์ ์ปจํ ์ด๋์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๋ ์ต์ ์ด๋ค.- Dockerhub์ MySQL ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋ฉด ํ๊ฒฝ ๋ณ์๋ก
MYSQL_ROOT_PASSWORD๋ฅผ ์ ํด์ฃผ์ด์ผ๋ง ์ ์์ ์ผ๋ก ์ปจํ ์ด๋๊ฐ ์คํ๋๋ค๊ณ ์ ํ์ ธ์๋ฐ. - ์๋์ ๋ช ๋ น์ด๋ก ์ปจํ ์ด๋๋ก ๋ค์ด๊ฐ์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ง์ ๋์ผ๋ก ํ์ธํด๋ณด์.
$ docker exec -it [MySQL ์ปจํ
์ด๋ ID] bash
$ echo $MYSQL_ROOT_PASSWORD # MYSQL_ROOT_PASSWORD๋ผ๋ ํ๊ฒฝ๋ณ์ ๊ฐ ์ถ๋ ฅ
$ export # ์ค์ ๋์ด ์๋ ๋ชจ๋ ํ๊ฒฝ๋ณ์ ์ถ๋ ฅ


MySQL ์ปจํ ์ด๋์ ์ง์ ์ ์ํด๋ณด๊ธฐ
- MySQL ์ปจํ ์ด๋์ ์ ์
$ docker exec -it [MySQL ์ปจํ
์ด๋ ID] bash
- ์ปจํ ์ด๋์์ MySQL ์ ๊ทผํ๊ธฐ
$ mysql -u root -p
$ mysql -u root -p'์ค์ ํ ๋น๋ฐ๋ฒํธ'
- MySQL ์ ๊ทผ์ ์์นํ๋ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํํ๊ธฐ
mysql> show databases;
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง๋ค๊ธฐ
mysql> create database mydb;
mysql> show databases'

- ์ปจํ ์ด๋ ์ข ๋ฃํ ๋ค์ ์์ฑํด๋ณด๊ธฐ
# ์ปจํ
์ด๋ ์ข
๋ฃ
$ docker stop [MySQL ์ปจํ
์ด๋ ID]
$ docker rm [MySQL ์ปจํ
์ด๋ ID]
# ์ปจํ
์ด๋ ์์ฑ
$ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -d mysql
$ docker exec -it [MySQL ์ปจํ
์ด๋ ID] bash
$ mysql -u root -p
mysql> show databases; # ์๊น ์์ฑํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์ด์ง ๊ฑธ ํ์ธํ ์ ์๋ค.

๋ณผ๋ฅจ์ ํ์ฉํด MySQL ์ปจํ ์ด๋ ๋์ฐ๊ธฐ
- MySQL ์ปจํ ์ด๋ ๋์ฐ๊ธฐ
$ cd /Users/kyulee/Desktop/docker-study
$ mkdir docker-mysql # MySQL ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ถ์ ํด๋ ๋ง๋ค๊ธฐ
# docker run -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 -v {ํธ์คํธ์ ์ ๋๊ฒฝ๋ก}/mysql_data:/var/lib/mysql -d mysql
$ docker run -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 -v /Users/kyulee/Desktop/docker-study/docker-mysql/mysql_data:/var/lib/mysql -d mysql


- ์ฃผ์)
mysql_data๋๋ ํ ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ผ๋ฉด ์ ๋๋ค. ๊ทธ๋์ผ ์ฒ์ ์ด๋ฏธ์ง๋ฅผ ์คํ์ํฌ ๋ mysql ๋ด๋ถ์ ์๋/var/lib/mysqlํ์ผ๋ค์ ํธ์คํธ ์ปดํจํฐ๋ก ๊ณต์ ๋ฐ์ ์ ์๋ค.mysql_data๋๋ ํ ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋์ ๊ฒฝ์ฐ, ๊ธฐ์กด ์ปจํ ์ด๋์/var/lib/mysqlํ์ผ๋ค์ ์ ๋ถ ์ญ์ ํ ๋ค์mysql_data๋ก ๋ฎ์ด์์ ๋ฒ๋ฆฐ๋ค. - DB์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณณ์ด
/var/lib/mysql์ธ์ง๋ Dockerhub MySQL์ ๊ณต์ ๋ฌธ์์ ๋์์๋ค.
- MySQL ์ปจํ ์ด๋์ ์ ์ํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง๋ค๊ธฐ
$ docker exec -it [MySQL ์ปจํ
์ด๋ ID] bash
$ mysql -u root -p'1234'
mysql> show databases;
mysql> create database mydb;
mysql> show databases;

- ์ปจํ ์ด๋ ์ข ๋ฃ ํ ๋ค์ ์์ฑํด์ ํ์ธํด๋ณด๊ธฐ
# ์ปจํ
์ด๋ ์ข
๋ฃ
$ docker stop [MySQL ์ปจํ
์ด๋ ID]
$ docker rm [MySQL ์ปจํ
์ด๋ ID]
# ์ปจํ
์ด๋ ์์ฑ
$ docker run -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 -v /Users/kyulee/Desktop/docker-study/docker-mysql/mysql_data:/var/lib/mysql -d mysql
# ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ธ
$ docker exec -it [MySQL ์ปจํ
์ด๋ ID] bash
$ mysql -u root -p
mysql> show databases; # ์๊น ์์ฑํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ทธ๋๋ก ์กด์ฌํ๋ ๊ฑธ ํ์ธํ ์ ์๋ค.


Volume์ผ๋ก ์ค์ ํด๋ ํด๋์ ์ด๋ฏธ ๋น๋ฐ๋ฒํธ ์ ๋ณด๊ฐ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ 'MYSQL_ROOT_PASSWORD`์ ๋ณ๊ฒฝํ๋ฉด ์ ์์ด ๋์ง ์๋๋ค.
์คํฐ๋ ๋ฏธ์
๋ณผ๋ฅจ์ ํ์ฉํ์ฌ MongoDB ์คํ์์ผ๋ณด๊ธฐ
- MongoDB ์ปจํ ์ด๋ ๋์ฐ๊ธฐ
$ cd /Users/kyulee/Desktop/docker-study
$ mkdir docker-mongodb # MongoDB ๋ฐ์ดํฐ ์ ์ฅ ํด๋ ๋ง๋ค๊ธฐ
$ docker run -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=1234 -p 27017:27017 -v /Users/kyulee/Desktop/docker-study/docker-mongodb/mongodb_data:/data/db -d mongo
- ์ปจํ ์ด๋ ์คํ ์ฒดํฌ
$ docker ps

- ์ปจํ ์ด๋ ์คํ์ํฌ ๋ ์๋ฌ ์์ด ์ ์คํ๋๋ ์ง ๋ก๊ทธ ์ฒดํฌ
$ docker logs [์ปจํ
์ด๋ ID ๋๋ ์ปจํ
์ด๋๋ช
]
- MongoDB ์ปจํ ์ด๋์ ์ ์
$ docker exec -it [์ปจํ
์ด๋ ID ๋๋ ์ปจํ
์ด๋๋ช
] bash
- ์ปจํ ์ด๋์์ MongoDB์ ์ ๊ทผํ๊ธฐ
$ mongosh

-
GUI๋ก ๋ชฝ๊ณ ๋๋น ์ฐ๊ฒฐ ํ์ธ

-
MongoDB ๋ฐ์ดํฐ๊ฐ ๋ถ๋ฅจ์ ์ ์ ์ฅ๋๊ณ ์๋์ง ํ์ธํ๊ธฐ
$ cd /Users/kyulee/desktop/docker-study/docker-mongodb/mongodb_data
$ ls

