LabHub
배우기 러닝패스 코스

Volumes, Networks and Compose

Volumes and Mounts

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 라는 새 볼륨을 만들어 백업을 복원합니다. 원본과 내용이 같아야 합니다.

참고

이름 있는 볼륨 만들기

/root/ops1 을 만들고, dk-data 라는 이름 있는 볼륨을 만듭니다.

볼륨을 다루는 하위 명령 그룹이 따로 있습니다. 만들기만 하면 되고 아직 컨테이너는 필요 없습니다.

볼륨에 파일 쓰기

dk-writer 라는 컨테이너로 dk-data/data 에 마운트해 /data/hello.txtvolume-alive 를 씁니다.

컨테이너를 띄워 볼륨을 마운트하고 파일을 씁니다. 이름을 붙여 두세요 — 다음 단계에서 그 이름을 지웁니다.

컨테이너를 지워도 남는가

dk-writer 컨테이너를 삭제한 뒤, 새 컨테이너로 같은 볼륨을 읽어 내용이 남아 있는지 확인하고 그 출력을 /root/ops1/persist.txt 로 저장합니다.

파일을 쓴 컨테이너를 지운 뒤 새 컨테이너로 같은 볼륨을 읽어 보세요. 확인한 내용을 파일로도 남깁니다.

호스트 디렉터리를 그대로 붙이기

/root/ops1/site/index.html 을 만들어 labhub-site 를 넣고, nginx:1.27-alpinedk-site 라는 이름으로 띄우되 /root/ops1/site/usr/share/nginx/html 에 바인드 마운트합니다.

바인드 마운트는 호스트 경로를 직접 지정합니다. nginx 의 기본 문서 루트 경로에 붙이면 바로 확인됩니다.

읽기 전용으로 붙이기

dk-ro 컨테이너를 띄워 dk-data/data읽기 전용으로 마운트하고, 그 안에서 파일 쓰기를 시도해 나오는 오류 메시지를 /root/ops1/ro-error.txt 로 저장합니다.

마운트 옵션에 읽기 전용 플래그를 붙이고, 안에서 쓰기를 시도해 나오는 오류 메시지를 그대로 저장하세요.

--mount 문법으로 다시 쓰기

dk-site2 컨테이너를 --mount 문법으로 띄워, 4단계와 같은 원본·대상으로 붙이되 읽기 전용으로 만듭니다.

짧은 문법과 같은 결과가 나와야 합니다. type, source, target, readonly 를 쉼표로 이어 씁니다.

볼륨 백업하기

dk-data 볼륨의 내용을 /root/ops1/dk-data.tgz 로 백업합니다. 아카이브 안에 hello.txt 가 들어 있어야 합니다.

볼륨과 백업 대상 디렉터리를 동시에 마운트한 임시 컨테이너를 씁니다. -C 로 소스 안으로 들어가야 경로가 깔끔합니다.

새 볼륨으로 복원하기

dk-data-restore 라는 새 볼륨을 만들어 백업을 복원합니다. 원본과 내용이 같아야 합니다.

새 볼륨을 만들고 아카이브를 풀어 넣으세요. 원본과 내용이 정확히 같아야 합니다.