본문 바로가기
Data-driven Methodology/Data Engineering

[Data Engineering] 데이터베이스 유지

by goatlab 2024. 1. 23.
728x90
반응형
SMALL

데이터베이스 유지

 

컨테이너를 시작할 때마다 to do 목록이 비어 있다.

 

컨테이너 파일 시스템

 

컨테이너가 실행되면 파일 시스템에 대한 이미지의 다양한 레이어를 사용한다. 또한, 각 컨테이너에는 파일을 생성/업데이트/제거하기 위한 자체 "스크래치 공간"이 있다. 동일한 이미지를 사용하더라도 다른 컨테이너에는 변경 사항이 표시되지 않는다.

 

1에서 10000 사이의 임의의 숫자로 ubuntu이름이 지정된 ./data.txt  파일을 생성하는 컨테이너를 시작한다.

 

docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"

 

컨테이너의 터미널에 액세스하여 출력을 볼 수 있는지 확인한다. 이를 위해 CLI 또는 Docker Desktop의 그래픽 인터페이스를 사용할 수 있다.

 

# CLI
docker exec <container-id> cat /data.txt

# docker desktop
cat /data.txt

 

Docker Desktop에서 Containers로 이동하여 ubuntu 이미지를 실행하는 컨테이너 위로 마우스를 가져간 다음 컨테이너 작업 표시 메뉴를 선택한다. 드롭다운 메뉴에서 Open in terminal를 선택한다.

 

 

 

docker run -it ubuntu ls /

 

이 경우 명령은 컨테이너의 루트 디렉터리에 있는 파일을 나열한다. 보세요. 첫 번째 컨테이너에 대해서만 스크래치 공간에 기록되었기 때문에 파일이 없다. 계속해서 docker rm -f <container-id> 명령을 사용하여 첫 번째 컨테이너를 제거한다.

 

컨테이너 볼륨

 

컨테이너는 파일을 생성, 업데이트 및 삭제할 수 있지만 컨테이너를 제거하면 해당 변경 사항이 손실되고 Docker는 해당 컨테이너에 대한 모든 변경 사항을 격리한다. 볼륨을 사용하면 이 모든 것을 변경할 수 있다.

 

볼륨은 컨테이너의 특정 파일 시스템 경로를 호스트 시스템에 다시 연결하는 기능을 제공한다. 컨테이너에 디렉터리를 탑재하면 해당 디렉터리의 변경 사항이 호스트 시스템에도 표시된다. 컨테이너를 다시 시작할 때 동일한 디렉터리를 마운트하면 동일한 파일이 표시된다.

 

볼륨 생성 및 컨테이너 시작

 

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

 

docker volume create todo-db

 

Todo 앱 컨테이너는 영구 볼륨을 사용하지 않고 여전히 실행 중이므로 docker rm -f  명령을 사용하여 다시 한 번 중지하고 제거한다.

 

todo 앱 컨테이너를 시작하고 볼륨 마운트를 지정하는 --mount 옵션을 추가한다. 볼륨에 이름을 지정하고 컨테이너에 마운트하면 /etc/todos 경로에서 생성된 모든 파일이 캡처된다. Mac 또는 Linux 터미널이나 Windows 명령 프롬프트 또는 PowerShell에서 다음 명령을 실행한다.

 

docker run -dp 127.0.0.1:3000:3000 --mount type=volume,src=todo-db,target=/etc/todos getting-started

 

Todo 앱의 컨테이너를 중지하고 제거한다. Docker Desktop을 사용하거나 docker ps에서 ID를 가져온 다음 docker rm -f <id> 명령을 이용하여 제거한다. 

 

 

그리고 새 컨테이너를 시작하여 앱을 연다. 목록에 항목이 계속 표시되어야 한다. 목록 확인이 끝나면 컨테이너를 제거한다.

 

 

ocker volume inspect 명령을 사용하여 docker가 데이터를 어디에 저장하는지 알 수 있다.

 

docker volume inspect todo-db
[
    {
        "CreatedAt": "2019-09-26T02:18:36Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/todo-db/_data",
        "Name": "todo-db",
        "Options": {},
        "Scope": "local"
    }
]

 

여기서, Mountpoint는 디스크에 있는 데이터의 실제 위치이다. 대부분의 시스템에서는 호스트에서 이 디렉터리에 액세스하려면 루트 액세스 권한이 필요하다.

 

https://docs.docker.com/get-started/05_persisting_data/

 

Persist the DB

Making your DB persistent in your application

docs.docker.com

 

728x90
반응형
LIST