DevOps/Docker

[Docker] Docker Volume 3가지 구성 방법

yubi5050 2022. 8. 16. 19:24

Docker Volume은 왜 필요한가?

  • 어플리케이션 구동시 컨테이너 자체에 데이터가 쌓이는데, 컨테이너 삭제 시 내부의 저장된 정보도 사라짐
  • 컨테이너의 생명 주기와 관계없이 데이터를 영속적으로 활용하기 위해 볼륨 활용
  • 컨테이너가 외부에 저장된 데이터로 동작하게 하는 방식을 Stateless한 컨테이너 설계 방식이라고 함

 

Docker Volume 활용 (1) Docker Volume

Docker 내에 볼륨 공간 생성 (일반적으로 /var/lib/docker/) 및 컨테이너 마운트에서 관리

 

특징

  • 하나의 정의된 볼륨을 여러 개의 컨테이너에 공유 및 활용
  • Volume을 정의하고 연결하여 사용하기 때문에 직접 관리시 번거로움
  • 커스텀 폴더 구조화가 힘듬 (위치가 일반적으로 고정되어있으니 내가 직접 폴더 구조 생성 seonmin/ 등 이 힘듬)

 

Docker Volume 직접 생성 및 연결

docker volume create –name myvolume 
docker volume inspect myvolume # 볼륨 실제 위치 등 확인 가능

# [볼륨의 이름]:[컨테이너의 공유 디렉토리
docker run –I –t –name mycontainer –v myvolume : /root/ # 컨테이너 생성 및 도커의 myvolume을 컨테이너의 /root 에 매핑

 

docker inspect / docker volume 구조

 

 

Docker Volume 활용 (2) Docker Host volume 관리

사용자(Host) Volume을 컨테이너와 공유하는 방식

 

Docker Host Volume 연결

# /home/wordpress_db의 호스트의 디렉터리와 컨테이너의 /var/lib/mysql 디렉터리를 공유
docker run –v [호스트의 공유 디렉터리] : [컨테이너의 공유 디렉터리] 
docker run –d –v /home/wordpress_db : /var/lib/mysql

 

특징

  • Host의 디렉터리를 Conatiner의 디렉터리에 마운트
  • 직접 관리시 명료하게 관리 가능 (커스텀 폴더 구조화 등)
  • ex) s3를 mount하여 /mnt/s3 밑에 저장 하고 이를 Container와 연결하는 방식
  • (주의점) 두 디렉토리 모두 파일이 존재한다면 (a.txt, b.txt) 호스트의 디렉토리로 덮어 쓰게 됨

 

docker host volume 연결

 

Docker Volume 활용 (3) 볼륨 전용 컨테이너 -volumes-from 활용

Volume이 공유되어지고 있는 하나의 Container를 '볼륨 전용 컨테이너'로 활용

 

특징

  • 하나의 container가 다수의 volume을 매핑시, 해당 container를 볼륨 전용 컨테이너로 활용
  • 호스트에서 Volume만 공유하고 별도의 역할을 담당 X

 

Volume 전용 Container 연결

(1) 호스트의 /home/wordpress_db를 컨테이너의 /var/lib/testdir에 볼륨 연결
Docker run –i –t –-name volume_override –v /home/wordpress_db : /home/testdir_1

(2) 호스트의 볼륨과 볼륨 전용 컨테이너를 거친 volume_overrid에 볼륨 연결 
Docker run –i –t –name mycontainer –volumes-from volume_override

볼륨 전용 컨테이너 구조