[52, 53, 54] 바인드 마운트 (bind mount) 시작하기

    728x90
    반응형

    바인드 마운트 (bind mount) 시작하기

    바인드 마운트(Bind Mount)를 활용한 개발 환경 구성

     

     

    바인드 마운트 개념

    특징

    • 호스트 머신의 특정 경로와 컨테이너 내부 경로 직접 연결
    • 실시간 코드 변경 반영 가능
    • 개발 중 소스 코드 수정에 적합

     

    일반 볼륨과의 차이

    • 경로 지정 : 호스트 경로 직접 지정 가능
    • 접근성 : 호스트에서 직접 파일 편집 가능
    • 용도 : 개발 중 소스 코드 변경 반영에 적합

     

     

    바인드 마운트 설정

    기본 명령어

    # 익명 볼륨
    docker run -v 컨테이너 내의 경로
    
    # 명명 볼륨
    docker run -v 볼륨이름 : 컨테이너 내의 경로
    
    # 전체 경로 사용 (bind mount)
    docker run -v /호스트경로:/app 이미지명
    -- 볼륨 이름에 호스트경로 붙인것이 바인드 마운트
    
    
    # 단축 명령어
    # macOS/Linux
    docker run -v $(pwd):/app 이미지명
    
    # Windows
    docker run -v "%cd%":/app 이미지명

     

    node_modules 문제 해결

    # node_modules를 위한 익명 볼륨 추가
    docker run -v /호스트경로:/app -v /app/node_modules 이미지명
    • -v /app/node_modules는 Dockerfile에 VOLUME ['/app/node_modules'] 명령어 추가와 동일. 하지만 run 명령어로 사용하는것 추천

     

    명령어 예시

    # node_modules를 위한 익명 볼륨 추가
    docker run -d -p 3000:80 --rm --name feedback-app
    -v 볼륨이름:컨테이너 저장 경로(/app/feedback)
    -v /호스트경로:/app -v /app/node_modules 이미지명 [아이디이름]

    이런식으로 명령어를 입력하게 되면

    • detached 모드
    • 포트 설정
    • 컨테이너가 종료되면 자동 삭제
    • 컨테이너 이름 설정 = feedback-app
    • 명명볼륨 = 컨테이너에서 저장하는 경로를 특정 볼륨이름으로 지정 = 명명 볼륨으로서 컨테이너를 삭제했다가 다시 생성/실행해도 그곳의 데이터를 컨테이너가 참조할 수 있다 (데이터 안지워진다)
    • 바인드 마운트 = 로컬 호커스 머신의 실제 프로젝트 경로를 컨테이너가 바라보고 있어서 실시간 코드 변화를 적용할 수 있어진다 (로컬로 컨테이너를 덮어씌움). 다만 로컬에는 node_module이 없어서
    • 익명볼륨 = 익명 볼륨을 추가해서 노드 모듈만 바인드 마운트에서 예외처리시켜서 컨테이너가 노드모듈을 바라볼 수있게 함

    그리고 파일을 만들고 저장하면 확인할 수 있고, 컨테이너를 종료/삭제 후 다시 키더라도 저장했던 파일 확인할 수있다.

    동시에 소스코드의 변경을 실시간으로 확인할 수도 있다!

    하지만 노드에 의해 실행되는 자바스크립트 같은 경우에는 수정 후 실시간으로 확인하기 위해서는 추가 작업이 필요하다

     

     

     

     

    주의사항

    경로 설정

    • 절대 경로 사용 필요
    • Docker 설정에서 공유 폴더 확인
    • WSL 사용 시 별도 설정 불필요

     

    볼륨 충돌 해결

    • 더 구체적인 경로가 우선순위
    • node_modules 같은 특수 폴더는 익명 볼륨으로 처리

     

    성능 최적화

    • 필요한 폴더만 바인드 마운트
    • 개발 환경에서 주로 사용

     

    이러한 바인드 마운트 설정으로 개발 시 코드 변경사항을 실시간으로 확인하며 작업할 수 있습니다.

     

     

     

     

     

     

    참고

    https://www.udemy.com/course/docker-kubernetes-2022

     

    728x90
    반응형

    댓글