[Docker] 도커에서 데이터 관리하기 - 볼륨, 바인드 마운트

HeeHee·2024년 7월 16일

Docker

목록 보기
4/5
post-thumbnail

컨테이너는 불변하지 않는다. 하지만 데이터는 persistence 해야한다.
그러기 위해 도커에서 데이터를 관리하는 두 가지 주요 방법은 볼륨과 바인드 마운트이다.

📍Volumes

볼륨은 도커가 관리하는 데이터 저장소이다.

  • 컨테이너와 독립적으로 존재하여 데이터를 보관할 수 있다.
  • 도커 호스트의 파일 시스템에 위치한다
  • 하나 이상의 컨테이너에 마운트되어 사용될 수 있다.

→ 데이터의 영구성 : 볼륨에 저장된 데이터는 컨테이너가 삭제되어도 보존된다.

→ 데이터 공유 및 재사용 : 볼륨은 여러 컨테이너 간에 마운트되어 공유 가능하다.

→ 데이터 백업, 복구 및 마이그레이션 : 볼륨을 사용하면 데이터를 백업하고 필요할 때 복구하는 것이 용이하다. 또한 볼륨을 이용해 데이터를 한 호스트에서 다른 호스트로 쉽게 이동할 수 있다.

⇒ 그러나 볼륨은 도커의 관리 하에 있기 때문에 호스트 시스템의 파일 시스템 경로를 직접 지정할 수 없다.


주요 명령어

새로운 볼륨 생성

docker volume create

생성된 볼륨 목록 조회

docker volume ls 

지정한 볼륨 삭제

docker volume rm

볼륨의 상세 정보를 조회

docker volume inspect

컨테이너에 마운트 하기

볼륨을 컨테이너에 마운트 하기 위해서는 docker run 명령어 실행 시 -v 또는 —mount플래그를 사용한다.

docker run -v <볼륨 명>:/app <이미지 이름>

ex) 볼륨을 사용하여 index.html 파일을 Nginx 컨테이너에 배치하는 방법

1. 볼륨 생성

docker volume create my-nginx-volume

2. 호스트의 index.html 파일을 볼륨에 복사한다. 이 작업은 직접적으로 가능하지 않으므로, 임시 컨테이너를 사용해 볼륨에 파일을 복사할 수 있다.

→ 일반적으로 이 과정은 초기 컨테이너 설정이나 Dockerfile을 통해 이루어진다. 

3. 볼륨을 Nginx 컨테이너에 마운트하여 실행한다.

docker run --name my-nginx -v my-nginx-volume:/usr/share/nginx/html -p 8080:80 -d
nginx

→ 바운트 마운트처럼 간단하게 파일을 컨테이너에 넣을 수 없기 때문에 볼륨을 사용할 때는 파일을 볼륨에 미리 넣거나, 컨테이너 내부에서 파일을 다운로드하는 등의 방법을 사용해야한다.


📍 바인드 마운트 (Bind Mount)

바인드 마운트는 호스트 시스템의 특정 경로를 컨테이너 내부의 경로에 직접 연결하는 방법이다. 이를 통해 컨테이너가 호스트 시스템의 파일이나 디렉토리에 접근할 수 있다.

⇒ 호스트 시스템 파일 시스템 구조에 의존하므로, 이식성이 떨어진다.


현재 디렉토리에 index.html파일이 있고, Nginx 컨테이너의 /usr/share/nginx/html 경로에 배치하는 예시는 다음과 같다.

docker run --name my-nginx -v $(pwd):/usr/share/nginx/html:ro -p 8080:80 -d nginx

0개의 댓글