[목차]
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 - 이론편
8-2. Docker Container Storage - 실습편
'개발 > DevOps' 카테고리의 다른 글
Docker 빌드에서 운영까지 (using docker compose) (0) | 2022.12.30 |
---|---|
Docker 컨테이너간 통신 (0) | 2022.12.29 |
Docker 컨테이너 리소스 관리 (0) | 2022.12.29 |
Docker Registry 컨테이너 보관창고 (0) | 2022.12.28 |
Docker 컨테이너 만들기 (1) | 2022.12.27 |