Dandy Now!
  • Mac에서 도커 볼륨(Volume) 생성 및 관리: 영속적인 데이터 저장소 구축 🐳
    2025년 10월 03일 12시 38분 45초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    Mac에서 도커 볼륨(Volume) 생성 및 관리: 영속적인 데이터 저장소 구축 🐳

    도커(Docker) 컨테이너는 기본적으로 무상태(stateless)이며 휘발성이다. 즉, 컨테이너가 삭제되면 내부의 데이터도 함께 사라진다. 데이터베이스와 같이 영속성이 요구되는 애플리케이션의 데이터를 안전하게 보관하기 위해 도커 볼륨(Volume)을 사용한다. 특히 Mac 환경에서는 볼륨 관리 방식을 명확히 이해하는 것이 필수적이다.


    1. 도커 볼륨의 두 가지 유형과 Mac 환경의 문제

    Mac 환경에서 컨테이너에 데이터를 연결하는 방식은 크게 두 가지로 구분된다.

    1.1. 호스트 디렉토리 마운트 (Bind Mount): 오류 발생의 주요 원인

    호스트(사용자의 Mac 시스템)의 특정 디렉토리를 컨테이너 내부 경로에 직접 연결하는 방식이다.

    • 장점: 호스트의 터미널이나 Finder에서 데이터에 직접 접근 및 수정이 가능하다.

    • Mac에서의 문제점: Mac의 Docker Desktop은 가상 머신(VM) 위에서 실행되기 때문에, 호스트와 VM 간의 경로 문제권한 문제(Permission)가 자주 발생한다. 특히 컨테이너 내부의 비루트(non-root) 사용자가 호스트 디렉토리에 쓰기 권한을 확보하지 못하여 실행이 실패하는 경우가 빈번하다.

      docker: Error response from daemon: create (생략)/docker-postgresql/postgresql_data: 
      "(생략)/docker-postgresql/postgresql_data" includes invalid characters for a local volume name, 
      only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended to pass a host directory, use absolute path

    1.2. 네임드 볼륨 (Named Volume): Mac 환경의 표준 해결책

    도커 데몬이 자체적으로 생성하고 관리하는 데이터 저장소이다. 데이터의 물리적 위치는 도커의 내부 VM 디스크에 숨겨져 있다.

    • 장점: 도커가 자동으로 소유권 및 권한 문제를 관리하며, 호스트-VM 간의 복잡한 경로 문제를 완벽하게 우회한다. 데이터 영속성을 확보하는 가장 안정적인 방법이다.

    2. 네임드 볼륨을 이용한 데이터베이스 컨테이너 실행

    Named Volume은 PostgreSQL과 같은 데이터베이스 컨테이너를 실행할 때 발생하는 권한 오류를 회피하는 가장 효과적인 방법이다.

    2.1. 명령어 구조

    다음은 PostgreSQL 컨테이너를 postgres_volume이라는 Named Volume과 연결하여 실행하는 명령어이다.

    $ docker run --name [컨테이너명] -e [환경변수] -p [포트] \
        -v [볼륨 이름]:[컨테이너 내부 경로] \
        -d [이미지명]

    2.2. PostgreSQL 실행 예시

    $ docker run --name my-postgres-db \
        -e POSTGRES_PASSWORD=mysecretpassword \
        -p 5432:5432 \
        -v postgres_volume:/var/lib/postgresql/data \
        -d postgres
    • -v postgres_volume:/var/lib/postgresql/data: 도커는 postgres_volume이라는 Named Volume이 없으면 자동으로 생성하고, 컨테이너 내부의 PostgreSQL 데이터 경로에 마운트한다. 컨테이너가 시작될 때 postgres 사용자의 권한에 맞게 볼륨의 소유권을 자동으로 설정한다.

    3. 도커 볼륨 관리 명령어

    Named Volume은 도커 데몬에 의해 관리되므로, 터미널 명령어를 통해 관리해야 한다.

    3.1. 볼륨 목록 확인

    시스템에 존재하는 모든 Named Volume 목록을 확인한다.

    $ docker volume ls

    3.2. 볼륨 상세 정보 확인

    특정 볼륨의 상세 정보(VM 내부의 실제 마운트 경로 포함)를 확인한다.

    $ docker volume inspect postgres_volume

    3.3. 볼륨 삭제

    컨테이너가 삭제되어 더 이상 사용되지 않는 Named Volume을 명시적으로 제거하여 디스크 공간을 확보한다.

    $ docker volume rm postgres_volume

    3.4. 사용되지 않는 볼륨 일괄 정리

    어떤 컨테이너에도 연결되어 있지 않은 모든 Named Volume을 일괄적으로 삭제한다.

    $ docker volume prune

    참고: 도커 애플리케이션을 삭제한다고 해서 Named Volume은 자동으로 삭제되지 않는다. 데이터 영속성 유지를 위한 도커의 정책이다. 디스크 공간 확보를 위해서는 docker volume rm 또는 docker volume prune 명령어를 반드시 사용해야 한다.


    728x90
    반응형
    댓글