• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

mysql 연결 부분에서 -v 옵션 (volume)에 대해 질문 있습니다.

22.03.10 09:26 작성 조회수 104

1

안녕하세요 선생님! 감사히 수업 잘 듣고 있습니다.
 
도커 활용하기 (주피터 노트북 서버 만들어보기)의 14:48 부분부터 아래 명령어를 수행하는데요.
$ docker run -d -p 3306:3306 --name mydb -v /home/ubuntu/mysqldata:/var/lib/mysql mysqldb
여기에서 -v 옵션으로 호스트 PC의 /home/ubuntu/mysqldata 폴더와 컨테이너의 /var/lib/mysql 를 연결한다고 이해했습니다.
 
기존에는 -v 옵션으로 호스트 PC 내 폴더 내용을 -> 컨테이너 내 폴더로 링크 해준다 (마운트 해준다) 라고 이해했었는데요.
(apache 웹서버 만들 때 Index.html 파일을 호스트 PC 내 파일로 읽게 해준 것처럼)
 
그런데 이 경우는 컨테이너의 /var/lib/mysql 폴더 내 내용이 /home/ubuntu/mysqldata 폴더로 온 것 같아서요.
제가 기존에 mysqldata 폴더를 만든 적이 없는데 ls로 내용 확인해보니 mysqldata 폴더가 생성 되어 있고 안에 다른 폴더와 파일들도 들어가 있더라구요.
 
그러면 호스트 PC 내 폴더가 없다면 컨테이너 내 폴더를 -> 호스트 PC 내 폴더로 옮겨 주는 걸까요?
 
답변 주시면 감사드리겠습니다.
 
감사합니다.

답변 1

답변을 작성해보세요.

1

아니 이렇게 색깔까지 매겨서, 질문을 해주시니 아 역시 개발자분들은 다르세요. ㅎㅎ

 

정확하게 말하면, 'Bind mount a volume' 라고 볼 수 있어요.

host-src:container-dest 일 때, host-src 와 container-dest 를 binding 해준다? 라고 보시면 됩니다. 그래서 host-src 와 container-dest 폴더가 이제 하나의 폴더처럼 동작하다보니, host-src 의 데이터가 container-dest 폴더에도 보여질 수 있고, 반대로 container-dest 폴더에 어떤 작업을 하면, host-src 폴더에 해당 작업이 적용이 됩니다.

따라서, 다음 두가지 기능이 모두 가능합니다. 물론 보통은 호스트 PC 데이터를 컨테이너 내에서 쓰기 위해 쓰는 경우도 많고요. 좀더 다른 반대의 경우로, 컨테이너를 자주 삭제하거나 해서 컨테이너 내 데이터를 호스트 PC 로 빼내서 유지하기 위해, 사용하는 경우도 많습니다. 

- 호스트 PC 내 폴더 내용을 -> 컨테이너 내 폴더로

컨테이너 내 폴더를 -> 호스트 PC 내 폴더 

plain kim님의 프로필

plain kim

질문자

2022.03.10

아 답변 감사합니다 !