데이터 볼륨

이승준·2024년 8월 7일
  • 데이터를 컨테이너가 아닌 host 에 저장하는 방식
  • 컨테이너끼리 데이터를 공유할 때 활용
  • 컨테이너 내의 파일은 union file system 에 의해 관리
  • 데이터 볼륨으 union file system 을 통하지 않음

데이터 볼륨 사용하기

# 컨테이너 내 /data 디렉토리가 데이터 볼륨으로 설정
sudo docker run -i -t --name hello-volume -v /data ubuntu /bin/bash
# 디렉토리 이동 후 hello 파일 생성
root@7077a22333ef:/# cd /data/
root@7077a22333ef:/data# touch hello
root@7077a22333ef:/data# exit
  • docker inspect 로 데이터 볼륨 경로 확인
$ sudo docker inspect -f "{{ .Mounts }}" hello-volume

컨테이너끼리 데이터 공유

# -v <host dir>:<container dir>
# 호스트의 /root/data/ 를 container 의 /data 에 연결
sudo docker run -i -t --name hello-volume1 -v /root/data:/data ubuntu /bin/bash
root@d48da31f04b1:/# cd /data
root@d48da31f04b1:/data# touch world
root@d48da31f04b1:/data# exit

sudo docker run -i -t --name hello-volume2 -v /root/data:/data ubuntu /bin/bash
root@fbb7c667b732:/# ls /data
world
# 앞에서 생성한 world 파일을 hello-volume2 에서 확인 가능
  • /data 에 파일을 생성하면 호스트 및 hello-volume1 컨테이너에서도 사용 가능

데이터 볼륨 컨테이너

  • 데이터 볼륨을 설정한 컨테이너를 뜻함
  • 일반 컨테이너에 데이터 볼륨 컨테이너를 연결하면 볼륨에 접근 가능
sudo docker run -i -t --name hello-volume -v /root/data:/data ubuntu /bin/bash
root@c9779e329513:/# cd /data
root@c9779e329513:/data# touch hello2
  • 위와 같이 볼륨 컨테이너를 설정하고, hello2 파일을 /data 에 생성
  • 이휴, Ctrl+P, Ctrl+Q 를 차례로 입력해 컨테이너 정지 없이 exit bash shell
# --volumes-from <data volume container>
sudo docker run -i -t --volumes-from hello-volume --name hello ubuntu /bin/bash
root@c85aaf93b14e:/# ls /data
hello2
  • 위와 같이 데이터 볼륨 컨테이너 연결
  • 데이터 볼륨 컨테이너에서 생성한 hello2 를 확인 가능

예제 - Bind Mount

  • 컨테이너를 실행하고 컨테이너 내부(/usr/mnt)를 호스트의 특정 폴더와 연결
  • detached 로 실행 후 hello.txt 파일 생성
  • 컨테이너 접속 후 volume container 경로로 이동
$ docker run -it -d --name myVolume -v /home/jjdg148:/usr/mnt
$ vim hello.txt
$ docker attach myVolume

root@be6581622852:/# cd /usr/mnt
root@be6581622852:/usr/mnt# ls
example  hello.txt  test # 생성한 파일을 확인할 수 있다
root@be6581622852:/usr/mnt# cat hello.txt
Hello World!

예제 - Anonymous Volume

# 볼륨 컨테이너 지정
$ docker run -it -d --name anonyVolume -v /usr/mn
t ubuntu:22.04 
# 볼륨 컨테이너 접속
$ docker attach anonyVolume
# hello.txt 생성 및 내용 작성
echo "Hello World!" > hello.txt
# 컨테이너 종료 후 삭제
exit
$ docker rm anonyVolume
# 위에서 생성한 컨테이너 이름 확인
$ docker volume ls
# 다시 이미지로 컨테이너를 만들고 /usr/mnt 와 연결
$ docker run -it -d --name anonyVolume -v 2034d8c754a9af7d6d237815ab48b0d939b0db3354d503aca44097ba4ca81a4a:/usr/mnt ubuntu:22.04
# attach 후 hello.txt 가 있는지 확인
$ docker attach anonyVolume
cd /usr/mnt
ls
  • 볼륨 컨테이너의 이름을 지정하지 않았음에도 연결이 가능하다

예제 - Named Volume

  • 위의 예제에서 볼륨 삭제 후 이름을 지정해보자
$ docker run -it -d --name namedVolume -v sj:/usr/mnt ubuntu:22.04
$ docker attach sj
cd /usr/mnt/
echo "Hello World" > hello.txt
$ docker rm namedVolume
$ docker run -it -d --name namedVolume2 -v sj:/us
r/mnt ubuntu:22.04
$ docker attach namedVolume2
cd /usr/mnt/
ls
profile
인하대학교 컴퓨터공학과

0개의 댓글