[Docker] 도컨살 EP.5 - DB 유지하기

정재경·2022년 10월 7일

도컨살

목록 보기
5/8
post-thumbnail

DB 유지하기

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

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

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

컨테이너의 파일시스템

컨테이너는 우리가 지정해준 이미지를 base로 각자의 독립된 공간을 가지는 인스턴스라고 앞에서 배웠다.
이는 당연한 얘기이지만 같은 이미지에서 생성한 컨테이너여도 다른 컨테이너라면 각자 갖고 있는 파일은 다르다.

공식문서에서는 상당히 귀찮게 이를 컨테이너 두개를 만들고.. txt파일 하나 만들고.. 해서 증명해준다.

우리는 공식문서 친구들이 열심히 해줬으니까 그렇구나~ 하고 넘어가자

컨테이너 볼륨

위의 실험 (우리는 안한ㅋㅋ) 을 통해서 컨테이너 내부에 존재하는 파일 스토리지는 그 컨테이너가 사라짐과 같이 싹~ 사라져버린다.

이런걸 해결하기 위해 있는 것이 바로 볼륨이다. 볼륨은 컨테이너에 있는 특정한 파일 경로를 호스트 머신과 연결해주는 역할을 한다! 그래서 컨테이너에서 해당 경로에다가 파일을 생성하거나 변경, 삭제를 한 내용이 그 컨테이너가 삭제돼도 남아있는 것이다!

Named Volume

우선 도커가 제공하는 Todo앱은 기본적으로 DB를 SQLite를 쓴다. SQLite는 따로 DB 서버가 있지는 않고 그냥 파일 하나로 DB를 저장한다.

그래서 Todo앱에서 생성되는 SQLite DB파일이 저장되는 경로를 볼륨과 연결해준다면 컨테이너를 지웠다가 새로 생성해도 똑같은 볼륨과 연결돼있다면 이전에 만들어놓은 DB파일이 유지될 것이다!

Docker 볼륨에는 두 가지가 있는데 일단 Named Volume 부터 만들어보자!

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

N줄 요약

  1. 컨테이너는 독립된 파일스토리지를 갖고 있기 때문에 컨테이너를 삭제하면 그 변경점들을 저장할 수 없다.
  2. 만약에 그것들을 저장하고 싶다면 볼륨을 생성한다.
  3. 볼륨은 컨테이너의 특정한 파일 경로와 연결해서 컨테이너 외부에 파일을 쓰고 저장할 수 있게 해준다.
  4. 볼륨 생성은 docker volume create <volume-name> 으로 한다
  5. 볼륨 연결은 docker run -dp 3000:3000 -v <volume-name>:<file-path> <image-name>
profile
You'll see what I've become.

0개의 댓글