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



