데이터베이스 유지
컨테이너를 시작할 때마다 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/
'Data-driven Methodology > Data Engineering' 카테고리의 다른 글
[Data Engineering] Docker Compose (0) | 2024.01.23 |
---|---|
[Data Engineering] 다중 컨테이너 앱 (0) | 2024.01.23 |
[Data Engineering] 어플리케이션 업데이트 (0) | 2024.01.23 |
[Data Engineering] 도커 (Docker) (0) | 2024.01.22 |
Extract / Transform / Load (ETL) (0) | 2022.05.11 |