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의 볼륨 데이터는 보존된다 (컨테이너 삭제시 데이터 보존)

Apr 30, 2023 Views 141