- 컨테이너 이미지는 readonly
- 컨테이너에 추가되는 데이터들은 별도의 read + write layer에 저장한다.
- 컨테이너의 read only layer와 read + write layer 마치 하나인것 처럼 보여지는 기술.
=> (union file system 또는 overlay 라고 한다.)
컨테이너가 만들어주는 데이터를 영구적으로 보존한다.
1. docker host에 저장공간을 하나 만든다. (Host에 디렉토리 생성.) => ex) mkdir dbdata
2. docker run 명령어 실행 시 -v <host 디렉토리 경로>:<대상 컨테이너 디렉토리> 를 설정한다. (volume mount 라고 함.)
ex) docker run -d —name db -v /dbdata:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=test1234 mysql:latest
기존 컨테이너를 지우고 새로 컨테이너를 띄울때 기존 컨테이너에서 작성된 db 정보는 host 의 dbdata 라는 폴더에 저장 되어있으므로 위 명령어를 통해 새로 컨테이너를 생성할 경우 보존된 데이터를 활용하여 운용 할 수 있다.
volume 옵션
-v <host path>:<container mount path> => volume mount
-v <host path>:<container mount path>:<read write mode> => volume mount 시 read write 모드 설정 가능
-v <container mount path>
ex)
docker run -d -v /dbdata:/var/lib/mysql [… 다른 옵션들 …] mysql:latest
docker run -d -v /web:/var/www/html:ro httpd:latest => 컨테이너에서 호스트의 데이터를 수정할 수 없게 ro(readonly) 속성을 지정했다. 생략하면 기본은 rw(read + write)
docker run -d -v /var/lib/mysql [… 다른 옵션들 …] mysql:latest => 해당 컨테이너 디렉토리만 지정하면 호스트에 /var/lib/docker/volumes/UUID Directory/_data/ 에 지정한 컨테이너의 경로와 자동으로 mount 된다.
추가로, 안쓰는 volume 삭제 명령은 docker volume rm UUID Directory
도커 호스트에서 생성한 하나의 디렉토리를 여러 컨테이터가 volume mount 하여 공유 할 수 있다.
ex)
1. Host에서 data 디렉토리를 생성한다.
2. Host의 data 디렉토리를 A 컨테이너를 생성 하며 마운트 한다. (read + write)
3. Host의 data 디렉토리를 B 컨테이너를 생성 하며 마운트 한다. (readonly)
A 컨테이너는 1시간에 한번씩 특정 웹사이트를 크롤링 하여 Host의 data 디렉토리에 저장한다. (정보 저장 가능, 정보 수집 목적)
B 컨테이너는 Host의 data 디렉토리 정보를 읽어 클라이언트에게 제공한다. (Host data 정보 수정 불가, 정보 제공 목적)
간단한 사례를 나타낸 것이고, 컨테이너 간 호스트의 디렉토리를 공유 및 참조하여 다양한 방법으로 서비스 될 수 있다.