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

LinuxIntermediate
지금 연습하기

소개

이번 챌린지에서는 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) 애플리케이션을 운영하는 데 필수적인 기초 지식입니다.

✨ 솔루션 확인 및 연습