We will find a way, we always have.

-interstellar

DevOps/도커

[도커] 볼륨

Redddy 2022. 9. 2. 15:25

도커에는 볼륨이라는 내장 기능이 있는데 이는 데이터를 유지하도록 돕는다. 볼륨은 컨테이너가 종료된 경우에도 지속되며 계속 존재하는데, 만약 컨테이너에 볼륨을 추가하면 컨테이너가 종료되어도 볼륨에 데이터가 남는다.

 

볼륨은 호스트머신의 폴더인데 도커 컨테이너 내부의 폴더에 매핑된다. 도커의 COPY는 복사시킬 경로와 파일의 스냅샷을 갖고 이것들을 이미지에 복사하는게 전부이며 일회성 스냅샷일 뿐이다. 컨테이너 내부의 폴더를 호스트 머신 상의 컨테이너 외부 폴더와 연결시킬 수 있다. 그렇다면 이 두폴더의 변경사항은 다른 폴더에 반영되는데, 만약 호스트 머신에 파일을 추가한다면 컨테이너 내부에서 액세스할 수 있고 컨테이너가 매핑된 경로에 파일을 추가하면 컨테이너 외부, 즉 호스트 머신에서도 사용할 수 있다.

 

볼륨 추가는 다음과 같이 설정할 수 있다.

중괄호 안에는 저장하려는 볼륨의 내부 경로를 특정하면 된다. 즉 외부에서 매핑되고 내부에 저장될 장소이다.

 

docker build -t feedback-node:volumes .
# 볼륨 태그 붙혀서 도커를 빌드하고

docker run -d -p 3000:80 --rm --name feedback-app feedback-node:volumes
# 디태치 모드에다가 3000:80포트로 퍼블리싱하고 --rm 플래그를 추가하여 컨테이너를 중지할 때 해당 컨테이너를 자동 삭제하도록 한다.

docker stop feedback-app
# 종료

docker run -d -p 3000:80 --rm --name feedback-app feedback-node:volumes
# 재실행 해서 보았지만 실패?! 문제점을 확인해보자

 

docker volume ls 명령어는 현재 실행중인 볼륨을 보여준다.

docker stop feedback-app 을 하고 다시 docker volume ls 명령어를 실행해보았더니 볼륨이 더 이상 존재하지 않았다.

 

 

볼륨에도 종류가 있는데 바로 Anonymous Volumes랑 Named Volumes 이다.

저 위의 사진 보면 볼륨 이름이 아주 길게 되어 있는데 이는 Anonymous 즉 자동으로 할당된 이름이기 때문이다.

 

docker run -d -p 3000:80 --rm --name feedback-app -v feedback:/app/feedback feedback-node:volumes
# 볼륨의 v와 경로를 추가해주고 경로 앞에는 이름을 지정해준다. 그리고 콜론으로 이름과 경로를 구분해준다.
-v [Volume Name]:[경로]

명명된 볼륨은 컨테이너가 종료될 때 도커에 의해 삭제되지 않고 익명볼륨은 삭제된다.

 

이제 볼륨을 볼륨처럼 사용할 수 있게 되었다!!!

 

feedbakc-app을 중지해도 볼륨은 여전히 존재한다.

'DevOps > 도커' 카테고리의 다른 글

[도커] 바인드 마운트(Bind Mounts)  (0) 2022.09.02
[도커] 데이터의 종류  (0) 2022.08.26
[도커] 파일 복사와 이름 지정  (0) 2022.08.19
[도커] 이미지 검사  (0) 2022.08.17
[도커] 이미지 & 컨테이너 삭제  (0) 2022.08.12