노트

도커 볼륨과 바인드 마운트

Docker Volumes and Bind Mounts

인프라#docker · 연결된 개념 3개

쉽게 말하면

도커 볼륨은 체크아웃하면 싹 치워지는 호텔 방 대신 짐을 넣어 두는 개인 창고 같아요. 컨테이너를 지우고 새로 만들어도 같은 창고를 붙이면 DB 데이터가 그대로 이어져요.

비유가 깨지는 곳 창고에도 두 종류가 있어요. 도커가 위치를 관리하는 named volume은 남길 상태에, 내가 고른 호스트 경로를 붙이는 bind mount는 개발 중 소스 공유에 써요. Docker Desktop에선 bind mount가 느릴 수 있어요.

컨테이너의 파일시스템은 이미지 위에 얹힌 얇은 쓰기 레이어라, 컨테이너를 지우면 그 안에 쓴 데이터도 사라진다. 데이터를 남기거나 호스트와 파일을 공유하려면 컨테이너 밖의 저장 공간을 마운트한다. 방법은 named volume과 bind mount 두 가지다.

named volumebind mount
호스트 위치도커가 관리내가 지정한 경로
예(-v)pgdata:/var/lib/postgresql/data$(pwd):/app
주 용도DB 데이터처럼 남겨야 할 상태개발 중 소스 코드 공유
이식성높음호스트 경로에 묶임
docker volume create pgdata
docker run -d -v pgdata:/var/lib/postgresql/data postgres:17
docker volume inspect pgdata     # Mountpoint = 실제 저장 위치
 
docker run -d -p 3000:3000 -w /app -v "$(pwd):/app" node:22 sh -c "npm i && npm run dev"
  • 이미지는 "무엇을 실행할지"를 담은 불변 설계도이고, 볼륨은 실행 중 쌓이는 데이터를 담는 보관함이다(컨테이너와 이미지)
  • 같은 볼륨을 붙이면 컨테이너를 다시 만들어도 데이터가 이어진다. 여러 컨테이너가 공유할 수도 있다
  • bind mount로 소스를 붙이면 호스트에서 고친 코드가 바로 컨테이너에 보여, 파일 감시 개발 서버와 함께 로컬 개발에 많이 쓴다
  • macOS·Windows의 Docker Desktop에서는 bind mount 파일 I/O가 느릴 수 있다. node_modules처럼 파일이 많은 폴더는 named volume으로 따로 빼기도 한다

Docker Compose에서는 named volume을 최상위 volumes에 선언해야 하고, docker compose down은 기본적으로 볼륨을 지우지 않는다(-v를 주면 지운다). 상태를 어디에 두느냐는 결국 저장소 역할 분담의 문제다.

출처: Docker 볼륨: When to use volumes · Bind mounts: When to use bind mounts

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 컨테이너 네트워킹

    컨테이너는 각자 격리된 네트워크를 가지므로, 서로 통신하려면 같은 도커 네트워크에 붙인다. 같은 사용자 정의 네트워크(user-defined network) 안에서는 도커 내장 DNS(Domain Name System)가 컨테이너 이름(또는 별칭)을 IP로 풀어 주어, IP 대신 이름으로 접속한다.

  • Dockerfile: 레이어 캐시와 멀티 스테이지

    Dockerfile은 이미지를 만드는 명령을 순서대로 적은 파일이다. 파일시스템을 바꾸는 명령(RUN·COPY·ADD)이 각각 레이어(layer)가 되고, 바뀌지 않은 레이어는 캐시를 재사용한다. 그래서 자주 바뀌는 것을 뒤에 두는 순서가 빌드 속도를 좌우한다.

  • 배럴 파일과 re-export

    배럴 파일(Barrel File)은 여러 모듈의 export를 index.ts 하나에 모아 다시 내보내(re-export) 진입점을 하나로 만드는 파일이다. 쓰는 쪽은 import { Button, Input } from './components'처럼 한 경로에서 가져온다.

  • hosts 파일

    도메인 이름과 IP 주소의 짝을 적어 두는 OS(Operating System)의 텍스트 파일. 이름을 해석할 때 DNS 서버보다 먼저 참조되므로, 특정 도메인을 내 컴퓨터나 다른 IP로 보내는 데 쓴다. macOS·Linux는 /etc/hosts, Windows는 C:\Windows\System32\drivers\etc\hosts다.

  • 읽기 전용 복제본

    읽기 전용 복제본은 주 DB(primary, writer)의 데이터를 복제해 읽기 요청만 받는 DB 인스턴스다. 쓰기는 writer 한 곳에서 처리하고, 읽기를 여러 복제본으로 나눠 부하를 분산한다.

보기 옵션