- 컨테이너 볼륨
- 컨테이너 이미지는 read only (수정 X)
- 컨테이너에 추가되는 데이터들은 별도의 RW 레이어에 저장
- 컨테이너 이미지를 실행하여 하나의 프로세스 상태가 되어도 여전히 read only 상태.
- 단, read/write 레이어가 만들어진 뒤 연결되고, 모든 데이터가 rw 레이어에 쌓임.
- 유니온 파일 시스템 : readonly 레이어에 readwrite 변경사항이 하나인것처럼 보여짐 (=overlay)
- docker rm 명령어로 컨테이너 삭제 시, ro 와 rw 데이터는 모두 삭제됨 (복원 X)
- 위 케이스를 방지하기ㅏ 위해 컨테이너 볼륨, 데이터 보존 기술이 중요함.
- 데이터 보존 방법
- 컨테이너가 만들어주는 데이터 영구적 보존
- mysql 컨테이너라는 가정 하에, /var/lib/mysql 안에 수많은 rw 데이터들이 쌓임 (read/write layer)
- 이 상황에서 영구적으로 보존하기 위해서는 Docker Host 에 특정 저장소 공간을 만들어야 함.
- 컨테이너가 만들어주는 데이터를 해당 특정 저장소 공간에 저장함 (/dbdata)
- 컨테이너 데이터 보존 방법.
- docker run -d --name db
- -v dbdate:/var/lib/mysql
- -v(옵션) 호스트의 디렉토리 : 컨테이너 디렉토리
> 컨테이너에서 만들어진 데이터를 실제 호스트 디렉토리 안에 쌓이게됨
- 이것을 volume mount 라고 말함.
- -e MYSQL_ALLOW_EMPTY_PASSWORD=pass
- mysql:latest
- volume 옵션 사용(-v)
- -v <host path>:<container mount path>
docker run -d -v /dbdata:/var/lib/mysql -e MYSQL..PASSWORD=pass mysql:latest
- /var/lib/mysql 의 내용을 실제 호스트 /dbdata 에 기록되도록 만듬
- -v <host path>:<container mount path>:<read write mode>
docker run -d -v /webdata:/var/www/html:ro httpd:latest
- ro : read only, host에 있는 data를 수정하지 못하게 함.
- ro 생략 시, read, write 모두 가능.
- -v <container mount path>
docker run -d -v /var/lib/mysql -e MYSQL..PASSWORD=pass mysql:latest
- host path 가 생력된 경우, UUID 하단 data directory를 만들어 알아사 자동 마운트함.
- 컨테이너간의 데이터 공유
- 컨테이너끼리 데이터 공유하기
- docker run -v /webdata:/webdata -d --name df smlinux/df:latest
- docker run -d -v /webdata:/usr/share/nginx/html:ro ubuntu:latest
- web content generator 에 쌓이는 데이터를 Docker Host 의 /webdata 에 저장
- web server 컨테이너가 데이터를 사용해 웹페이지를 그려내고 사용자는 webserver 컨테이너에 접근하여 웹 페이지 이용
- 볼륨마운트를 통해 컨테이너 간의 데이터 공유가 가능함.