Docker Volume
목차
Docker에서 제공하는 volume 기술은 컨테이너 애플리케이션에서 생성되고 사용되는 테이터를 유지, 보존하기 위한 메커니즘을 제공한다, 컨테이너가 삭제되어도 volum은 독립적으로 운영되어 데이터를 유지한다.
volume 기술은 Docker HostOs와 컨테이너에서 직접 접근이 가능하다.
일반적으로 컨테이너 내부의 데이터는 컨테이너의 생명주가와 연관되어 컨테이너 종료 시 삭제도지만, 이를 지속적(Persistent)으로 보존하기 위한 방법으로 volume기술이 사용된다.
Docker는 3가지 volume 기술을 제공한다.

Bind mount
- 디렉토리와 파일을 mount 가능
- “호스트파일 시스템 절대경로”:”컨테이너 내부경로” 를 직접 mount
- 사전에 연결할 파일 또는 디렉토리의 권한대로 연결된다, 존재하지 않으면 root권한으로 생성된다
- 사전정의 없이 컨테이너 실행 시 자동으로 생성되고, 컨테이너 제거시 Bind mount가 자동으로 헤제된다 이때 생성된 호스트 디렉토리 데이터(file)는 보존된다
- Bind monun 방법은 데이터를 Host의 지정된 디렉토리에서 관리한다.
docker run .. -v /my-host:/app ..
docker run --mount type=bind,source${pwd}/mydata,target=/var/log ..- docker run .. -v /my-host:/app …
- docker run –mount type=bind,source${pwd}/mydata,target=/var/log ..
Docker volume
- Docker에서 권장하는 방법으로 “docker volume create 볼륨명”으로 볼륨을 생성한다.
- Docker 볼륨은 Docker 명령어(CLI)와 Docker API통해 사용 할 수 있다.
- docker volume 명령은 Docker root dir(/var/lib/docker) 영역에 volume 영역을 만들어 컨테이너 내부 경로와 연결(mount), 공유한다.
- 볼륩 드라이버(vieus/sshfs plugin)를 통해 원격 호스트 및 클라우드 환경에 볼륨 내용을 저장하고 암호화가 가능하다
- 새 볼륨으로 지정될 영역(directory)dp 데이터를 미리 채우고 컨테이너에 연결하면 컨테이너 내에서 바로 데이터 사용이 가능하다.
- docker volume은 데이터를 Docker가 중앙에서 컨테이너와 공유영역을 관리한다.
docker volum create my-vol
docker run .. -v my-vol:/app ..
docker run .. --mount soruce=my-vol,target=/app ..- 암시적 docker volume(권장하지 않음)
- -v “컨테이너 내부경로” 를 사용하여 mount 한다
- Docker volume생성되는 경로에 해쉬값으로 생성(/var/lib/dockr/volumes/[해쉬값]/_data)된다
docker run .. -v /var/lib/mysql ..tmpfs mount
- Docker hostOS의 Memory에서만 지속되고, 해당 컨테이너가 중지되면 tmpfs mount 연결 해제와 함께 기록된 데이터도 사라진다.
- 컨테이너간 공유 설정은 불가하며 Linux 기반 Docker에서만 지원된다.
- 임시로 사용하고 기록되지 않아야 되는 파일, 데이터 등을 사용 할 경우에 유용하다.(host영역 및 컨테이너의 write영역에 파일이 기록되지 않음)
- 호스프 파일 시스템에 별도의 ㅣ경로를 생성하지 않고, 컨테이너와 메모리에만 임시 생성되며 지속성을 갖지 않는다.
docker run .. -tmpfs /var/www/html ..
docker run .. --mount type=tmpfs,destination=/var/www/html ..