Docker 공식문서에서 주는 샘플 앱은 간단한 Todo App인데 사실 이건 반쪽짜리 앱이다.

Todo 앱인데 컨테이너를 껐다가 다시 실행하면

텅.. 이다 ㅋㅋㅋ 그래서 이제 여기에다가 DB를 붙혀서 컨테이너가 꺼지더라도 내 할일이 저장되게 해보자!

컨테이너는 우리가 지정해준 이미지를 base로 각자의 독립된 공간을 가지는 인스턴스라고 앞에서 배웠다.
이는 당연한 얘기이지만 같은 이미지에서 생성한 컨테이너여도 다른 컨테이너라면 각자 갖고 있는 파일은 다르다.
공식문서에서는 상당히 귀찮게 이를 컨테이너 두개를 만들고.. txt파일 하나 만들고.. 해서 증명해준다.
우리는 공식문서 친구들이 열심히 해줬으니까 그렇구나~ 하고 넘어가자

위의 실험 (우리는 안한ㅋㅋ) 을 통해서 컨테이너 내부에 존재하는 파일 스토리지는 그 컨테이너가 사라짐과 같이 싹~ 사라져버린다.
이런걸 해결하기 위해 있는 것이 바로 볼륨이다. 볼륨은 컨테이너에 있는 특정한 파일 경로를 호스트 머신과 연결해주는 역할을 한다! 그래서 컨테이너에서 해당 경로에다가 파일을 생성하거나 변경, 삭제를 한 내용이 그 컨테이너가 삭제돼도 남아있는 것이다!

우선 도커가 제공하는 Todo앱은 기본적으로 DB를 SQLite를 쓴다. SQLite는 따로 DB 서버가 있지는 않고 그냥 파일 하나로 DB를 저장한다.
그래서 Todo앱에서 생성되는 SQLite DB파일이 저장되는 경로를 볼륨과 연결해준다면 컨테이너를 지웠다가 새로 생성해도 똑같은 볼륨과 연결돼있다면 이전에 만들어놓은 DB파일이 유지될 것이다!
Docker 볼륨에는 두 가지가 있는데 일단 Named Volume 부터 만들어보자!

docker volume create todo-db 로 새로운 Named Volume을 생성한다.docker run -dp 3000:3000 -v todo-db:/etc/todos docker_test 로 방금 생성한 볼륨을 연결해서 생성한다./etc/todos는 Todo 앱에서 SQLite DB 파일이 저장되는 곳이다.-v todo-db:/etc/todos -v 옵션으로 볼륨을 지정해준다는 것이고 앞에는 볼륨 이름, 뒤에는 연결해줄 컨테이너의 파일 경로를 입력해주면 연결된다.
이러고 똑같이 컨테이너 새로 만들어서 확인해보면 이거 저장될까?가 그래도 있다! 굿ㅋㅋdocker volume inspect todo-db 를 하면 볼륨에 대한 상세 정보도 확인할 수 있다.
docker volume create <volume-name> 으로 한다docker run -dp 3000:3000 -v <volume-name>:<file-path> <image-name>