본문 바로가기

CI-CD/Docker

Docker- Volume

볼륨이란

 볼륨은 호스트 머신, 즉 사용자의 PC나 가상 머신과 같은 사용자의 컴퓨터를 의미한다.

볼륨을 사용하는 경우, 컨테이너 상의 어플리케이션과 호스트 머신의 폴더를 마운트 해줄 수 있다. 따라서 컨테이너 데이터를 저장하는 경우에 사용할 수 있다. 기존에는 컨테이너를 제거하는 경우 컨테이너에 포함된 데이터들도 모두 제거되지만, 볼륨을 통해 데이터를 호스트 머신에 유지할 수 있다.

 

 한마디로 컨테이너 내부의 데이터를 외부로 마운트하여 컨테이너 내부에서 데이터의 수정이 일어나는 경우 볼륨이 걸린 호스트 머신에도 반영되게 하는 것이다.

볼륨 생성

$ docker volume create [생성할 볼륨 이름]
$ docker volume create volume-test # volume-test라는 이름의 볼륨 생성

 create 명령어를 이용하여 volume을 생성할 수 있다.

생성된 볼륨데이터는 기본적으로 /var/lib/docker/volumes/ 위치에 저장된다.

볼륨 정보 확인

- ls

$ docker volume ls

ls 명령어를 사용하면 현재 가지고 있는 모든 볼륨 데이터를 확인할 수 있다.

예시

위의 사진과 같이 ls 명령어를 이용하여 volume들을 확인할 수 있다.

 

- inspect

$ docker (volume) inspect [볼륨 명]  # 중간에 volume은 생략 가능
$ docker (volume) inspect volume-test  # volumne-test 정보 확인

 volume-test 볼륨에 대한 자세한 정보를 알고싶다면 inspect 명령어를 이용하면 된다.

volume-test 정보

생성한 volume-test 볼륨이 /var/lib/docker/volumes/volume-test/_data 경로에 존재하는 것을 확인할 수있다.

볼륨 마운트

 이제 볼륨을 생성하였으니 컨테이너 내부 데이터를 볼륨과 마운트 해 줄 수 있게 되었다. 컨테이너와 볼륨간의 마운트는 

-v 옵션을 통해서 가능하다.

$ docker run -v [볼륨 명]:[컨테이너 내부 디렉토리 경로] [옵션] --name [컨테이너 명] [이미지]

위의 명령어로 컨테이너를 run하면서 볼륨을 마운트하는 것이 가능하다.

 

 예시)

$ docker run -v volume-test:/test --name volume-test-container -it ricecakessamanko/myweb

 위의 예시에서는 ricecakessamanko/myweb 이미지의 /test 디렉토리를 volume-test 볼륨에 마운트 시켜 run하는 명령어이다.

 볼륨과 컨테이너 디렉토리가 잘 마운트 되었는지 확인해보기 위해서 exec 명령어를 통해 컨테이너에 접속하여 파일을 생성한 후 볼륨에도 해당 파일이 생겼는지 확인해보자.

컨테이너에서 생성한 volume-test-file이 호스트 머신 내부의 볼륨에도 잘 생성이 된 것을 확인할 수 있다.

 

볼륨에서 수정한 내용이 컨테이너에 잘 반영되는지 확인해보자.

볼륨에서 파일 수정

볼륨에서 volume-test-file에 위와 같은 내용을 추가한 후 저장했다.

컨테이너에서 파일 내용 확인

exec 명령어를 통해서 컨테이너에 접속 후 파일을 확인했더니 역시 내용이 잘 반영되었다. 이젠 역으로 컨테이너에서 내용을 저장해보자.

컨테이너에서 파일 수정
볼륨에서 파일 내용 확인

컨테이너에서 수정한 내용 역시 볼륨에 잘 반영되었다.

볼륨 종류

1)  Bind Mount Volume 

$ docker run -v [로컬 디렉토리 경로]:[마운트할 컨테이너 디렉토리 경로] [옵션] [이미지]

 내가 지정한 로컬 디렉토리의 경로에 컨테이너의 폴더가 마운트된다. 이 경우 컨테이너가 제거 되어도 볼륨은 제거되지 않는다.

 

2) Anonymous Volume

$ docker run -v [마운트할 컨테이너 디렉토리 경로] [옵션] [이미지]

 Bind mount volume과는 달리 로컬 경로를 명시하지 않은 경우 익명 볼륨으로 지정된다. 익명 볼륨으로 지정된 경우 사용자는 컨테이너 데이터가 호스트의 어느 경로에 저장되는지 알 수 없고, 컨테이너가 삭제되는 경우 익명볼륨도 함께 제거된다.

 

3) Named Volume

$ docker -v [볼륨명]:[마운트할 컨테이너 디렉토리 경로] [옵션] [이미지]

 미리 생성해둔 볼륨에 컨테이너를 마운트하는 경우 named volume을 사용한다. 이 경우도 bind mount volume과 마찬가지로 컨테이너가 제거되더라도 볼륨은 제거되지 않아 컨테이너와 상관없이 데이터를 유지할 수 있다.

'CI-CD > Docker' 카테고리의 다른 글

Docker- Network  (0) 2024.05.10
Docker- Docker Compose  (0) 2024.04.17
Docker- Docker file  (0) 2024.04.16
Docker- redis 실행  (0) 2024.04.14
Docker- 명령어  (0) 2024.03.17