컨테이너에 영구 스토리지 연결하기

Red Hat Enterprise LinuxBeginner
지금 연습하기

소개

이번 챌린지에서는 podman을 사용하여 컨테이너에 영구 스토리지를 연결해 보겠습니다. 기본적으로 컨테이너는 휘발성 성격을 띠고 있어, 컨테이너 내부에서 생성된 데이터는 컨테이너가 삭제될 때 함께 사라집니다. 데이터를 안전하게 보존하려면 호스트 시스템의 디렉터리를 컨테이너 내부로 마운트해야 합니다. 이렇게 마운트된 디렉터리를 영구 볼륨이라고 하며, 이를 통해 컨테이너가 중지되거나 삭제, 또는 재생성되더라도 데이터를 유지할 수 있습니다.

컨테이너에 영구 스토리지 연결하기

이번 실습에서는 호스트 시스템에 영구 볼륨 역할을 할 디렉터리를 생성합니다. 그런 다음 새 컨테이너를 실행하면서 이 영구 볼륨을 연결합니다. 마지막으로 컨테이너 내부에서 볼륨에 기록한 데이터가 컨테이너 재시작 후에도 그대로 남아 있는지 확인합니다.

수행 과제

  • 영구 볼륨으로 사용할 디렉터리를 호스트 시스템에 생성합니다.
  • 새 컨테이너를 실행하고 영구 볼륨을 연결합니다.
  • 컨테이너 내부에서 볼륨에 작성한 데이터가 컨테이너 재시작 후에도 유지되는지 검증합니다.

요구 사항

  • 호스트 시스템에 /data라는 이름의 디렉터리를 생성합니다. 이 디렉터리는 볼륨 마운트를 위한 호스트 경로로 사용됩니다.
  • nginx 이미지를 사용하여 컨테이너를 실행합니다. 컨테이너 이름은 my-nginx-container로 지정해야 합니다.
  • 호스트의 /data 디렉터리를 컨테이너 내부의 /usr/share/nginx/html 디렉터리에 마운트합니다.
  • 실행 중인 컨테이너 내부의 /usr/share/nginx/html/my-file.txt 경로에 This is a persistent file이라는 내용을 가진 파일을 생성합니다.

예시

과제를 완료하면 컨테이너의 마운트된 디렉터리 내에서 기본 Nginx 파일들과 함께 사용자가 생성한 파일을 확인할 수 있습니다. 또한 호스트의 /data 디렉터리에서도 동일한 파일을 확인할 수 있습니다.

[labex@host ~]$ podman exec my-nginx-container cat /usr/share/nginx/html/my-file.txt
This is a persistent file
[labex@host ~]$ podman exec my-nginx-container ls /usr/share/nginx/html
my-file.txt

힌트

  • /data 디렉터리를 생성할 때는 sudo mkdir 명령어를 사용하세요.
  • 컨테이너 프로세스가 해당 디렉터리에 데이터를 쓸 수 있도록 sudo chown으로 소유권을 변경하거나 sudo chmod로 권한을 조정해야 할 수도 있습니다.
  • podman run 명령어에서 호스트 디렉터리를 컨테이너에 마운트하려면 -v 또는 --volume 플래그를 사용합니다. 형식은 -v /host/path:/container/path입니다.
  • RHEL 과 같이 SELinux 가 활성화된 시스템에서는 호스트 디렉터리에 적절한 SELinux 컨텍스트를 설정해야 합니다. sudo semanage fcontext -a -t container_file_t "/data(/.*)?"sudo restorecon -R /data 명령어를 사용하여 SELinux 레이블을 구성하세요.
  • 권한 오류가 발생하면 디렉터리 소유자를 컨테이너의 사용자 ID(일반적으로 nginx 의 경우 1000:1000) 와 일치하도록 설정해 보시기 바랍니다.

요약

이번 챌린지에서는 바인드 마운트 (bind mount) 를 사용하여 컨테이너에 영구 스토리지를 제공하는 방법을 배웠습니다. 호스트 시스템의 디렉터리를 컨테이너에 마운트함으로써, 컨테이너가 중지, 삭제 또는 재시작되더라도 애플리케이션에서 생성된 데이터가 안전하게 보존되도록 설정했습니다. 이 기술은 컨테이너 환경에서 상태 저장 (stateful) 애플리케이션을 운영하는 데 필수적인 기초 지식입니다.

✨ 솔루션 확인 및 연습