[따배도] 8-1. Container가 사용하는 Storage (이론)
( 참고 : 따배도 https://www.youtube.com/watch?v=NLUugLQ8unM&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi )
Contents
- Container Volume이란?
- 데이터 보존하기
- 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)라고 한다
docker rm으로 도커 컨테이너를 삭제했다고 해보자.
이럴 경우, ro & rw layer모두 사라지게 된다.
( 따라서 rw에 저장되었던 모든 데이터도 함께 사라지게 된다 )
이러한 상황을 막기 위해, 영구적으로 보존하기 위한 기술이 중요하다!
Q2. 데이터 보존하기
Container가 만들어주는 data를 영구적으로 보존하는 법?
Docker HOST에 별도의 저장공간을 만들고, 이 곳에 보존하기!
-
해당 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 간의 데이터 공유
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가 가져가다가 사용할 수 있다.