[따배도] 8-1. Container가 사용하는 Storage (이론)

( 참고 : 따배도 https://www.youtube.com/watch?v=NLUugLQ8unM&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi )


Contents

  1. Container Volume이란?
  2. 데이터 보존하기
  3. Container 간의 데이터 공유


Q1. Container Volume이란?

  • Container image는 Read ONLY 속성을 가지고 있다 ( 수정 불가! )

  • 이러한 image를 run하게 되면, 하나의 process가 된다.

  • Container Image는 Read ONLY이지만,

    Run된 Container에는 rw(read & write) layer가 생성된다.

    • 모든 데이터는 rw layer에 쌓이게 된다
    • 하지만, ro와 rw는 하나인 것처럼 보여주는데, 이를 Union File System (or Overlay)라고 한다


figure2


docker rm으로 도커 컨테이너를 삭제했다고 해보자.

이럴 경우, ro & rw layer모두 사라지게 된다.

( 따라서 rw에 저장되었던 모든 데이터도 함께 사라지게 된다 )

이러한 상황을 막기 위해, 영구적으로 보존하기 위한 기술이 중요하다!


Q2. 데이터 보존하기

Container가 만들어주는 data를 영구적으로 보존하는 법?

Docker HOST에 별도의 저장공간을 만들고, 이 곳에 보존하기!


figure2

  • 해당 container에서 만들어진 데이터가 host directory안에 쌓이게 된다

  • 이러한 연결 과정을 volume mount라고 한다

    ( 실수로 컨테이너를 삭제했다 하더라도, HOST에 잘 저장되어있어서 OK )


volume 옵션 사용하기

# case 1) 
-v <host path>:<container mount path>

# case 2) 
-v <host path>:<container mount path>:<read write mode>

# case 3
-v <container mount path>


Example)

# case 1) default : read write
docker run -d -v /dbdata:/var/lib/mysql -e MYSQL..PASSWORD=pass mysql:latest

# case 2) read only만 가능하게끔
docker run -d -v /webdata:/var/lib/html:ro httpd:latest

# case 3) host path를 명시안해주면, 임의의 directory만든 뒤 자동 mount
docker run -d -v /var/lib/mysql -e MYSQL..PASSWORD=pass mysql:latest


Q3. Container 간의 데이터 공유

figure2


docker run -v /webdata:/webdata -d --name df smlinux/df:latest
  • docker run으로 컨테이너 하나 실행한다


docker run -d -v /webdata:/usr/share/nginx/html:ro -d ubuntu:latest
  • HOST에 있는 data를 web server가 가져가다가 사용할 수 있다.