개발/DevOps

Docker Container Storage

달리초이 2022. 12. 29. 14:04


[목차]

1. 데이터 보존 방법

2. 컨테이너끼리 데이터 공유하기

3. 컨테이너 데이터 보존 테스트

4. volume 조회 및 삭제

5. 컨테이너끼리 데이터 공유하기 테스트


- 컨테이너 이미지는 readonly(ro), run으로 동작중일 때 readwrite(rw) 가능

- 컨테이너에 추가되는 데이터들은 별도의 RW 레이어에 저장

- Union File System(또는 Overlay): ro레이어와 rw레이어의 변경사항이 마치 하나인 것처럼 만들어서 보여주는 기술

- docker rm 명령어로 컨테이너를 삭제할 경우 rw 데이터도 삭제됨

 

1. 데이터 보존 방법

컨테이너가 만들어주는 데이터를 영구적을 보존하려면, docker host에다가 특정 저장소를 만들어 저장한다.

- volume 옵션 사용

-v <host path>:<container mount path>
-v <host path>:<container mount path>:<read write mode>
-v <container mount path>

참고로 host path를 쓰지 않으면 자동으로 uuid로 디렉토리를 만들어 데이터 저장 (/var/lib/docker/volumes/UUID/_data)

docker run -d -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
docker run -d -v /webdata:/var/www/html:ro httpd:latest
docker run -d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest
# 예시
docker run -d --name db
           -v /dbdata:/var/lib/mysql
           -e MYSQL_ALLOW_EMPTY_PASSWORD=pass
           mysql:latest
# postgresql 예시
docker run -p 5432:5432 --name postgres \
	-e POSTGRES_PASSWORD=postgres -e TZ=Asia/Seoul \
	-v /Users/yd/db:/var/lib/postgresql/data -d \
	postgres:12

 

 

2. 컨테이너끼리 데이터 공유하기

# 예시
# webdata 디렉토리에 내용을 넣으면
docker run -v /webdata:/webdata -d --name df userid/df:latest

# webdata 디렉토리 내용을 readonly로 가져옴
docker run -d -v /webdata:/usr/share/nginx/html:ro -d ubuntu:latest

 

 

3. 컨테이너 데이터 보존 테스트

- mysql 컨테이너 만들어서 데이터 보존 테스트

docker run -d --name db -v /dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:latest

 

- db 접속

docker exec -it db /bin/bash
mysql -u root -ppass

- db에 database 생성 후 호스트 안에 생성한 database 디렉토리가 있는지 확인 (예시: aaa)

ls /dbdata

- 컨테이너를 삭제해도 여전히 데이터는 존재한다.

 

4. volume 조회 및 삭제

# 조회
docker volume ls

# 삭제
docker volume rm [Volume ID]

# 전체 볼륨 삭제
docker volume prune

 

5. 컨테이너끼리 데이터 공유하기 테스트

루트 파일시스템이 현재 얼마만큼 디스크 용량을 쓰고 있는지를 10초마다 기록하는 컨테이너 생성

- df.sh 스크립트 파일 생성

#!/bin/bash
mkdir -p /webdata
while true
do
  df -h / > /webdata/index.html
  sleep 10
done

- Dockerfile 생성

FROM ubuntu:18.04
ADD df.sh /bin/df.sh
RUN chmod +x /bin/df.sh
ENTRYPOINT ["/bin/df.sh"]

- 컨테이너 build

docker build -t df:latest .

- 도커 컨테이너 실행. 이제 10초마다 실행되는 컨테이너가 실행됨

docker run -d -v /webdata:/webdata --name df df:latest

- 10초마다 갱신되는 컨테이너의 데이터를 읽어와서 웹서비스를 통해 외부에 제공

docker run -d --name web -v /webdata:/usr/share/nginx/html:ro -p 80:80 nginx:1.14

외부에서 호스트 ip:80 으로 접속하면 df 내용 확인 가능

 

 

 

 

출처 : 따배도

8-1. Docker Container Storage - 이론편

https://youtu.be/JcgrQnkIePE

8-2. Docker Container Storage - 실습편

https://youtu.be/IHuU3rZATbg

728x90
반응형