[DevOps] MS 공식문서로 이해하는 Docker - 4 데이터베이스 유지

Song-YunMin·2021년 5월 29일
1

DevOps

목록 보기
6/9
post-custom-banner

본 내용은 Microsoft에서 제공하는 Docker 자습서 내용을 정리한 글입니다.
원문과 내용이 비슷하지만, Docker를 접하기에 아주 유용한 문서로 개인 학습 및 정보공유 차원에서 작성합니다.

컨테이너 파일 시스템

  • 컨테이너는 실행 시 이미지의 다양한 계층을 파일 시스템에 사용함
  • 각 컨테이너에는 파일을 만들거나 업데이트하거나 제가할 수 있는 자체 "스크래치 공간" 이 할당됨
  • 같은 이미지를 사용하는 경우에도 다른 컨테이너에는 변경 내용이 표시되지 않음

체험해 보기

  • 작동방식을 실제로 확인하기 위해선 컨테이너 2개를 시작하고 각 컨테이너에 파일을 만듬
  • 한 컨테이너에서 만든 파일은 다른 컨테이너에서는 사용할 수 없다는 것을 알 수 있음
  1. 1 에서 10,000 사이의 난수가 포함된 /data.txt 파일을 만드는 ubuntu 컨테이너를 시작함.

    $ docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o 
    /data.txt && tail -f /dev/null"
  2. exec로 컨테이너에 액세서하여 출력이 표시되는지 확인함.

    $ docker exec <Container ID> cat /data.txt

    난수가 표시되어야 함

  3. 이제 다른 ubuntu 컨테이너(같은 이미지) 를 시작하면 같은 파일이 없다는 것을 확인할 수 있음

    $ docker run -it ubuntu ls /

    컨테이너를 살펴보고 data.txt 파일이 없는 것을 확인합니다. 파일이 첫 번째 컨테이너의 스크래치 공간에만 작성되었기 때문

  4. 계속해서 docker rm -f 명령을 사용하여 첫 번째 컨테이너를 제거함

컨테이너 볼륨

  • 지금까지의 실험에서는 각 컨테이너를 시작할 때마다 이미지 정의에서 시작되는 것을 확인함
  • 컨테이너는 파일을 만들고, 업데이트하고, 삭제할 수 있지만 컨테이너를 제거하면 변경 내용이 모두 손실되며 모든 변경 내용이 해당 컨테이너에 격리됨.
  • 볼륨을 사용하면 이 모든 것을 변경할 수 있음
  • 볼륨은 컨테이너의 특정 파일 시스템 경로를 호스트 머신에 다시 연결하는 기능을 제공
  • 컨테이너의 디렉터리를 탑재하면 해당 디렉터리의 변경 내용이 호스트 머신에도 표시 됨
  • 컨테이너를 다시 시작한 후에도 동일한 디렉터리를 탑재하면 같은 파일이 표시 됨

볼륨에는 두 가지 기본 유형이 있음

  • 명명된 볼륨
  • 바인드 탑재

시작은 명명된 볼륨으로 함

todo 데이터 유지

기본적으로 todo 앱은 /etc/todos/todo.db 에 있는 SQLite 데이터베이스에 데이터를 저장함

  • 데이터베이스가 단일 파일이므로 해당 파일을 호스트에 보관하고 다음 컨테이너에서 사용할 수 있게 하면, 컨테이너가 마지막으로 중단된 위치부터 다시 이어서 시작할 수 있어야 함
  • 볼륨을 만들어 데이터가 저장된 디렉터리에 연결("탑재"라고도 함)하면 데이터를 유지할 수 있음
  • 컨테이너가 todo.db 파일에 쓰면 볼륨의 호스트에 보관 됨
  • 명명된 볼륨을 사용한다고 가정, 명명된 볼륨은 단순히 데이터 버킷으로 생각하면 편함.
  • Docker 에서 디스크 상의 실제 위치를 유지 관리하므로 볼륨 이름만 기억하면 됨

  1. docker volume create 명령을 사용하여 볼륨을 생성

    $ docker volume create todo-db
  2. 영구적인 볼륨을 사용하지 않고 계속 실행됨에 따라 Todo 앱 컨테이너를 중지함 (docker rm -f <id>)

  3. todo 앱 컨테이너를 시작하되, -v 플래그를 추가하여 볼륨 탑재를 지정함. 명명된 볼륨을 사용하고 /etc/todos 에 탑재하면 경로에 생성된 모든 파일이 캡쳐됨

    $ docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started
  4. 컨테이너가 시작되면 앱을 열고 todo 목록에 몇 개의 항목을 추가함

  1. todo 앱의 컨테이너를 제거함, (docker rm -f <id>)
  2. 위와 동일한 명령을 사용하여 새 컨테이너를 시작함
  3. 앱을 실행시키면 위에서 추가한 목록이 표시되어야 함
  4. 확인을 마쳤으면 컨테이너를 제거함

Reference

Docker 자습서 4부

profile
고독한 서버 개발 3년차
post-custom-banner

0개의 댓글