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

728x90
반응형

출처 : 그림과 실습으로 배우는 도커 & 쿠버네티스

 

 

볼륨과 마운트

  • 볼륨이란 스토리지의 한 영역을 분할한 것이다. 즉, 하드디스크나 SSD를 분할한 하나의 영역이다.
  • 마운트는 연결하다라는 의미이다. 대상을 연결해 운영체제 또는 소프트웨어의 관리하에 두는 일을 의미한다. USB 메모리를 컴퓨터에 꽂으면 연결이 되는데, 이것이 USB가 컴퓨터에 마운트 된 것이다.
  • 컨테이너를 사용하려면 스토리지 영역을 마운트해야 한다. 왜냐하면 데이터가 이 스토리지에 있기 때문이다.
  • 컨테이너 속에 데이터가 있다면 컨테이너와 함께 데이터도 소멸된다.
  • 컨테이너는 생성 및 폐기가 매우 빈번하기 때문에 매번 데이터를 옮기는 대신 처음부터 컨테이너 외부에 둔 데이터에 접근하는 것이 일반적이다. 이를 데이터 퍼시스턴시(Data Persistency) 라고 한다.
  • 마운트 대상이 되는 스토리지는 볼륨 외에도 디렉토리나 파일, 메모리가 될 수도 있다.

 

 

스토리지 마운트 종류

  • 도커에서 스토리지의 마운트 종류는 2가지가 있다.
    • 볼륨 마운트
    • 바인드 마운트

 

볼륨 마운트

  • 볼륨 마운트는 도커 엔진이 관리하는 영역 내에 만들어진 볼륨을 컨테이너에 디스크 형태로 마운트한다.
  • 이름만으로 관리가 가능하므로 다루기 쉽다.
  • 하지만 볼륨에 비해 직접 조작하기 어려우므로 '임시 목적의 사용', '자주 쓰지는 않지만 지우면 안 되는 파일'을 두는 목적으로 많이 사용한다.

 

바인드 마운트

  • 도커가 설치된 컴퓨터의 문서 폴더 또는 바탕화면 폴더처럼 도커 엔진에서 관리하지 않는 영역의 기존 디렉토리를 컨테이너에 마운트하는 방식이다.
  • 디렉토리가 아닌 파일 단위로도 마운트가 가능하다.
  • 디렉토리 속에 파일을 직접 두거나 열어볼 수 있기 때문에 자주 사용하는 파일을 두는 데 사용한다.

 

 

볼륨 마운트와 바인드 마운트의 차이점

  • 두 가지 마운트 방식의 차이점은 3가지가 있다.
    • 간단한지 복잡한지
    • 호스트 컴퓨터에서 다룰 필요가 있는지
    • 환경의 의존성을 배제해야 하는지
  • 볼륨 마운트
    • 도커 엔진의 관리하에 있으므로 사용자가 파일 위치를 신경쓸 필요가 없다.
    • 운영체제에 따라 명령어가 달라지는 등의 의존성 문제가 발생하지 않는다.
    • 익숙해지면 손쉽게 사용할 수 있다. 도커 제작사에서도 볼륨 마운트 사용을 권장한다.
    • 도커 컨테이너를 경유하지 않고 직접 볼륨에 접근할 방법이 없다.
  • 바인드 마운트
    • 도커가 관리하지 않는 영역 어디라도 파일을 둘 수 있다.
    • 기존과 동일한 방식으로 파일을 사용할 수 있으므로 다른 소프트웨어를 사용해 쉽게 편집할 수 있다.
    • 도커 엔진과 무관하게 파일을 다룰 수 있다.
    • 워드프레스처럼 파일을 자주 편집해야 하는 경우에는 바인드 마운트를 사용해야 한다.
  • 파일을 직접 편집해야 할 일이 많다면 바인드 마운트, 그렇지 않으면 볼륨 마운트를 사용하면 된다.

 

스토리지 영역을 마운트하는 커맨드

  • 스토리지 마운트는 run 커맨드의 옵션 형태로 지정한다.
  • 마운트하려는 스토리지의 경로가 컨테이너 속 특정 경로와 연결되도록 설정하는 형태이다.
  • 바탕화면에 있는 소프트웨어의 단축 아이콘을 생각해보자. 실제 실행되는 프로그램은 바탕화면이 아닌 다른 곳에 있지만 단축 아이콘을 사용해 마치 바탕화면에 프로그램이 있는 것처럼 사용할 수 있다.
  • 스토리지 영역의 마운트도 마찬가지다. 마운트되는 스토리지는 본래 별도의 장소에 있지만 마치 컨테이너 안에 있는 것처럼 설정하는 것이다.
  • 마운트 원본이 되는 스토리지 영역과 마운트 대상이 되는 위치는 경로 형태로 지정한다.

 

