LabHub

볼륨·네트워크·컴포즈 · 데이터 영속화 · 실습

볼륨과 마운트

LabHub 에서 이어서 보기

이 실습은 진짜 VM 에서 돕니다

이 상자는 파드가 아니라 KubeVirt 가 띄운 가상머신입니다. 리눅스 커널이
따로 돌고 systemd 가 실제로 서비스를 관리하며, docker 는 흉내가 아니라
진짜 도커 엔진입니다. docker run 으로 띄운 컨테이너는 실제로 프로세스가
되고 docker execdocker logs 도 그대로 동작합니다.

예전에는 이 실습이 파드 안에서 돌았습니다. 커널 권한을 전부 내려놓은 상자라
컨테이너를 띄우는 단계가 막혀 있었고, 그래서 이미지 아카이브를 직접 풀어
보는 우회로 배웠습니다. 이제 우회가 필요 없습니다.

알아 둘 것이 둘 있습니다.

목표

볼륨·바인드·읽기 전용 마운트를 직접 만들어 보고, 컨테이너를 지워도 데이터가
남는다는 것과 백업·복원이 왕복 가능하다는 것을 확인합니다.

왜 중요한가

"컨테이너는 상태를 갖지 않는다"는 말은 컨테이너가 상태를 다루지 못한다는
뜻이 아니라, 상태를 컨테이너 밖에 두라는 뜻입니다. 이 구분을 못 하면
재배포마다 데이터가 사라지거나, 반대로 볼륨이 눈덩이처럼 쌓여도 아무도
지우지 못하는 상태가 됩니다. 또 하나. 읽기 전용 마운트는 성능이 아니라
의도의 선언입니다. 이 컨테이너가 무엇을 쓰면 안 되는지 매니페스트에
적어 두면, 나중에 그 규칙을 어기는 코드가 배포되는 순간 조용히 넘어가지
않고 오류로 드러납니다.

단계

1. /root/ops1 을 만들고, dk-data 라는 이름 있는 볼륨을 만듭니다.
2. dk-writer 라는 컨테이너로 dk-data/data 에 마운트해 /data/hello.txtvolume-alive 를 씁니다.
3. dk-writer 컨테이너를 삭제한 뒤, 새 컨테이너로 같은 볼륨을 읽어 내용이 남아 있는지 확인하고 그 출력을 /root/ops1/persist.txt 로 저장합니다.
4. /root/ops1/site/index.html 을 만들어 labhub-site 를 넣고, nginx:1.27-alpinedk-site 라는 이름으로 띄우되 /root/ops1/site/usr/share/nginx/html 에 바인드 마운트합니다.
5. dk-ro 컨테이너를 띄워 dk-data/data읽기 전용으로 마운트하고, 그 안에서 파일 쓰기를 시도해 나오는 오류 메시지를 /root/ops1/ro-error.txt 로 저장합니다.
6. dk-site2 컨테이너를 --mount 문법으로 띄워, 4단계와 같은 원본·대상으로 붙이되 읽기 전용으로 만듭니다.
7. dk-data 볼륨의 내용을 /root/ops1/dk-data.tgz 로 백업합니다. 아카이브 안에 hello.txt 가 들어 있어야 합니다.
8. dk-data-restore 라는 새 볼륨을 만들어 백업을 복원합니다. 원본과 내용이 같아야 합니다.

참고

단계 8개

  1. 이름 있는 볼륨 만들기
  2. 볼륨에 파일 쓰기
  3. 컨테이너를 지워도 남는가
  4. 호스트 디렉터리를 그대로 붙이기
  5. 읽기 전용으로 붙이기
  6. --mount 문법으로 다시 쓰기
  7. 볼륨 백업하기
  8. 새 볼륨으로 복원하기