본문 바로가기
Devops/Docker

[Docker] 볼륨 마운트 / 바인드 마운트

by dev_ss 2023. 6. 21.

도커에서 이미지를 이용하여 컨테이너를 생성할 때, 기본적으로 컨테이너를 생성하고 난 뒤의 데이터들은 컨테이너가 삭제되면서 같이 삭제된다.

 

이를 컨테이너와 함께 삭제되지 않도록 로컬 호스트에 위치하도록 하고 싶거나, 컨테이너에 내부에서 사용되는 디렉토리 또는 파일을 로컬 호스트 또는 다른 컨테이너와 동시에 참조할 필요성이 있을 때, 도커에서 제공하는 볼륨 마운트바인드 마운트 기능을 이용하면 된다.

 

1. 볼륨 마운트

 

볼륨 마운트는 도커 컨테이너에서 사용할 특정 볼륨을 생성한 후 컨테이너를 이용할 때 해당 볼륨과 마운트 하여 이용한다는 것으로 아래 순서를 통해 이용이 가능하다.

 

1) 볼륨 생성

# 볼륨 생성
$ docker volume create my-volume

1-1) 볼륨 확인

# 볼륨 상세 확인
$ docker volume inspect my-volume

# 출력 값 :
# [
#     {
#         "CreatedAt": "생성 시간",
#         "Driver": "local",
#         "Labels": {},
#         "Mountpoint": "/var/lib/docker/volumes/my-volume/_data",
#         "Name": "my-volume",
#         "Options": {},
#         "Scope": "local"
#     }
# ]

 

2) 컨테이너 생성 시 옵션 추가

# 컨테이너 생성
$ docker run -v my-volume:/app [이미지 ID/이미지 TAG]

 

Mountpoint(local 내 경로)를 기반으로 컨테이너 내부의 경로와 마운트를 시켜서 사용할 수 있다.

 

생성한 볼륨은 다수의 컨테이너에서 같이 마운트를 하여 디렉토리를 공유할 수 있다.

 

2. 바인드 마운트

 

로컬 호스트의  특정 경로 컨테이너 내부의 특정 경로로 마운트 하여 공용으로 사용한다는 것이므로, 컨테이너 생성 시 옵션으로 경로를 매핑해 주는 것으로 설정이 가능하다.

 

Example :

# 컨테이너 생성
# local : /etc/log
# 컨테이너 : /app/log

$ docker run -v /etc/log:/app/log [이미지 ID/이미지 TAG]

 

위의 명령어는 좌측의 local 경로의 디렉토리와 우측의 컨테이너 내부의 경로를 마운트 하여 사용하는 것이므로, local에서 디렉토리에 변화(파일의 생성, 수정 및 삭제 등)가 있을 때, 컨테이너 내부에도 같은 변화가 반영이 된다.

 

바인드 마운트도 경로를 마운트 하는 것이기 때문에 다수의 컨테이너에서 설정하여 공유할 수 있다.

 

3. 볼륨 마운트와 바인드 마운트

볼륨 마운트는 도커에서 마운트포인트를 생성하여 volume을 별도로 관리할 수 있다는 장점을 가지고 있지만, 직접 관리한다는 점에서 관리 항목의 증가가 단점으로도 볼 수 있다.

 

바인드 마운트는 간단한 설정으로 마운트 하여 local 환경과 공유를 할 수 있다는 것과 관리가 필요하지 않다는 점이 장점으로 볼 수 있으나, 일부 이벤트(마운트 경로 수정 등)가 발생했을 때, 관리할 점이 발생한다는 것이 단점이다.

반응형