스토리지 마운트
"마운트"는 연결한다는 뜻이다.
즉, 대상을 연결해 OS 또는 SW 관리하에 두는 것을 마운트 한다고 한다.
도커에서 컨테이너는 만들었다 삭제하는 일이 많기 때문에
데이터를 컨테이너 안에 보관하는 것은 옳지 않다.
따라서 컨테이너 외부에 데이터를 두고, 여기에 접근해서 사용하게 되는데
이러한 방식을 '데이터 퍼시스턴시 (data persistency)'라 하고,
이때 데이터를 두는 장소가 '마운트된 스토리지 영역'이 되는 것이다.
도커에는 스토리지 영역이 어디에 있는지에 따라 구분되는 2가지의 마운트 방식이 있다.
항목 | 볼륨 마운트 | 바인드 마운트 |
스토리지 영역 | 볼륨 (=스토리지의 한 영역을 분할한 것) ※ 볼륨은 미리 만들어두는 것이 좋다. |
디렉터리 또는 파일 |
물리적 위치 | 도커 엔진의 관리 영역 | 어디든지 가능 (e.g. 바탕화면) |
마운트 절차 | 볼륨을 생성한 후 마운트 | 기존 파일 또는 폴더를 마운트 |
내용 편집 | 도커 컨테이너를 통해서 | 일반적인 파일과 같이 |
백업 | 절차가 복잡함 | 일반적인 파일과 같이 |
볼륨 마운트
1) 볼륨 마운트란?!
- 도커 엔진이 관리하는 영역 내에 만들어진 볼륨을 컨테이너에 마운트
- 도커 엔진이 관리하기 때문에 사용자가 파일 위치를 신경 쓸 필요 X
- 운영체제 의존성 X (환경에 따라 경로가 바뀌거나 명령어가 달라지지 않음!)
- 도커 컨테이너를 경유하지 않고는 직접 볼륨에 접근할 수 없음
- 임시 목적이나, 자주 쓰지는 않지만 지우면 안 되는 파일을 두는 목적으로 주로 사용
2) 볼륨 마운트 절차
1️⃣ 스토리지 영역 생성하기
docker volume create 볼륨_이름
2️⃣ 컨테이너 생성 및 마운트하기
docker run -v 볼륨_이름:컨테이너_마운트_경로
3) 실습해보기 (Apache)
1️⃣ 볼륨 생성하기
docker volume create apa000vol1
- apa000vol1 : 볼륨 이름. 원하는 대로 지어도 됨.
2️⃣ 아차피 컨테이너 생성하면서 apa000vol1 마운트하기
docker run --name apa000ex21 -d -p 8091:80 -v apa000vol1:/usr/local/apache2/htdocs httpd
- docker (container) run : 도커 이미지를 내려받고 컨테이너를 생성해 실행함 (docker image pull, docker container create, docker container start 3개의 명령어를 하나로 합친 것과 같음)
- apa000ex21 : 컨테이너 이름. 원하는 대로 지어도 됨.
- - d : 백그라운드 실행. detach.
- - p 8091:80 : 포트 번호 지정. publish. 호스트의 8091번 포트와 컨테이너의 80번 포트를 연결함.
- -v apa000vol1: /usr/local/apache2/htdocs : 볼륨을 마운트함. volume. 위에서 생성한 apa000vol1 볼륨을 컨테이너의 /usr/local/apache2/htdocs 경로에 마운트함.
- httpd : Apache 컨테이너의 이미지 이름
🤔 왜 /usr/local/apache2/htdocs 경로에 저장할까?? 🤔
Apache에서 /usr/local/apache2/htdocs는 콘텐츠를 저장하는 경로라고 한다.
데이터가 위치하는 경로는 도커 이미지의 참조 문서 등을 보고 확인하면 된다.
3️⃣ 볼륨 마운트 잘 되었는지 확인하기 (간접적인 방법)
※ 파일을 제대로 읽고 쓰고 있는지 확인하려면 다른 방법을 더 거쳐야 함..!!
inspect(상세 정보 보는 명령어)를 사용해 확인
# 볼륨의 상세 정보 확인
docker volume inspect apa000vol1
# 컨테이너의 상세 정보 확인
docker container inspect apa000ex21
바인드 마운트
1) 바인드 마운트란?!
- 도커 엔진에서 관리하지 않는 영역의 기존 디렉터리, 파일을 컨테이너에 마운트
- 사용자가 파일 위치를 지정하고, 실수로 지우거나 하지 않도록 주의해야 함
- 운영체제 별로 경로가 달라지기 때문에 수정이 필요함
- 파일 저장 위치가 자유롭고, 도커 엔진과 무관하게 기존에 사용하던 방식대로 파일 사용 가능
- 파일을 직접 편집해야 할 일이 많은 경우 주로 사용
2) 바인드 마운트 절차
1️⃣ 스토리지 영역 생성하기
=> 원하는 경로에 폴더 생성
2️⃣ 컨테이너 생성 및 마운트하기
docker run -v 스토리지_실제_경로:컨테이너_마운트_경로
3) 실습해보기 (Apache)
1️⃣ C:\Users\(사용자명)\Documents\apa_folder 경로로 apa_folder 폴더 생성
※ 경로와 폴더명은 원하는대로 바꿔도 됨.
2️⃣ 아차피 컨테이너 생성하면서 apa_folder 마운트하기
docker run --name apa000ex20 -d -p 8090:80 -v C:\Users\heoyu\Documents\apa_folder:/usr/local/apache2/htdocs httpd
- docker (container) run : 도커 이미지를 내려받고 컨테이너를 생성해 실행함 (docker image pull, docker container create, docker container start 3개의 명령어를 하나로 합친 것과 같음)
- apa000ex20 : 컨테이너 이름. 원하는 대로 지어도 됨.
- - d : 백그라운드 실행. detach.
- - p 8090:80 : 포트 번호 지정. publish. 호스트의 8090번 포트와 컨테이너의 80번 포트를 연결함.
- -v C:\Users\heoyu\Documents\apa_folder: /usr/local/apache2/htdocs : 볼륨을 마운트함. volume. 호스트의 C:\Users\heoyu\Documents\apa_folder 경로의 폴더를 컨테이너의 /usr/local/apache2/htdocs 경로에 마운트함.
- httpd : Apache 컨테이너의 이미지 이름
3️⃣ apa_folder 안에 index.html 파일 넣어보기
메모장에 아래와 같이 적고 (<div></div> 안의 내용은 원하는대로 적으면 됨)
index.html이라는 이름으로 apa_foler 안에 저장한다.
<html>
<meta charset="utf-8"/>
<body>
<div>안녕하세요! 저는 허유정입니다!</div>
</body>
</html>
index.html이 최상위 페이지로서 사용되기 때문에 아까와 똑같은 경로인 localhost:8090으로 접근했을 때 초기 화면이 다르게 나타난다.
이로써 마운트가 잘 되었음을 확인할 수 있다.
참고 자료
📓 그림과 실습으로 배우는 도커 & 쿠버네티스
그림과 실습으로 배우는 도커 & 쿠버네티스: 개념과 작동 원리가 쏙쏙 이해되는 완벽 입문서
컨테이너나 도커를 도통 이해하기 어려운 분들을 위한 본격 도커 입문서! 이 책은 컨테이너 기술이 어렵게 느껴지는 엔지니어나 백엔드 기술에 자신이 없는 분들을 위한 도커 입문서입니다. 자
wikibook.co.kr