Dandy Now!
  • Docker 볼륨을 이용한 데이터 영속성 확보 실습(PostgreSQL, MongoDB)
    2025년 07월 11일 09시 21분 38초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    Docker 볼륨을 이용한 데이터 영속성 확보

    Docker 컨테이너는 기본적으로 휘발성이다. 즉, 컨테이너가 삭제되면 그 안에 있던 데이터도 함께 사라진다는 의미이다. 이러한 문제를 해결하고 데이터를 영속적으로 관리하기 위해 Docker 볼륨(Volume)을 사용한다. 이번 포스팅에서는 Docker 볼륨을 활용하여 PostgreSQL과 MongoDB 데이터를 호스트 시스템에 저장하는 방법을 다룬다.


    1. Docker 볼륨이란?

    Docker 볼륨은 컨테이너 외부에 데이터를 저장하는 방법 중 하나이다. 호스트 파일 시스템의 특정 경로를 컨테이너 내부의 특정 경로와 연결하여, 컨테이너가 삭제되어도 데이터는 호스트에 남아있도록 한다. 이는 데이터의 안정성과 영속성을 보장하며, 컨테이너를 재시작하거나 업데이트해도 데이터 손실 걱정 없이 사용할 수 있도록 한다.


    2. PostgreSQL 데이터 볼륨 실습

    PostgreSQL 컨테이너의 데이터를 호스트에 저장하여 영속성을 확보하는 실습이다.

    1) 데이터 저장 디렉터리 생성

    먼저, PostgreSQL 데이터가 저장될 로컬 디렉터리를 생성한다.

    mkdir docker-postgresql
    cd docker-postgresql

    mkdir docker-postgresql 명령어로 docker-postgresql 디렉터리를 생성하고, cd docker-postgresql 명령어로 해당 디렉터리로 이동한다.

    2) PostgreSQL 컨테이너 실행 (볼륨 연결)

    이제 PostgreSQL 컨테이너를 실행하면서 방금 생성한 디렉터리를 볼륨으로 연결한다.

    docker run -e POSTGRES_PASSWORD=1234 -p 5432:5432 -v D:\develop\docker-postgresql/postgresql_data:/var/lib/postgresql/data -d postgres
    • -e POSTGRES_PASSWORD=1234: PostgreSQL의 postgres 사용자 비밀번호를 1234로 설정한다. 환경 변수를 설정할 때 사용한다.
    • -p 5432:5432: 호스트의 5432번 포트를 컨테이너의 5432번 포트와 연결한다. 외부에서 PostgreSQL에 접근할 수 있도록 포트를 매핑하는 옵션이다.
    • -v D:\develop\docker-postgresql/postgresql_data:/var/lib/postgresql/data: 볼륨을 연결하는 핵심 옵션이다. 호스트의 D:\develop\docker-postgresql\postgresql_data 디렉터리를 컨테이너의 /var/lib/postgresql/data 디렉터리와 연결한다. PostgreSQL의 데이터는 이 경로에 저장된다.
    • -d: 컨테이너를 백그라운드에서 실행한다.
    • postgres: 실행할 Docker 이미지 이름이다. (postgres:latest와 동일하다.)

    3) 컨테이너 및 볼륨 생성 확인

    컨테이너가 정상적으로 실행되고 볼륨이 생성되었는지 확인한다.

    docker ps

    실행 중인 Docker 컨테이너 목록을 보여준다. postgres 이미지를 사용하는 컨테이너가 Up 상태인지 확인하면 된다.

    ls

    호스트의 D:\develop\docker-postgresql 디렉터리 내부에 postgresql_data 디렉터리가 생성되었음을 확인할 수 있다. 이 디렉터리 안에는 PostgreSQL의 데이터 파일들이 포함되어 있다.


    3. MongoDB 데이터 볼륨 실습

    MongoDB 컨테이너의 데이터를 호스트에 저장하여 영속성을 확보하는 실습이다.

    1) 데이터 저장 디렉터리 생성

    MongoDB 데이터가 저장될 로컬 디렉터리를 생성한다.

    mkdir docker-mongodb
    cd docker-mongodb

    mkdir docker-mongodb 명령어로 docker-mongodb 디렉터리를 생성하고, cd docker-mongodb 명령어로 해당 디렉터리로 이동한다.

    2) MongoDB 컨테이너 실행 (볼륨 연결)

    MongoDB 컨테이너를 실행하며 디렉터리를 볼륨으로 연결하고, 초기 사용자 계정을 설정한다.

    docker run -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=1234 -p 27017:27017 -v D:\develop\docker-mongodb/data:/data/db -d mongo
    • -e MONGO_INITDB_ROOT_USERNAME=root: MongoDB의 초기 관리자 사용자 이름을 root로 설정한다.
    • -e MONGO_INITDB_ROOT_PASSWORD=1234: MongoDB의 초기 관리자 비밀번호를 1234로 설정한다. 환경 변수 설정 시 각 변수 앞에 -e를 붙여야 한다. (실습 과정에서 이 부분을 실수하여 invalid reference format 오류가 발생하였음)
    • -p 27017:27017: 호스트의 27017번 포트를 컨테이너의 27017번 포트와 연결한다. MongoDB의 기본 포트이다.
    • -v D:\develop\docker-mongodb/data:/data/db: 볼륨을 연결하는 핵심 옵션이다. 호스트의 D:\develop\docker-mongodb\data 디렉터리를 컨테이너의 /data/db 디렉터리와 연결한다. MongoDB의 데이터는 이 경로에 저장된다.
    • -d: 컨테이너를 백그라운드에서 실행한다.
    • mongo: 실행할 Docker 이미지 이름이다. (mongo:latest와 동일하다.)

    3) 컨테이너 및 볼륨 생성 확인

    컨테이너가 정상적으로 실행되고 볼륨이 생성되었는지 확인한다.

    docker ps

    실행 중인 Docker 컨테이너 목록을 보여준다. mongo 이미지를 사용하는 컨테이너가 Up 상태인지 확인한다.

    docker exec -it [컨테이너 ID] bash

    [컨테이너 ID] 부분에 실행 중인 MongoDB 컨테이너의 ID를 입력하여 컨테이너 내부로 접속한다.

    mongosh

    컨테이너 내부에서 mongosh를 실행하여 MongoDB 셸에 접속한다. 이는 데이터베이스가 정상적으로 작동하고 있음을 확인하는 과정이다.

    ls
    dir ./data

    호스트의 D:\develop\docker-mongodb 디렉터리 내부에 data 디렉터리가 생성되었음을 확인할 수 있다. 이 디렉터리 안에는 MongoDB의 데이터 파일들이 포함되어 있다.


    728x90
    반응형
    댓글