바인드 마운트
바인드 마운트는 볼륨과 비슷한 점이 몇 가지 있지만, 한 가지 중요한 차이점이 있다.
도커에 의해 관리되는 볼륨의 위치 즉, 호스트 머신의 파일 시스템 상의 볼륨이 어디에 있는지 우리는 실제로 알지 못한다.
하지만 바인드 마운트의 경우, 그 위치를 알 수 있다.
바인드 마운트의 경우, 우리는 개발자로서 호스트 머신 상에 매핑될 컨테이너의 경로를 설정하기 때문
바인드 마운트는 영구적이고 편집 가능한 데이터에 적합하다.
일반적인 볼륨과의 차이점, 명명된 볼륨은 영구 데이터에 도움이 되지만, 편집은 실제로 불가능하다.
호스트 머신의 어디에 저장되어 있는지 모르기 때문이다.
바인드 마운트 설정
바인드 마운트 설정은 컨테이너를 실행할 때 한다.
실행하는 컨테이너에만 적용되기 때문이다.
여기 예시는 폴더를 바인드 마운트한다. 알아둘 것은 단 건인 파일도 바인트 마운트할 수있다.
경로를 따옴표로 묶은 이유는 경로상에 존재할 수 있는 특수문자 같은 것들이 정확히 인식하게 하기 위함이다.
위 명령어 기준, 컨테이너 내부의 'app' 폴더에 명명된 볼륨으로 마운트된다.
위 Dockerfile으로 빌드된 이미지로 컨테이너 생성 시 컨테이너가 생성이 안된다.
이유를 살피기 위해 --rm을 제거 후 오류를 확인(docker logs)
모듈을 찾을 수 없다고 나온다. 이는 Dockerfile 속 RUN npm install 실행이 정상적으로 안됐음을 의미한다.
좌측 폴더, 그 폴더에 있는 모든 것을 /app 폴더에 바인딩하고 있다.
docker run -d -p 3000:80 --name app3 -v namedvol:/app/feedback -v "C:\vscode\docker\section03\01:/app" app3:volume
위 도커파일 상
처음에 이미지가 생성될 때, 모든 것을 app 폴더에 복사한다.
그런데, 이미지 생성을 위해 수행한 이 모든 단계가 무의미하게 된다.
바인드 마운트를 컨테이너에 바인딩하면 어쨌든 'app' 폴더의 모든 것을 로컬 폴더로 덮어쓰기 때문이다.
-v "C:\vscode\docker\section03\01:/app" //문제 부분
현재 이 로컬 폴더에는 이 앱에 필요한 모든 종속성이 있는 'node_modules' 폴더가 없다.
server.js 파일은 'Express' 패키지, 'Express' 종속성을 필요로 하며 그것은 컨테이너에만 존재한다.
로컬 폴더에서 'npm install'을 실행하지 않았기 때문이다.
그리고 로컬 폴더를 'app' 폴더에 마운트하기 때문에 이미지와 컨테이너를 설정할 때, 여기에서 수행한 모든 작업을 덮어쓴다. 이게 문제가 된 것
'개발 > 도커' 카테고리의 다른 글
데이터 관리 및 볼륨으로 작업하기 - 요약 (0) | 2023.02.17 |
---|---|
데이터 관리 및 볼륨으로 작업하기 - 03 (0) | 2023.02.16 |
데이터 관리 및 볼륨으로 작업하기 - 01 (0) | 2023.02.12 |
Docker 이미지 & 컨테이너 : 코어 빌딩 블록 - 02 (0) | 2023.02.10 |
Docker 이미지 & 컨테이너 : 코어 빌딩 블록 - 01 (0) | 2023.02.08 |