도커에서는 4가지 스토리지 타입 존재함.
volumes, bind mounts, tmpfs, named pipe이다.
tmpfs, named pipe는 리눅스인 경우와 윈도우인 경우로 platform dependency가 있고 많이 사용되지 않음.
컨테이너는 임시적으로 살았다 죽는 존재인데 데이터를 어떻게 저장할까?
Docker Storage는 전적으로 임시방편에 해당한다.
컨테이너는 임시로 살아있는 것이기 때문에 persist를 위한것이 아니다.
필요할때 필요한만큼 만들고 죽였다 살리는데 죽을때 흔적을 남기는게 살아나는 애한테 영향을 주는건 컨테이너 철학에 맞지않다.
컨테이너의 writable layer로 host machine의 파일시스템에 접근한다. 컨테이너는 disk processing용이 아니기 때문에 기본적으로 잘 사용되지 않고 host가 직접 사용하는것보다 performance가 떨어진다.
컨테이너에서 host컴퓨터의 파일시스템을 향하고 있음.
도커 엔진이 실행되고 있는 컴퓨터의 디스크를 향하고 있다. 즉 컨테이너 바깥에 저장한다.
bind mount나 volume을 사용해서 컨테이너가 어떤 형태의 파일 만들거나 작업하는 경우 host에 저장된다.
host컴퓨터에 만들어지는 정보는 컨테이너의 사라짐과 함께 사라지는 임시정보라고 보는게 맞다.
volume은 파일시스템에서 도커 엔진을 실행하는 컴퓨터 디스크 내부의 docker area를 사용한다.
docker area는 도커 엔진이 만들고 관리하는 공간이라서 개발자나 운영자가 직접 접근하는것을 권장하지 않음.
디스크를 꽂아서 리눅스가 인식해서 디스크를 운영체제가 쓸수있게 해주는 상황을 mount라고 부른다.
bind는 운영체제의 중재하에 특정 디렉토리를 어플리케이션이 사용하도록 매핑해주는것이다.
즉 bind mount는 이미 디스크에 있는 폴더를 컨테이너가 접근할 수 있도록 매핑해주는 것이다.