과제를 하는 도중에 docker compose down을 하고 docker compose up --build를 다시 실행해봤더니, 이전에 생성됐던 데이터들이 postgres db에 아직 저장이 되어있었다.
그 이유는 docker-compose down 명령어는 컨테이너는 삭제하지만 데이터 볼륨은 일부러 남겨두기 때문이다.
- 도커 컨테이너 (db): 컴퓨터 본체와 같다 -> 언제든지 껐다 켤 수 있고, 심지어 새 컴퓨터로 교체할 수도 있다
- 도커 볼륨 (db-data): 외장 하드 드라이브와 같다 -> 중요한 파일(DB 데이터)을 여기에 저장한다.
docker-compose down 명령어를 실행하면 컴퓨터를 끄지만 연결에 두었던 외장하드는 그대로 남아있는 것과 비슷하다고 보면 된다.
application.yml
services:
db:
# ...
volumes:
# 마운팅 (mounting)
- db-data:/var/lib/postgresql/data
# ...
volumes:
db-data: { }
- volumes: { db-data: {} }
- db-data라는 이름의 도커 볼륨 (docker volume)을 생성하겠다고 도커에게 알리는 부분
- 도커 볼륨은 내 컴퓨터에 있지만, 일반적인 폴더처럼 접근할 수 있는 곳이 아니라 도커가 직접 관리하는 특별한 공간에 저장된다.
- 'DB 데이터용'이라는 이름표를 붙인 외장 하드를 하나 준비만 해둔 상태고, 아직 어떤 컨테이너와도 연결되지 않았음
- db-data라는 이름의 도커 볼륨 (docker volume)을 생성하겠다고 도커에게 알리는 부분
- db-data:/var/lib/postgresql/data
- 마운팅 -> db 컨테이너 내부의 데이터베이스 파일이 저장되는 /var/lib/postgresql/data 폴더를 아까 선언한 db-data (도커 볼륨)에 연결
- db-data (왼)
- 도커 볼륨
- /var/lib/postgresql/data (오)
- 볼륨이 연결될 컨테이너 내부의 절대 경로
- PostgreSQL 프로그램은 항상 이 경로에 데이터를 저장하고 읽도록 설정되어 있음
전체 흐름
- db 컨테이너가 실행됨
- 도커는 compose.yml의 지시에 따라 db-data 볼륨을 컨테이너 내부의 /var/lib/postgresql/data 디렉터리에 연결한다.
- 이제부터 db 컨테이너 안의 PostgreSQL이 컨테이너 내부의 /var/lib/postgresql/data 경로에 무언가를 쓰면, 그 데이터는 실제로는 컨테이너 바깥의 독립된 저장 공간인 db-data 볼륨에 기록된다.
이 구조 덕분에, 나중에 docker-compose down으로 db 컨테이너(컴퓨터 본체)를 삭제해도 데이터가 저장된 db-data 볼륨(외장 하드)은 그대로 남아있게 된다.
만약에 데이터도 지우고 싶으면?
docker-compose down -v
만약 테스트 등을 위해 데이터까지 완전히 초기화하고 싶다면, down 명령어에 -v 옵션을 추가하면 된다.
- " 컨테이너를 내릴 때, 연결된 볼륨(Volume)까지 전부 삭제해 주세요"라고 하는 것과 같다.
- 이렇게 실행한 뒤 다시 docker compose up를 하면 새로운 빈 볼륨이 만들어지고 모든 데이터가 초기화된 상태로 어플리케이션이 시작된다.
도커 볼륨을 확인하고 싶다면?
- 아까 언급했듯이, 도커 볼륨은 내 컴퓨터에 있지만, 일반적인 폴더처럼 접근할 수 있는 곳이 아니라 도커가 직접 관리하는 특별한 공간에 저장된다.
- 일반적인 파일 탐색기로 보기 어려우므로, docker volume inspect 명령어를 사용해서 볼 수 있다.
- docker volume ls-> 여기서 이름 확인
- docker volume inspect myproject_db-data
- 나오는 결과 중에서 "Mountpoint항목을 찾으면 된다.


이런식으로 위에 "Mountpoint"라는 경로를 찾으면 된다.
하지만 안에 있는 파일을 직접 수정하거나 삭제하면 안된다 -> 파일을 잘못 건드리면 데이터베이스가 깨지거나 앱이 실행되지 않을 수 있다! 데이터 관리는 항상 애플리케이션이나 데이터베이스 도구를 통해 하는 것이 안전하다.
'CS > Docker' 카테고리의 다른 글
| [Docker] 컨테이너 오케스트레이션의 개념과 필요 (0) | 2025.08.20 |
|---|---|
| [Docker] 컨테이너 기술 VS Docker (1) | 2025.08.19 |