스토리지 마운트란?

Pak Heonjun·2023년 5월 16일
0
post-thumbnail

스토리지 마운트란?

컨테이너를 사용할 때는 컨테이너 외부에 둔 데이터와 연결해서 사용하는 것이 일반적 이다.

컨테이너는 생성과 폐기가 빈번 하며 폐기 시 내부의 데이터가 소멸 된다. 따라서 컨테이너를 사용할 때는 컨테이너 외부에 둔 데이터에 접근해 사용하는 것이 일반적이다. 외부에 둔 데이터는 컨테이너의 폐기와 무관하게 유지되는 data persistency(데이터 영속성) 을 갖는다.

컨테이너 생성 시에 스토리지(저장소) 의 특정 영역을 컨테이너와 연결할 수 있고 이를 스토리지 마운트 라 한다. 컨테이너와 스토리지 영역이 연결되면 "컨테이너에 스토리지가 마운트되었다" 라 한다.

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

도커에서 스토리지 마운트 에는 볼륨 마운트바인드 마운트 가 있다. 여기서 볼륨스토리지를 분할한 한 영역 을 의미한다.

볼륨 마운트도커 엔진이 관리하는 영역 내에 만들어진 볼륨컨테이너에 디스크 형태로 마운트 하는 방식이다. 바인드 마운트호스트 파일 시스템 내의 기존 디렉터리컨테이너에 마운트 하는 방식이다. 두 마운트 방식의 각자의 장단점이 있으며 상황에 따라 적절한 방법을 사용하면 된다.

볼륨 은 데이터가 도커 엔진의 관리하에 있어 사용자가 물리적 파일 위치를 신경 쓸 필요가 없고 단순히 볼륨 이름으로 마운트가 가능 하다. 따라서 호스트 환경(디렉터리 구조)에 대한 의존성 문제가 발생하지 않는다. 하지만 도커 컨테이너를 경유하지 않고 데이터에 접근할 방법이 없다. 또한 백업 에도 복잡한 절차 가 필요하다.

바인드 마운트 에서 마운트되는 영역은 호스트 내 어느 위치든 상관 없고, 파일 시스템을 통해 파일에 쉽게 접근 할 수 있다. 다만 사용자가 데이터 물리적 위치를 파악하고 있어야하며, 호스트 환경에 따라 경로 수정이 필요 하다.

Tip. 볼륨에 직접 접근
리눅스에서는 볼륨은 /var/lib/docker/volumes/ 에 위치한다. 단, 볼륨에 직접 접근하여 수정할 경우 볼륨 자체가 깨질 수 있다.

마운트 명령어는?

스토리지 마운트는 docker run -v 명령어를 사용 한다. 마운트되는 스토리지는 실제로 다른 장소에 있지만 컨테이너 안에 있는 것처럼 사용이 가능 하다.

두 마운트 모두 docker run -v 명령어 로 수행이 가능하다. 해당 명령어로 스토리지 경로를 컨테이너 속 특정 경로와 연결(마운트) 한다. 이때 실제 물리적 위치는 스토리지에 있지만 마치 컨테이너 안에 있는 것처럼 설정 하는 것이다.

이제 볼륨 마운트와 바인드 마운트를 실제로 실습해보자.

볼륨 마운트 실습

① 볼륨 생성

볼륨 마운트를 하기 전에 우선 볼륨을 생성해야한다. 볼륨 생성은 docker volume create 명령어를 사용한다.

root@LAPTOP-3H85AI8N:/# docker volume create apa000vol1
apa000vol1

생성된 볼륨의 상세 정보는 docker volume inspect 명령어로 확인할 수 있다.

root@LAPTOP-3H85AI8N:/# docker volume inspect apa000vol1
[
    {
        "CreatedAt": "2023-05-18T13:47:02Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/apa000vol1/_data",
        "Name": "apa000vol1",
        "Options": {},
        "Scope": "local"
    }
]

② 아파치 컨테이너 실행 (볼륨 마운트)

