티스토리 뷰
볼륨 마운트에 대해 알아보고자 한다.
그전에 볼륨이란 무엇인가?
볼륨 - 스토리지 한 영역을 분할한 것 이라고 한다. 즉. 하드/SSD영역중 일부 덩어리라 생각하면 된다.
마운트 - '연결하다'의 의미를 가진 단어, 즉, 연결 대상을 운영체제/소프트웨어 관리하에 두는걸 말한다고 한다.
와닿지 않는데, USB를 생각하면 쉽다. USB를 USB포트에 꽂으면 USB는 컴퓨터에 마운트 되는거고, 마운트가 되어 USB안에 있는 데이터를 컴퓨터가 관리할 수 있는것이다.
도커에서는 컨테이너의 생애주기가 아주 짧아서, 데이터를 컨테이너 안에 넣어놓게 되면 문제가 발생할 수 있다.(빈번하게 컨테이너를 삭제하게 되는데 데이터를 넣어놓으면 같이 삭제됨)
그래서, 이런 점을 방지하기 위해 도커는 로컬 컴퓨터의 저장소 일부분을 마운트하여 사용한다.(즉, 외부에 데이터를 따로 구축)
도커에는
1. 볼륨 마운트
2. 바운드 마운트
2가지가 존재한다.
1. 볼륨 마운트는 도커 엔진 위 어딘가 따로 공간을 만들어, 도커엔진이 관리 할 수 있도록 하는 것이고,
2. 바운드 마운트는 도커가 깔린 로컬 컴퓨터의 폴더를 도커와 연결하여 사용하는 것이다.
먼저 바운드 마운트를 테스트 해보겠다.!
1. 바인드 마운트로 아파치 초기화면 바꾸기
현재 docker_input폴더안에 index.html이 들어가 있는 것을 볼 수 있다.
docker_input 폴더를 바운드 마운트 시켜보겠다.
마운트를 시키기 위해 docker run -v 옵션을 이용하여 컨테이너를 처음 생성할때 설정해 준다.
docker run --name mount_test -d -p 8096:80 -v /home/sim/바탕화면/docker_input:/usr/local/apache2/htdocs httpd
를 통해 docker_input폴더와 컨테이너속 htdocs폴더를 연결시켜보겠다.
이처럼 진행해 주고.. localhost:8096으로 들어가 보면...
초기 화면이 로컬 폴더인 docker_input안에 있는 index.html로 실행 되는 것을 볼 수 있다.
그러면.. exec 명령어로 컨테이너로 들어가 htdocs는 어떻게 존재하는지 확인해 보자.
exec 명령어로 해당 컨테이너로 들어왔고, 마운트해준 htdocs폴더안에 index.html이 있는 것을 확인 할 수 있었는데,
아파치는 기본적으로 하나의 index.html를 기본으로 가지고 있기때문에, 기존에 있는 것인지, 로컬 폴더에 있는 index.html인지 확인해 보기 위해 vi를 통해 열어보니..
로컬 컴퓨터 docker_input에 있는 index.html과 같은 것임을 알 수 있었다.
+추가) 추가로 그럼 로컬 폴더에 파일을 하나 더 생성하면 자동으로 컨테이너에 마운트한 폴도로 생성이 될까? 알아보자.
이렇게 로컬폴더(docker_input)과 컨테이너 폴더(htdocs)를 마운트 해준 상태에서 로컬 폴더에 mount.txt라는 파일을 생성해보았다. 이제 컨테이너 폴더(htdocs)에 들어가보자.
컨테이너 폴더에 들어가 목록을 확인해보니 mount.txt가 생성된 것을 볼 수 있었다!!!!
즉, 컨테이너의 htdocs는 로컬의 docker_input폴더가 된것이다!
이렇게 바인드 마운트를 하게되면.. 로컬에 데이터를 저장하다 보니 컨테이너를 삭제하더라도 데이터를 온전히 지킬 수 있는 장점이 있다. 또, 로컬 GUI환경에서 데이터를 넣고 빼고 할 수 있으니 보다 편리하다.
2. 볼륨 마운트 테스트
볼륨 마운트는 도커 엔진 위에 생성이 되므로 도커 엔진으로 관리한다.
여기서 A가 볼륨 마운트 / B가 바인드 마운트라 생각하면 된다!
볼륨 마운트를 테스트 해보려면, 일단 위에 그림에서 A 볼륨을 생성해 줘야 한다.
docker volume create 볼륨 이름 을 통해 하나 생성해보자.
이와 같이 볼륨을 하나 생성한 모습을 볼 수 있다! 이 볼륨을 컨테이너와 마운트 시켜야 한다.
이때는 docker run -v [볼륨명]:[컨테이너 안 폴더] ~~ 옵션을 통해 마운트를 하면 된다. 해보겠다.
위에와 같이 아파치 초기화면을 바꿔볼 것이라 아파치 컨테이너를 볼륨 마운트 하여 생성해 보았다.
inspect 명령어를 통해 잘 마운트 되었는지 확인도 할 수 있다.
그럼 8097포트를 통해 아파치가 어떻게 나오는지 확인해보자.
index.html를 바꾸지 않았기에 아파치 초기 화면이 나오는 것을 볼 수 있었다. 그럼 이 초기 화면을 바꾸기 위해서는 어떻게 해야할까?
마운트 된 폴더에 접근하여 해당 파일을 바꾸면 된다.. 한번 해보자!
1. 첫번째로 컨테이너 터미널로 접속해 해당 파일을 수정해보자.
이처럼 index.html를 수정하고 저장하여 다시 웹사이트로 들어가보니...
잘 변경되어 나오는 것을 볼 수 있었다.
하지만 여기서 우리는 이게 중요한게 아니다! 과연 우리가 생성한 볼륨에 해당 index.html이 어떻게 저장되어 있을까가 궁금한것이다.!!!!
한번 찾아 들어가 보자.
해당 사진을 보면 Mountpoint라고 해서 어느 폴더와 마운트가 되었는지 볼 수 있는데, 이 경로로 따라 들어가 보자.
위에서 표시한 폴더로 들어가보면 하나의 index.html이 있는 것을 확인 할 수 있다!
(만약 해당 폴더가 접근이 안되면 sudo su를 하여 관리자 모드로 해보자)
이 파일의 내용을 확인해 보자.
아까 컨테이너에서 접속하여 바꾼 내용이 들어가 있는 것을 확인 할 수 있다... 즉, 두 폴더가 공유 상태로 됐다고 생각하면 된다!...
그럼 로컬 환경에서 한번 다른 파일을 만들어 보겠다.
이처럼 test.txt를 하나 만들었고... 다시 컨테이너 터미널로 들어가 마운트 해준 htdocs폴더로 들어가 보자.
여기도 test.txt가 존재하는 것을 볼 수 있다. (즉, 두 폴더는 내용을 공유하게 됐다! = 마운트 )
그럼 마지막으로 컨테이너를 한번 지워보겠다.
이처럼 컨테이너를 지웠다..
하지만 볼륨은 아직 삭제되지 않고 존재하는 것을 볼 수 있다.
이 볼륨에 한번 다시 접근하여 어떤 데이터가 있는지 확인해 보자.
마운트 된 컨테이너는 사라졌지만, 데이터는 아직 볼륨안에 잘 있는 것을 확인 할 수 있다!
그러면.. 다시 컨테이너를 만들어 볼륨을 재사용 해보자!!
이처럼 컨테이너 이름만 다르게 하고 볼륨을 마운트 하여 컨테이너를 만들어보자
그 후 localhost:8098로 접속해보면...
초기 화면이 바뀌어서 나오는 것을 확인할 수도 있다!(데이터를 재활용 할 수 있다)
해당 명령어로 컨테이너의 정보를 한번 봐보면..
이와같이 마운트 정보도 확인 할 수 있다.
즉 _data폴더의 내용을 컨테이너 안에서 htdocs라는 이름으로 공유 한다고 생각하면 된다!
볼륨 마운트는 위에서 과정을 봐서 알겠지만, 볼륨 폴더에 접근하기 위해서는 관리자 권한으로 접근해야 하고, 바인딩 마운트 처럼 GUI환경이 아니기 때문에 데이터를 다루는데 보다 불편하다.
하지만, 볼륨/바인드 둘 다 데이터를 따로 보관할 수 있는 역할을 수행하기에 데이터를 관리하는데 반드시 사용해야 한다.
이처럼 볼륨 마운트를 사용하여 데이터를 관리 할 수도 있고, 바인딩 마운트를 사용하여 관리 할 수 있었다.
'깃(Git) & 도커(Docker)' 카테고리의 다른 글
9. 도커(docker) 컨테이너 개조 (0) | 2022.09.13 |
---|---|
8. 도커(docker) 이미지 만들기 (0) | 2022.09.13 |
[부가] 도커(docker) 컨테이너 터미널 접속 (0) | 2022.09.12 |
6. 도커(docker) 파일 복사 이동 (0) | 2022.09.12 |
5. 도커(docker) 컨테이너 연동 (0) | 2022.09.12 |
- Total
- Today
- Yesterday
- Tree
- java
- c3k2
- 디텍션
- 뜯어보기
- github
- 알고리즘
- 백준
- 정리
- 어탠션
- yolov11
- 초보자
- 깃
- 이미지
- 티스토리챌린지
- CNN
- 오류
- python
- YOLO
- 오블완
- GNN
- DeepLearning
- 도커
- 딥러닝
- YOLOv8
- GIT
- V11
- 욜로
- docker
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |