inflearn logo
강의

Course

Instructor

Introduction to Docker for Beginners and Practical Use: Even for Non-Majors

[Practice] Running MySQL with Docker - 4

mysql_data 폴더 내부에 다른 파일이 있는데도 잘 되는 경우

Resolved

87

11 1

147 asked

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로 바꿔서 컨테이너를 다시 생성할 때 오류가 안 났던 이유는 뭔가요?

docker docker-compose docker-volume docker-image container ecr

Answer 2

1

jscode

안녕하세요 ! 질문 너무 잘 해주셨어요 ~

질문해 주신 내용에 대해 답변드려볼게요 !

우선 "mysql_data 폴더 내부에 파일이 있으면 안 된다"는 것은 MySQL을 처음 실행할 때의 이야기예요 ! 그래야 MySQL 컨테이너 내부의 /var/lib/mysql 파일들이 호스트의 mysql_data 폴더로 복사되거든요 !

하지만 이미 볼륨에 MySQL 데이터가 정상적으로 저장된 이후에는 컨테이너를 삭제하고 다시 생성해도 오류가 나지 않아요 ! MySQL 컨테이너는 새로 초기화하지 않고 기존 데이터를 그대로 사용하며 오히려 이게 볼륨의 목적이에요 ! 그래서 pwd1234로 바꿔서 컨테이너를 다시 생성했을 때 오류가 안 난 거예요!

이때 -e MYSQL_ROOT_PASSWORD=pwd1234로 새로운 비밀번호를 설정하더라도, 이미 초기화된 데이터베이스가 있기 때문에 이 환경변수는 무시돼요 ! 결과적으로 새로운 비밀번호 설정이 적용되지 않고 기존 비밀번호(password123)가 그대로 유지되는 거죠 🙂 즉, "폴더가 비어있어야 한다"라는 건 최초 1회 실행 시에만 해당되는 내용이고, 이후에는 기존 데이터를 재사용하는 게 정상이에요 !

추가로 궁금하신 점 있으시면 언제든 편하게 질문 남겨주세요~~

1

11 1

답변 감사합니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 11 1님.

질문에서 주신 내용을 통해, Docker 볼륨 및 마운트와 관련된 혼란을 경험하신 것 같습니다. Docker 볼륨을 활용하여 MySQL을 설치하는 과정에서, 특정 파일 구조 및 권한에 관한 이해가 필요할 수 있습니다.

Docker 마운트의 작동 방식

Docker에서 볼륨을 사용하는 경우, 지정한 호스트 경로와 컨테이너 경로가 서로 연동됩니다. 주로 마운트와 관련해 아래와 같은 개념이 중요합니다.

  1. 초기 데이터 병합:

    • Docker는 지정한 호스트 경로에 이미 데이터가 존재할 경우, 해당 데이터들은 컨테이너가 초기화되는 동안 /var/lib/mysql에 병합됩니다. 따라서, 이전에 mysql_data 폴더에 다른 데이터가 있다고 하더라도 컨테이너 생성 시 오류가 발생하지 않으며, 데이터는 병합될 수 있습니다.
  2. 데이터 지속성 및 비밀번호 변경:

    • 이전 컨테이너에서 지정한 mysql_data 디렉토리를 동일하게 사용하면, 이는 새로운 컨테이너에 영향을 주지 않고 데이터를 지속적으로 유지합니다. 따라서 비밀번호만 변경된 상태로 컨테이너가 재생성되더라도 오류가 발생하지 않는 경우가 많습니다.
  3. 데이터 병합의 논리:

    • 새로운 컨테이너가 실행될 때 해당 디렉토리에 기존 MySQL 데이터가 있으면, 새 데이터베이스 초기화는 피하고 기존의 데이터를 사용하여 시작합니다.

기존 데이터가 있는 상태에서도 컨테이너가 잘 작동하는 이유는 위와 같은 Docker 볼륨의 특성과 데이터 병합 및 지속성 덕분입니다.

비슷한 주제를 다룬 유사한 질문을 함께 확인해보시면 이해하는데 도움이 많이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

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