개발블로그

Docker Volumn과 데이터 영속성 본문

STUDY/Docker

Docker Volumn과 데이터 영속성

devmel 2026. 8. 26. 15:43
Contents 접기
 

Container 데이터와 영속성 문제

 

Container 실행 중 생성되거나 변경된 데이터를 기본적으로 Container의 Writeable Layer에 저장됨.

, Container를 삭제하면 해당 Container의 Writeable Layer도 함께 제거 됨 

=> DB 처럼 Container가 다시 생성되어도 유지되어야 하는 데이터는 Container 외부에 저장해야 함. 

 


 

Volumn

 

개념

Container와 독립적으로 데이터를 저장하기 위한 관리형 Storage 

 

 

명령어

명령어 역할
docker volume ls Volume 목록 확인
docker volume create NAME Volume 생성
docker volume inspect NAME Volume 상세 정보 확인
docker volume rm NAME Volume 삭제

 

실행]

-v Volume_Name:Container_Path

 

ex)

docker volume create mysql-data

# 실행
docker run -d \
  --name mysql \
  -v mysql-data:/var/lib/mysql \
  mysql
  
 # MySQL이 /var/lib/mysql에 저장하는 데이터를 mysql-data Volumn에 보관.

 

 


 

Bind Mount

 

개념

Host의 특정 File이나 Directory를 Container 내부 경로에 직접 연결하는 방식

=> Host의 실제 File System을 Container에서 그대로 사용할 수 있게 함

 

ex) 

Host
/home/user/project
        │
        │ Bind Mount
        ↓
Container
/usr/share/nginx/html

 

 

 

의의

일반적으로 Container 내부에서 생성하거나 수정한 데이터는 Container의 Writable Layer에 저장됨

하지만 개발 과정에는 Host에서 작성하는 Source Code를 Container에서도 바로 사용하고 싶은 경우가 많다. 

=> Local 개발 환경에서 Souce Code를 Container에 연결할 때 자주 사용.

 

ex) PHP 개발환경에서 Host에서 코드를 수정할 때마다 Image를 Build하는 것은 비효율적, 

Bind Mount를 사용하면 Host에서 수정한 파일을 Container가 바로 사용할 수 있음. 

 

 

사용법

-v Host_Path:Container_Path

# 현재 디렉토리에 연결
 -v "$(pwd)":/usr/share/nginx/html \
 
 # mount 사용 (-v보다 길지만 의미가 명확) 
 --mount type=bind,source=/home/user/project,target=/usr/share/nginx/html \
 # type=bind => Bind Mount 사용
 # source => Host의 File/Directory
 # target => Container에서 연결할 경로

 

ex)

docker run -d \
  --name web \
  -p 8080:80 \
  -v /home/user/project:/usr/share/nginx/html \
  nginx
  
  docker run -d \
  --name web \
  -p 8080:80 \
  -v "$(pwd)":/usr/share/nginx/html \
  nginx
  
  docker run -d \
  --name web \
  --mount type=bind,source=/home/user/project,target=/usr/share/nginx/html \
  nginx

 

 

Read Only 설정 

-v /home/user/project:/app:ro

--mount type=bind,source=/home/user/project,target=/app,readonly

 

 

주로 사용하는 경우

개발 환경에서 많이 사용 됨

 

ex) Souce Code 연결


Host
Project Source
     │
     ↓
Container
Application Runtime

=> HOST의 VS Code등에서 Source Code를 수정하면서, 
Container 안에서 PHP, Node.js등의 Runtime을 실행할 수 있음. 

 

 

'STUDY > Docker' 카테고리의 다른 글

Dockerfile  (0) 2026.08.26
Docker  (0) 2026.08.26
Docker Container의 Port와 Network 통신 구조  (0) 2026.08.26
Docker Image  (0) 2026.08.26
Docker Compose  (1) 2026.08.26