도커 볼륨 마운트와 실시간 개발 및 데이터 보존
도커 컨테이너는 기본적으로 휘발성(Stateless) 라이프사이클을 가집니다. 컨테이너 내부의 격리된 파일시스템 영역에 저장된 모든 데이터는 컨테이너가 정지 및 소멸(docker compose down 또는 docker rm)되는 시점에 흔적도 없이 사라집니다.
이를 방어하여 호스트 운영체제의 스토리지 공간을 안전하게 격리 연동하고 데이터를 영구히 보존(Persistence)하기 위해 도커는 두 가지 대표적인 마운트(Mount) 방식을 제공합니다.
1. 바인드 마운트 vs 네임드 볼륨 비교 아키텍처
아래 다이어그램은 호스트 디렉터리 경로를 그대로 노출하여 동기화하는 바인드 마운트 구조와, 도커 엔진 내부의 통제된 스토리지에 데이터를 격리 보존하는 네임드 볼륨 구조의 상이점을 나타냅니다.
2. 바인드 마운트 (Bind Mount): 실시간 소스코드 수정 및 갱신
- 작동 원리: 호스트 PC의 특정 물리 폴더 경로(예:
./src)와 컨테이너 내부의 작업 경로(예:/var/www/html)를 다이렉트로 바인딩합니다. - 주요 용도: 소스코드 개발 작업용.
- 동작 특징:
- 개발자가 로컬 PC의 IDE(VSCode, PhpStorm 등)로 소스코드를 열어 파일 수정을 수행하면, 컨테이너 안에도 해당 변경 내용이 즉각 반영됩니다.
- 컨테이너의 중지 및 리빌드 없이 브라우저 상에서 리로드만으로도 수정 결과를 즉시 테스트할 수 있어 로컬 개발 생산성을 극대화합니다.
- Compose 작성 실례:
```yaml
volumes:
- ./src:/var/www/html ```
3. 네임드 볼륨 (Named Volume): 데이터베이스(DB) 유실 봉쇄
- 작동 원리: 호스트 운영체제의 파일 시스템 중 도커 데몬(Docker Daemon)이 독점 통제하는 안전 영역 내에 독립 명칭을 가진 가상 디스크 볼륨 디렉터리를 만들고 이를 컨테이너의 지정 경로와 연결합니다.
- 주요 용도: MySQL, MariaDB, PostgreSQL 등 데이터 유실이 발생하면 안 되는 데이터베이스의 영구 레코드 데이터 저장소용.
- 동작 특징:
- 데이터베이스의 저장 공간인
/var/lib/mysql영역을 볼륨으로 연결합니다. - 호스트 OS 파일 시스템 드라이브의 간섭이 배제되므로 입출력(I/O) 성능과 쓰기 안전성이 매우 우수합니다.
- 컨테이너가 완전히 삭제되고 리필드되어 메모리에서 지워져도 볼륨 내부의 이진 데이터는 완벽히 보호되며, 새로운 컨테이너를 구동할 때 기존 볼륨명을 동일하게 지정하면 이전까지 쌓였던 회원 정보나 레코드가 그대로 안전하게 이관되어 복원됩니다.
- 데이터베이스의 저장 공간인
- Compose 작성 실례:
# 1) 서비스 내부 정의 services: db: image: mysql:8.0 volumes: - dbdata:/var/lib/mysql # 2) 파일 최하단에 볼륨 별칭 영구 자원으로 선언 volumes: dbdata:
⚠️ 실무 시 주의사항: 볼륨 데이터의 영구 파기 (down -v)
터미널에서 도커 스택을 완전히 내릴 때 실행하는 명령어 옵션 중 -v 옵션은 매우 조심히 다뤄야 합니다.
# 컨테이너 프로세스만 정지하고 소멸시킵니다. (Named Volume 내의 DB 데이터는 영구 보존됨)
docker compose down
# [위험!] 컨테이너 파괴와 동시에 dbdata 볼륨 영역까지 디스크에서 강제로 지워버립니다.
# 데이터베이스 내용이 복구 불가능하게 원천 파괴되므로 상용/운영 인프라에서는 절대 실행 금지!
docker compose down -v
도커 환경으로 멀티 컨테이너망을 구축할 때 외부의 침입으로부터 웹 서버와 데이터베이스를 격리시키고 기밀 정보를 안전하게 관리하기 위한 네트워크 및 자격 증명 보안 방침은 다음 가이드에서 해설합니다.
- 다음 학습: 도커 포트 바인딩 및 컨테이너 보안 수칙
이전 학습
« 게시판 만들기
서브목차