Docker Container는 기본적으로 삭제하면 내부 데이터도 함께 사라지는 구조입니다.
예를 들어 Database Container를 실행한다고 가정하면:
MySQL Container
↓
Database 데이터 저장
↓
Container 삭제
↓
데이터 삭제
이 문제가 발생합니다.
서버 운영 환경에서는 Container가 재생성되거나 업데이트되어도 데이터가 유지되어야 합니다.
이때 사용하는 기능이 Docker Volume입니다.
기본 구조:
Host Server
↓
Docker Volume
↓
Container
↓
Application Data
Docker Compose에서는 Volume을 활용하여 다음 데이터를 안전하게 관리합니다.
- Database 데이터
- Upload 파일
- 로그 데이터
- 설정 파일
- Application 저장 데이터
이번 글에서는 Docker Compose Volume의 기본 개념부터 Named Volume, Bind Mount, 데이터 백업, Database 운영 방법까지 서버 운영 기준으로 자세히 알아보겠습니다.
Docker Compose Volume이란 무엇인가?
Volume은 Docker Container와 별도로 데이터를 저장하는 저장 공간입니다.
Container 내부 저장 방식:
Container
↓
내부 파일 시스템
↓
Container 삭제
↓
데이터 삭제
Volume 사용:
Container
↓
Volume 연결
↓
데이터 저장
↓
Container 삭제
↓
데이터 유지
즉 Volume은 Container와 생명주기를 분리하는 저장 방식입니다.
Docker Compose Volume이 필요한 이유
Container는 언제든 삭제되고 다시 생성될 수 있습니다.
예:
Image 업데이트
↓
Container 삭제
↓
새 Container 생성
Volume이 없다면:
Database 데이터 손실
발생 가능
Volume 사용:
기존 Volume 유지
↓
새 Container 연결
↓
데이터 유지
Production 서버에서는 거의 필수적으로 사용합니다.
Docker Compose Volume 기본 설정
가장 기본적인 Volume 설정:
services:
database:
image: mysql:8
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
구조:
mysql-data Volume
↓
/var/lib/mysql
↓
MySQL 데이터 저장
실행:
docker compose up -d
결과:
MySQL Container
+
Volume 연결
+
데이터 유지
Docker Compose Named Volume이란?
Named Volume은 Docker가 관리하는 Volume입니다.
예:
volumes:
mysql-data:
확인:
docker volume ls
결과:
project_mysql-data
특징:
- Docker가 위치 관리
- Container 삭제 후 유지
- 관리 편리
- Database 운영에 적합
사용 예:
- MySQL
- PostgreSQL
- Redis
- MongoDB
Docker Compose Bind Mount란?
Bind Mount는 Host 서버의 특정 폴더를 Container와 직접 연결하는 방식입니다.
구조:
Host 폴더
↓
Container 폴더
예:
services:
app:
image: node
volumes:
- ./app:/app
의미:
현재 폴더/app
↓
Container /app
특징:
- Host에서 파일 직접 수정 가능
- 개발 환경에 적합
- 설정 파일 관리 편리
Named Volume과 Bind Mount 차이
| 구분 | Named Volume | Bind Mount |
|---|---|---|
| 관리 위치 | Docker 관리 | Host 직접 관리 |
| 주요 용도 | Database | 개발 파일 |
| 백업 | 쉬움 | 직접 관리 |
| 운영 환경 | 추천 | 상황별 사용 |
Production Database:
Named Volume 추천
개발 환경:
Bind Mount 추천
Docker Compose Volume 목록 확인
현재 Volume 확인:
docker volume ls
상세 정보:
docker volume inspect volume-name
확인:
- 저장 위치
- 연결 Container
- Driver
예:
docker volume inspect mysql-data
Docker Compose Volume 생성 과정
Compose 실행:
docker compose up -d
자동 과정:
docker-compose.yml 확인
↓
Volume 확인
↓
없으면 생성
↓
Container 연결
확인:
docker volume ls
Docker Compose Volume 삭제 방법
Container 종료:
docker compose down
결과:
Container 삭제
↓
Volume 유지
Volume까지 삭제:
docker compose down -v
주의:
Volume 삭제
↓
Database 데이터 삭제
될 수 있습니다.
Docker Compose Volume 백업 방법
Database 운영에서는 백업이 중요합니다.
Volume 위치 확인:
docker volume inspect mysql-data
백업 예:
docker run --rm \
-v mysql-data:/data \
-v $(pwd):/backup \
ubuntu \
tar czf /backup/mysql-backup.tar.gz /data
결과:
Volume
↓
압축 파일 생성
↓
백업 완료
Docker Compose Volume 복원 방법
백업 파일:
mysql-backup.tar.gz
복원:
docker run --rm \
-v mysql-data:/data \
-v $(pwd):/backup \
ubuntu \
tar xzf /backup/mysql-backup.tar.gz -C /
결과:
Backup File
↓
Volume 복원
↓
Database 데이터 복구
Docker Compose Database Volume 실무 예제
MySQL 구성:
services:
database:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
구조:
MySQL Container
↓
mysql-data Volume
↓
Database 저장
Container 재생성:
docker compose down
docker compose up -d
결과:
기존 Database 유지
Docker Compose Volume과 Permission 문제
Bind Mount 사용 시 권한 문제가 발생할 수 있습니다.
오류:
Permission denied
원인:
Host 권한
↓
Container User 권한 차이
확인:
ls -al
해결:
chmod
chown
사용
Docker Compose Volume 운영 Best Practice
추천:
- Database는 Named Volume 사용
- 정기 백업 설정
- Volume 이름 관리
- Production 데이터 분리
- 중요 데이터 외부 백업
운영 구조:
Application Container
↓
Database Container
↓
Named Volume
↓
Backup Storage
Docker Compose Volume 장애 대응
데이터가 보이지 않는 경우
확인:
docker volume ls
Volume 존재 확인
잘못된 Volume 연결
확인:
docker inspect container-name
Mount 정보 확인
Database 실행 오류
확인:
docker compose logs database
자주 묻는 질문
Container를 삭제하면 Volume도 삭제되나요?
아닙니다.
기본적으로 Volume은 유지됩니다.
Database는 Volume을 사용해야 하나요?
네.
Production 환경에서는 필수에 가깝습니다.
Bind Mount와 Volume 중 어떤 것을 사용해야 하나요?
Database는 Named Volume, 개발 파일은 Bind Mount가 일반적입니다.
Volume 백업이 필요한가요?
중요 데이터라면 반드시 필요합니다.
마무리
Docker Compose Volume은 Container 환경에서 데이터를 안전하게 보존하기 위한 핵심 기능입니다.
Container는 쉽게 생성되고 삭제되지만 Volume을 사용하면 Database와 중요한 파일 데이터를 안정적으로 유지할 수 있습니다.
특히 Production 서버에서는 Docker Compose, Database, Volume, Backup 구조를 함께 설계해야 안정적인 서비스 운영이 가능합니다.
다음 글에서는 Docker Compose에서 데이터를 저장하는 방식과 실제 서버 저장 구조를 이해하는 Docker Compose Storage 구조 완벽 가이드를 진행합니다.