스토리지를 마운트하는 절차

  1. 스토리지를 마운트하기 위해 먼저 마운트될 스토리지를 생성한다.
  2. 컨테이너를 생성하고 마운트를 한다.

 

 

[실습] 바인드 마운트

  • 바인드 마운트를 연습한다.
  • 파일 복사에 이어 아파치 컨테이너를 사용한다.
  • 디렉토리를 만들어 두고, 컨테이너를 생성할 때 옵션으로 해당 디렉토리를 마운트한다.
  • index.html 파일을 배치하고 웹 브라우저에서 접근했을 때 아파치의 초기 화면이 index.html 파일의 내용으로 바뀌는지 확인한다.

 

실습 내용

  1. 폴더(디렉토리) 생성
  2. 아파치 컨테이너 생성
  3. 초기 화면 확인
  4. index.html 파일 배치
  5. 확인

 

생성할 컨테이너 정보

  • 컨테이너 이름
    • zw_apache
  • 이미지 이름
    • httpd
  • 포트 번호 설정
    • 8090

 

실습

 

마운트 할 폴더를 생성한다.

 

 

docker run --name zw_apache -d -p 8090:80 -v C:\Users\zangw\OneDrive\문서\docker_ex:/usr/local/apache2/htdocs httpd

 

아파치 이미지(httpd)를 사용해 zw_apache 라는 이름의 컨테이너를 생성 및 실행하고 호스트 컴퓨터의 폴더와 컨테이너의 /usr/local/apache2/htdocs 디렉토리로 마운트한다.

 

 

웹 브라우저를 열고 http://localhost:8090 으로 접속한다. 현재는 아무 파일도 배치하지 않았으므로 Index of / 라는 메시지가 출력된다. (아무 파일도 없다면 It works가 출력되지만 폴더가 있기 때문에 Index of/ 라고 출력된다.)

 

 

마운트된 폴더에 index.html 파일을 생성한다.

 

 

웹 브라우저를 새로 고침하면 우리가 index.html 파일에 작성한 블로그 주인장의 간절한 소망이 담긴 메시지가 출력된다.

 

저번에는 index.html 파일을 컨테이너의 디렉토리로 복사해서 메시지를 출력했다면 이번에는 디렉토리를 마운트해서 index.html의 내용을 출력하게 만들었다.

 

 

docker stop zw_apache
docker rm zw_apache
docker ps -a

 

zw_apache 컨테이너를 중지 및 제거한다.

 

 

[실습] 볼륨 마운트

  • 볼륨 마운트를 연습한다.
  • Volume inspect 명령을 사용해 간접적으로 확인한다.

 

실습 내용

  1. 볼륨 생성
  2. 아파치 컨테이너 생성
  3. 확인

 

컨테이너 정보

  • 컨테이너 이름
    • zw_apache
  • 이미지 이름
    • httpd
  • 볼륨 이름
    • zw_apache_vol
  • 포트 번호
    • 8091

 

실습

 

docker volume create zw_apache_vol

 

zw_apache_vol 이라는 이름으로 마운트할 볼륨을 생성한다. 볼륨이 생성될 위치는 도커 엔진에서 관리하기 때문에 신경쓰지 않아도 된다.

 

 

docker run --name zw_apache -d -p 8091:80 -v zw_apache_vol:/usr/local/apache2/htdocs httpd
docker ps

 

아파치 이미지를 사용해 zw_apache 라는 이름으로 컨테이너를 생성 및 실행한다. -v 옵션에 위에서 생성한 볼륨과 컨테이너 속 마운트 위치를 지정한다.

 

ps 커맨드를 사용해 컨테이너가 정상적으로 생성 및 동작하는지 확인한다.

 

 

docker volume inspect zw_apache_vol

 

volume inspect 커맨드를 사용해 zw_apache_vol 볼륨의 상세 정보를 확인한다.

 

 

docker container inspect zw_apache

 

볼륨이 컨테이너에 마운트 되었는지 확인한다. zw_apache_vol의 마운트 포인트와 컨테이너의 마운트 정보의 소스를 보면 동일하다는 것을 확인할 수 있다.

 

 

docker stop zw_apache
docker rm zw_apache
docker volume rm zw_apache_vol
docker image rm httpd

 

zw_apache 컨테이너를 중지 및 제거한다. 그리고 볼륨과 이미지도 제거한다.

728x90
반응형