볼륨 & 바인드 마운트를 사용하는 이유?
컨테이너와 내 컴퓨터(호스트PC)사이에 데이터를 공유하기 위함
(구체적으로 말하자면 로컬의 소스코드를 컨테이너 환경에서 돌리기 위함 )
도커에서 말하는 파일시스템(Filesystem)이란?
파일과 디렉터리를 계층 구조로 구성하고, 각 파일과 디렉터리에 대해 권한을 관리하는것
위의 이미지에서 host의 Filesystem이란 내 로컬환경의 파일시스템(디렉토리)에 도커 볼륨을 저장할수있는 공간을 말하는듯
(그냥 리눅스에서 폴더간에 명령어로 이동하며 권한을 주는등의 폴더들의 구조를 말하는듯..)
바인드 마운트
도커가 호스트pc의 디렉토리에 직접 접근하는 방식
호스트의 디렉토리를 컨테이너의 디렉토리에 마운팅하는 방식
호스트의 파일 시스템에 직접 접근하기 때문에 호스트와 컨테이너 간의 데이터 공유가 빠르고 쉽습니다.
호스트에서 바인드 마운트된 디렉토리의 파일을 변경하면, 즉시 컨테이너에서도 변경된 내용을 확인할 수 있습니다.
보안성이 낮아 호스트의 파일 시스템에 직접 접근하기 때문에, 호스트의 파일 시스템을 변경할 수 있는 위험이 있습니다.
바인드 마운트의 사용예시
docker run -d --name <컨테이너명> -p <로컬포트>:<컨테이너포트> -v <외부경로명>:<내부경로명> <설치할 이미지명>
docker run -d --name nginx_server -p 80:80 -v /path/to/local/folder:/usr/share/nginx/html nginx
볼륨 (권장)
호스트pc와 도커가 각각 독립전인 데이터저장공간을 가지고 그 둘을 맵핑하는것
호스트의 파일 시스템이 아닌 독립적인 공간에 데이터를 도커 내부에 저장합니다.
볼륨을 사용하면 데이터를 컨테이너와 호스트 사이에서 안전하게 공유할 수 있습니다.
볼륨은 여러 컨테이너에서 공유할 수 있기 때문에, 컨테이너 간에 데이터를 쉽게 전달할 수 있습니다.
호스트와 컨테이너 간의 속도가 느리기 때문에 데이터 공유가 느릴 수 있습니다.
볼륨의 사용예시
docker-compose.yml에 아래와 같이 설정되어 있을 경우
version: '1'
services:
nginx:
container_name: nginx_server // 컨테이너명
image: nginx:1.21.1
ports:
- 80:80 // 로컬포트번호 : 컨테이너포트번호
- 443:443
volumes:
- ./laravel/public:/var/www/html // 로컬의 볼륨경로 : 도커내부의 볼륨경로
바인드마운트와 볼륨의 차이
바인드마운트는 도커가 호스트pc의 디렉토리에 직접 연결함 (보안성취약).
볼륨은 동기화된 저장공간과 데이터를 호스트pc와 컨테이너의 도커 내부에서 각각 가진다.
그렇기 때문에 컨테이너를 삭제해도 호스트pc의 볼륨 데이터는 보존된다 (컨테이너 삭제시 데이터 보존)