others
Docker의 바인드마운트와 볼륨

볼륨 & 바인드 마운트를 사용하는 이유?
컨테이너와 내 컴퓨터(호스트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의 볼륨 데이터는 보존된다 (컨테이너 삭제시 데이터 보존)