[docker] 컨테이너 응용 - 볼륨 마운트 By starseat 2023-01-18 14:07:02 server/oss Post Tags # 볼륨과 마운트 - **볼륨** - `스토리지의 한 영역을 분할한 것` - 기다란 카스테라를 자른 한 조각 같은 개념 - **마운트** - 대상을 연결해 운영체제 또는 소프트웨어의 관리하에 두는 일 - 컨테이너를 사용하면 데이터는 컨테이너에 포함되기 때문에 컨테이너 삭제시 데이터도 함께 소멸 됨. - 따라서 컨테이너 외부에 저장하여 사용함. ## 스토리지 마운트 ### 볼륨 마운트 - 도커 엔진이 관리하는 영역 내에 만들어진 볼륨을 컨테이너에 디스크 형태로 마운트 - 이름만으로 관리가 가능하므로 다루기 쉬움. - 볼륨에 에 비해 직접 조작하기 어려워 '임시 목적의 사용' 이나 '자주 쓰지는 않지만 지우면 안되는 파일' 들을 관리하기 위한 용도로 사용됨. - `익숙해 지면 손쉽게 사용` > `도커 제작사 에서도 권장` ### 바인드 마운트 - 도커가 설치된 컴퓨터에 직접적으로 저장. (도커 엔진에서 관리하지 않음) - 디렉터리가 아닌 파일 단위로도 마운트 가능 - 자주 사용하는 파일(혹은 디렉터리) 두는데 사용 - 기존 방식과 동일한 방식으로 파일을 사용할 수 있어 다른 소프트웨어도 쉽게 파일 접근 및 편집 가능 즉, 파일을 직접 편집해야 할 일이 많다면 바인드 마운트를 사용하고, 그렇지 않다면 볼륨 마운트 사용 ### 임시 메모리(tmpfs) 마운트 - 디스크가 아닌 주 메모리 영역을 마운트 - 디스크 보다 훨씬 빠른 속도로 읽고 쓰기 가능 - 접근 속도를 높일 목적으로 사용하지만 도커 엔진이 정지되거나 호스트가 재부팅 하면 소멸됨. (휘발성) ### 볼륨 마운트 vs 바인드 마운트 차이 | 항목 | 볼륨 마운트 | 바인드 마운트 | | -- | -- | -- | | 스토리지 영역 | 볼륨 | 디렉터리 또는 파일 | | 물리적 위치 | 도커 엔진 관리 영역 | 어디든지 가능 (실제 컴퓨터 저장 공간 사용) | | 마운트 절차 | 볼륨을 생성한 후 마운트 | 기존 파일 또는 디렉터리를 마운트 | | 내용 편집 | 토커 컨테이너를 통해서 편집 | 일반적인 파일과 같이 편집 | | 백업 | 절차가 복잡 | 일반적인 파일과 같이 백업 | ## 커맨드 - 마운트 하려는 스토리지의 경로가 컨테이너 속 특정 경로와 연결되도록 설정하는 형태 - 마운트 되는 스토리지는 본래 별도의 장소에 있지만 마치 컨테이너 안에 있는 것처럼 설정 하는 것 - 볼륨 하위 커맨드 | 커맨드 | 내용 | 생략 가능 여부 | 주요 옵션 | | -- | -- | -- | -- | | create | 볼륨 생성 | X | 거의 사용하지 않음 | | ls | 볼륨 목록 출력 | X | 거의 사용하지 않음 | | inspect | 볼륨 상세 정보 출력 | X | 거의 사용하지 않음 | | prune | 현재 마운트 되지 않은 볼륨 모두 삭제 | X | 거의 사용하지 않음 | | rm | 지정한 볼륨 삭제 | X | 거의 사용하지 않음 | - 스토리지 영역 생성 커맨드 사용 예 ```text // 볼륨 생성 docker volume create {볼륨 이름} // 볼륨 삭제 docker volume rm {볼륨 이름} ``` - 스토리지 마운트 커맨드 사용 예 ```text // 바인드 마운트 docker run (생략) -v {스토리지 실제 경로}:{컨테이너 마운트 경로} (생략) // 볼륨 마운트 docker run (생략) -v {볼륨 이름}:{컨테이너 마운트 경로} (생략) ``` ## 예제 - 컨테이너 정보 | 항목 | 값 | | -- | -- | | 컨테이너 명 | apa00ex01 | | 이미지 명 | httpd | | 볼륨 명 | apa000vol01 | | 포트 번호 | 바인드 마운트: 80볼륨 마운트: 8091 | - `-v` 옵션 설정 값 - `-v /home/tester/apa_foler`**:**`/usr/local/apache2/htdocs` | 항목 | 값 | | -- | -- | | 컨테이너 마운트 경로 (마운트 대상) | /usr/local/apache2/htdocs | | 실제 디렉토리 이름 (마운트 원본) | apa_folder | | 실제 마운트 원본 경로 | /home/tester/apa_folder | ### 바인드 마운트 예제 - run 커맨드로 아파치 컨테이너 실행 ```text docker run --name apa000ex01 -d -p 8090:80 -v /home/tester/apa_folder:/usr/local/apache2/htdocs httpd ``` ### 볼륨 마운트 예제 ```text // 볼륨 생성 docker volume create apa000vol01 // 볼륨 상세 정보 확인 docker volume inspect apa000vol01 // 아파치 컨테이너 실행 docker run --name apa000ex01 -d -p 8091:80 -v apa000vol01:/usr/local/apache2/htdocs httpd // 볼륨 삭제 // docker volume rm apa000vol01 ``` ## 볼륨 백업 - 바인드 마운트라면 파일 복사만으로 백업 가능 - 볼륨 마운트는 일련의 과정이 필요함. - 별도의 리눅스 컨테이너를 연결해 볼륨의 내용을 압축 ```text // 볼륨 백업 커맨드 docker run --rm -v {볼륨 명}:/moto -v {백업 저장 디렉토리}:/target {컨테이너 이미지} tar zcvf /sake/{백업파일 이름}.tar.gz -C /source . /* - 실행 후 바로 삭제 예정이므로 --rm 옵션 추가 - 스토리지 영역 두 개 마운트 - {컨테이너 이미지} (/source)에 마운트. - 백업된 데이터를 저장할 호스트의 디렉터리를 마찬가지로 {컨테이너 이미지} (/target)에 마운트. (바인드 마운트) => /source 에 마운트된 볼륨의 내용을 /target 에 복사해 컨테이너 외부에 데이터를 저장하기 위함 ``` - 예제 정보 | 항목 | 값 | | -- | -- | | 볼륨 이름 | 백업: apa000vol01복원: apa000vol02 | | 백업 저장 디렉토리 | /home/tester/vol_back | | 예제 컨테이너 | busybox | | busybox 컨테이너의 백업 원본 디렉터리 | /source | | busybox 컨테이너의 백업 저장 디렉터리 | /target | | 백업 파일 명 | backup_apa | - 백업 명령어 예시 ```text docker run --rm -v apa000vol01:/source -v /home/tester/vol_back:/target busybox tar zcvf /target/backup_apa.tar.gz -C /source . ``` - 복원 명령어 예시 ```text docker run --rm -v apa000vol02:/source -v /home/tester/vol_backup:/target busybox tar zxvf /target/backup_apa.tar.gz -C /source ``` # 출처 - [그림과 실습으로 배우는 도커 & 쿠버네티스](https://wikibook.co.kr/dkkb/) Previous Post [docker] 컨테이너 응용 - 파일 복사 Next Post [docker] 컨테이너 응용 - 컨테이너 이미지 생성