mysql_data 폴더 내부에 다른 파일이 있는데도 잘 되는 경우
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로 바꿔서 컨테이너를 다시 생성할 때 오류가 안 났던 이유는 뭔가요?
Answer 2
1
안녕하세요 ! 질문 너무 잘 해주셨어요 ~
질문해 주신 내용에 대해 답변드려볼게요 !
우선 "mysql_data 폴더 내부에 파일이 있으면 안 된다"는 것은 MySQL을 처음 실행할 때의 이야기예요 ! 그래야 MySQL 컨테이너 내부의 /var/lib/mysql 파일들이 호스트의 mysql_data 폴더로 복사되거든요 !
하지만 이미 볼륨에 MySQL 데이터가 정상적으로 저장된 이후에는 컨테이너를 삭제하고 다시 생성해도 오류가 나지 않아요 ! MySQL 컨테이너는 새로 초기화하지 않고 기존 데이터를 그대로 사용하며 오히려 이게 볼륨의 목적이에요 ! 그래서 pwd1234로 바꿔서 컨테이너를 다시 생성했을 때 오류가 안 난 거예요!
이때 -e MYSQL_ROOT_PASSWORD=pwd1234로 새로운 비밀번호를 설정하더라도, 이미 초기화된 데이터베이스가 있기 때문에 이 환경변수는 무시돼요 ! 결과적으로 새로운 비밀번호 설정이 적용되지 않고 기존 비밀번호(password123)가 그대로 유지되는 거죠 🙂 즉, "폴더가 비어있어야 한다"라는 건 최초 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 옵션 사용 시: 이 질문에서는 볼륨 마운트를 활용한 데이터 공유 방법을 설명하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
EC2 터미널에서 docker pull
0
64
2
AWS ECR
0
58
2
FROM openjdk:17-jdk 현재 기준 dockerhub에 없습니다
1
100
2
Redis 볼륨 설정?
0
117
2
컨테이너의 IP
0
80
2
도커 이미지를 만들 때 application.yml
0
105
2
compose.yml 관리
0
88
2
ECR 리포지토리에 이미지가 3개가 보입니다.
0
77
2
액세스 키 등록하는 시점 관련 질문이 있습니다.
0
84
1
depends_on에 따른 컨테이너 실행 순서
0
77
2
실제 웹 서비스 배포 시 질문
0
80
2
도커 volume 질문
0
67
3
HTTPS로도 받고 싶으면 docker compose에 443도 쓰면 될까요?
0
74
2
sql 볼륨 폴더 지우면 데이터베이스 데이터 날라가는거 아닌가요?
0
74
2
39강 도커파일 빌드 경로 질문이 있습니다.
0
71
2
도커파일 copy
0
70
2
실무에서 docker compose up --build를 할 때
0
190
2
도커 허브에서 postgres 버전 확인하는 법
0
128
2
보충 자료와도 관련된 추가 내용
1
83
1
현업에서 MySQL은 RDS와 도커 볼륨 중 어떤 걸 사용하나요?
0
110
2
노션 자료에 안 보이는 이미지가 있습니다
0
101
1
도커 허브에서의 latest가 가장 최신인 게 맞나요?
0
121
2
docker image ls 실행 시 나오는 내용이 다릅니다
0
87
2
윈도우 볼륨 생성이 안됩니다.
0
78
2

