인프런 커뮤니티 질문&답변
mysql_data 폴더 내부에 다른 파일이 있는데도 잘 되는 경우
작성
·
4
0
docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v /Users/jaeseong/Documents/Develop/docker-mysql/mysql_data:/var/lib/mysql -d mysql
이 명령을 하기 전에 mysql_data 폴더는 만들어 놔도 되지만, 폴더 내부에 다른 파일이 있으면 안 된다고 이해했습니다.
그런데 바로 이전 '[실습] Docker로 MySQL 실행시켜보기 - 3 강의' https://jscode.notion.site/Docker-MySQL-3-f07a2d5a24d24bf184e78622e55a6d8c
에서 비밀번호 바꿔 보는 테스트를 할 때, password123으로 컨테이너를 실행한 뒤, 컨테이너를 삭제한 후 mysql_data 폴더는 따로 삭제하지 않아서 mysql_data 내부엔 파일들이 있었을 텐데, 그 이후에 pwd1234로 바꿔서 컨테이너를 다시 생성할 때 오류가 안 났던 이유는 뭔가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 11 1님.
질문에서 주신 내용을 통해, Docker 볼륨 및 마운트와 관련된 혼란을 경험하신 것 같습니다. Docker 볼륨을 활용하여 MySQL을 설치하는 과정에서, 특정 파일 구조 및 권한에 관한 이해가 필요할 수 있습니다.
Docker 마운트의 작동 방식
Docker에서 볼륨을 사용하는 경우, 지정한 호스트 경로와 컨테이너 경로가 서로 연동됩니다. 주로 마운트와 관련해 아래와 같은 개념이 중요합니다.
초기 데이터 병합:
- Docker는 지정한 호스트 경로에 이미 데이터가 존재할 경우, 해당 데이터들은 컨테이너가 초기화되는 동안 /var/lib/mysql에 병합됩니다. 따라서, 이전에 mysql_data 폴더에 다른 데이터가 있다고 하더라도 컨테이너 생성 시 오류가 발생하지 않으며, 데이터는 병합될 수 있습니다.
- Docker는 지정한 호스트 경로에 이미 데이터가 존재할 경우, 해당 데이터들은 컨테이너가 초기화되는 동안 /var/lib/mysql에 병합됩니다. 따라서, 이전에 mysql_data 폴더에 다른 데이터가 있다고 하더라도 컨테이너 생성 시 오류가 발생하지 않으며, 데이터는 병합될 수 있습니다.
데이터 지속성 및 비밀번호 변경:
- 이전 컨테이너에서 지정한 mysql_data 디렉토리를 동일하게 사용하면, 이는 새로운 컨테이너에 영향을 주지 않고 데이터를 지속적으로 유지합니다. 따라서 비밀번호만 변경된 상태로 컨테이너가 재생성되더라도 오류가 발생하지 않는 경우가 많습니다.
- 이전 컨테이너에서 지정한 mysql_data 디렉토리를 동일하게 사용하면, 이는 새로운 컨테이너에 영향을 주지 않고 데이터를 지속적으로 유지합니다. 따라서 비밀번호만 변경된 상태로 컨테이너가 재생성되더라도 오류가 발생하지 않는 경우가 많습니다.
데이터 병합의 논리:
- 새로운 컨테이너가 실행될 때 해당 디렉토리에 기존 MySQL 데이터가 있으면, 새 데이터베이스 초기화는 피하고 기존의 데이터를 사용하여 시작합니다.
- 새로운 컨테이너가 실행될 때 해당 디렉토리에 기존 MySQL 데이터가 있으면, 새 데이터베이스 초기화는 피하고 기존의 데이터를 사용하여 시작합니다.
기존 데이터가 있는 상태에서도 컨테이너가 잘 작동하는 이유는 위와 같은 Docker 볼륨의 특성과 데이터 병합 및 지속성 덕분입니다.
비슷한 주제를 다룬 유사한 질문을 함께 확인해보시면 이해하는데 도움이 많이 될 것입니다:
- 디렉토리를 만들고 -v 옵션 사용 시: 이 질문에서는 볼륨 마운트를 활용한 데이터 공유 방법을 설명하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




