도커 볼륨 이용해서 컨테이너 생성하기
이번에는 MySQL에 대한 데이터 정보를 호스트의 일부 어떤 공간의 데이터로 저장해보려고 한다.
따라서, 터미널에서 데이터를 저장할 경로에 들어가야 한다.
이 포스팅에서는 'dev'라는 폴더를 만들어서 사용할 것이다.
그리고, 기존의 컨테이너들은 모두 삭제해주었다.
그리고나서, 하위 폴더에 'docker-mysql'이라는 폴더를 또 만들어주었다.
`pwd`를 입력하면 현재 경로가 나오는데, 복사해두자.
그리고 다음 명령어로 볼륨을 만들어주자.
docker run -e MYSQL_ROOT_PASSWORD=[비밀번호] -d -p 3306:3306 -v [데이터를 저장할 경로] mysql
`-v` 이전까지는 전에 MySQL을 실행시켰을 때랑 같은 명령어이다.
`-v`는 볼륨을 만들겠다는 명령어이고,
그 뒤에 경로를 입력해준 후, 마지막에 이미지명인 'mysql'을 적어준다.
그런데, 위 경로에서 ':/var/lib/mysql'은 무엇일까?
Docker Hub의 MySQL에 있는 문서를 보자.
https://hub.docker.com/_/mysql#where-to-store-data
mysql - Official Image | Docker Hub
Quick reference 9.4.0, 9.4, 9, innovation, latest, 9.4.0-oraclelinux9, 9.4-oraclelinux9, 9-oraclelinux9, innovation-oraclelinux9, oraclelinux9, 9.4.0-oracle, 9.4-oracle, 9-oracle, innovation-oracle, oracle 8.4.6, 8.4, 8, lts, 8.4.6-oraclelinux9, 8.4-ora
hub.docker.com
'Where to Store Data'를 보면,
MySQL의 데이터 파일은 컨테이너 안에 `/var/lib/mysql` 경로에
저장된다고 적혀있기 때문에 똑같이 설정해주었다.
즉, 호스트의 `mysql_data` 폴더를 컨테이너 내부 MySQL 데이터 폴더에 연결해서,
컨테이너 내부의 MySQL 데이터가 이 폴더에 저장되고,
컨테이너가 삭제되어도 데이터는 호스트에 남아 유지되게 하는 것이다.
정확히 말하면, 컨테이너의 `/var/lib/mysql`에 저장되는 데이터가
호스트의 `mysql_data` 폴더에도 저장되는 것이다.
그러면 이제 볼륨을 만들어줬으니 한 번 확인해보자.
mysql로 들어가서 'mydb'라는 데이터베이스를 만들어주자.
정상적으로 확인된다면, 이제 나와서 컨테이너를 삭제해보자.
컨테이너를 다시 만들어줄것이다.
만약, 볼륨이 정상적으로 작동이 되었다면 똑같은 명령어로 컨테이너를 생성했을 때
다음과 같이 'mydb' 데이터베이스가 그대로 남아있을 것이다.
이 구조를 그림으로 보면 다음과 같다.
주의할 점
컨테이너 내부의 데이터와,
우리가 지정한 호스트의 폴더와 데이터를 동기화해놨으니 폴더 내부를 보면 데이터 파일들이 있다.
이 데이터 파일들은 MySQL 내부에서 데이터베이스 뿐만 아니라,
MySQL 설정 파일들도 같이 있다.
따라서 만약 이 데이터를 사용하도록 볼륨을 이용하고,
다른 비밀번호를 가진 컨테이너를 만들었다고 해보자.
하지만 이 폴더에는 이미 이전에 만들었던 비밀번호 설정도 저장되어 있기 때문에,
새로운 비밀번호로 접속되지 않는다.
따라서 비밀번호를 다르게 지정하고 싶다면,
MySQL에 접속해서 내부에서 비밀번호를 바꾸는 방법과
호스트에 있는 볼륨 폴더를 지우는 방법이 있다.
'Docker' 카테고리의 다른 글
Docker로 MySQL 실행시켜보기 - 2 (3) | 2025.08.06 |
---|---|
Docker로 MySQL 실행시켜보기 - 1 (3) | 2025.08.06 |
도커 볼륨이란? (1) | 2025.08.04 |
실행중인 컨테이너 내부에 접속하기 (2) | 2025.07.31 |