위에서 만든 볼륨을 마운트하여 아파치 컨테이너를 생성/실행해보자. 볼륨을 마운트하기 위해서는 docker run -v 볼륨_이름:컨테이너_마운트_경로 명령어를 사용한다.

root@LAPTOP-3H85AI8N:/# docker run --name apa000ex1 -d -p 8080:80 -v apa000vol1:/usr/local/apache2/htdocs httpd
90b450b4b8acb2f630ff246164c4d63f13f33217e977a36f1b524eed35b152d8

docker inspect 명령어로 제대로 마운트가 되었는지 간접적으로 확인 해보자. Mounts 항목에 Source 에서 볼륨의 실제 경로를, Destination 에서 마운트된 경로를 확인할 수 있다.

root@LAPTOP-3H85AI8N:/# docker inspect apa000ex1
[
    ...생략...
        "Mounts": [
            {
                "Type": "volume",
                "Name": "apa000vol1",
                "Source": "/var/lib/docker/volumes/apa000vol1/_data",
                "Destination": "/usr/local/apache2/htdocs",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],
     ...생략...
]

실습 이후에는 docker stop, rm, docker volume rm 명령어로 뒷정리를 하자.

바인드 마운트 실습

① 마운트 원본이 되는 디렉터리 생성

바인드 마운트를 위해서는 우선 호스트에 마운트 원본이 되는 디렉터리를 생성해야한다. 디렉터리mkdir 폴더명 으로 생성 할 수 있다.

root@LAPTOP-3H85AI8N:/# mkdir home/jpark/apa_folder
root@LAPTOP-3H85AI8N:/# ls home/jpark
apa_folder  fast-venv  fastapi-data-science

② 아파치 컨테이너 실행 (바인드 마운트)

위에서 만든 디렉터리를 바인드 마운트하여 아파치 컨테이너를 생성/실행해보자. 바인드 마운트는 docker run -v 호스트_실제_경로:컨테이너_마운트_경로 명령어를 사용한다.

root@LAPTOP-3H85AI8N:/# docker run --name apa000ex1 -d -p 8080:80 -v /home/jpark/apa_folder:/usr/local/apache2/htdocs httpd
49f163a17bf964f9a9b6f865ae5af6a852f3522c626032f30fada4f6e065b88a

③ 아파치 초기 화면 접근

웹 브라우저에서 http://localhost:8080 주소로 아파치 초기 화면에 접근해보자.

웹 브라우저를 통해 아파치 초기 화면에 접근 시 "Index of /"라는 메시지가 출력 된다. 마운트 된 apa_folder에 아무 파일이 없기 때문에 해당 메시지가 출력된다.

apa_folder에 index.html을 작성하고 화면이 변경되는지 확인해보자.

④ 마운트 된 폴더에 index.html 파일 작성

nano 에디터 를 사용해서 apa_folder에 index.html을 작성 하자.

root@LAPTOP-3H85AI8N:/# nano home/jpark/apa_folder/index.html

cat 명령어로 index.html 파일이 제대로 생성되었는지 확인 할 수 있다.

root@LAPTOP-3H85AI8N:/# cat home/jpark/apa_folder/index.html
<html>
<meta charset="utf-8" />
<body>
<div>안녕하세요~ 바인트 마운트 입니다.</div>
</body>
</html>

⑤ 아파치 초기 화면 변경 확인

웹 브라우저에서 http://localhost:8080 화면이 변경되었는지 확인해보자.

위와 같이 호스트의 apa_folder에 작성한 index.html마운트된 아파치 컨테이너에 반영 된 것을 알 수 있다.

실습 이후에는 docker stop, rm, docker volume rm 명령어로 뒷정리를 하자. 호스트에 생성한 폴더는 rm -rf 폴더명 으로 제거할 수 있다.

root@LAPTOP-3H85AI8N:/# rm -rf home/jpark/apa_folder
root@LAPTOP-3H85AI8N:/# ls home/jpark
fast-venv  fastapi-data-science
profile
more more

0개의 댓글