우와한 개발자

[Docker] Docker Volume이란? 컨테이너 데이터 관리와 mount

by 우와한개발자

[Docker volume]

1. docker volume 이란?

  • docker 컨테이너 간 데이터를 공유하고 보관하기 위한 지속적인데이터 저장 및 관리를 위한 메커니즘

 

2. docker volume 주요 특징

1) 데이터 보존 및 공유

  • 컨테이너 삭제되어도 데이터가 유지되고, 여러 컨테이너가 하나의 볼륨을 동시에 공유 가능

 

2) 볼륨 생성 및 연결

  • docker volume create로 생성
  • docker run 시 -v 옵션으로 연결 가능

 

3) host 경로 mount 가능

(1) mount?

  • 어떤 저장 공간을 다른 위치에 연결해서 접근 가능하게 만드는 것
  • Windows에서 HDD를 추가하면 D드라이브, E드라이브처럼 새로운 드라이브가 생기듯이 Linux에서는 저장 장치를 특정 디렉토리에 연결(mount)해서 사용함.

(2) docker 에서 volume을 mount한다?

  • 컨테이너 내부 디렉토리를 호스트의 저장 공간(볼륨 또는 디렉토리)과 연결하는 것
🫢 리눅스 철학 : Everything is a file (모든 것은 파일이다)
- 리눅스에서는 거의 모든 자원을 파일처럼 접근할 수 있게 만들어 놓음
- 하드디스크, USB, 키보드, 마우스, 네트워크, 프로세스 정보, 같은 것들을 파일 형태로 접근가능

 

4) 복사와 백업

  • docker cp 명령어를 사용하여 컨테이너와 볼륨 간에 파일 복사가능
  • 볼륨은 단순한 파일 시스템이므로 백업과 복원이 용이

 

3. docker volume 주요 명령어

명령어 설명 예시
docker volume create 새로운 볼륨 생성 docker volume create my_volume
docker volume ls 시스템에 있는 모든 볼륨 나열 docker volume ls
docker volume inspect 볼륨의 세부 정보 표시 docker volume inspect my_volume
docker volume rm 볼륨 삭제 docker volume rm my_volume
docker volume prune 사용되지 않는 모든 볼륨 삭제 docker volume prune
docker run -v 또는 --volume 컨테이너에 볼륨 마운트 docker run -v my_volume:/data my_image
docker-compose volumes Docker Compose 파일에서 볼륨 정의 volumes: - my_volume:/data

 

 

4. docker container 내부 파일 파일 확인방법

1) docker container 내부로 접속

  • 접속후 일반 리눅스 명령어 사용 가능
docker exec -it 컨테이너명(또는 ID) 쉘

# 예시
docker exec -it my-tomcat /bin/bash

 

2) docker cp로 내부 파일 복사

  • 컨테이너 내부 파일을 호스트로 복사가능
docker cp 컨테이너명 또는 ID:컨테이너경로 호스트경로

#예시 - 현재 위치에 컨테이너에 있는index.jsp 복사해옴
docker cp my-tomcat:/user/local/tomcat/webapps/ROOT/index.jsp ./

 

3) docker volume 사용

  • 컨테이너 실행 시 볼륨을 연결하여 데이터 공유 가능
  • 그 전에 docker volume ls 에 있어야 함
docker run -d -v 볼륨이름:/컨테이너경로 -p 8888:8080 tomcat:10

#
docker run -d -v myvolume:/usr/local/tomcat/webapps -p 8888:8080 tomcat:10

 

⚠️ 컨테이너는 경량 환경이다
- 컨테이너 내부에서 사용할 수 있는 리눅스 명령어는 현재 호스트에서 사용 가능한 명령어보다 적음
- 컨테이너는 최소한의 명령어만 포함된 경량 환경으로 실행되기 때문

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기