컨테이너화된 애플리케이션 서비스 복구

DockerBeginner
지금 연습하기

소개

컨테이너화된 애플리케이션 서비스는 systemd 유닛, 래퍼 (wrapper) 명령, 이미지 참조, 컨테이너 런타임, 애플리케이션 출력 등 여러 계층으로 구성됩니다. 잘못된 이미지 태그가 설정되어 있으면 애플리케이션이 시작되기도 전에 서비스가 실패할 수 있습니다.

이 실습에서는 rhce-container-app.service가 Podman 을 사용하여 UBI 10 minimal 컨테이너를 실행합니다. 올바른 이미지는 이미 로컬에 풀 (pull) 되어 있지만, 서비스 환경 파일이 잘못된 태그를 가리키고 있습니다. 여러분은 서비스 실패 원인을 진단하고, 이미지 태그를 수정하며, 서비스를 재시작하고, 실행 중인 컨테이너를 검증하게 됩니다.

컨테이너 서비스 실패 확인

이 단계에서는 컨테이너 설정을 변경하기 전에 실패한 systemd 유닛을 검사합니다.

프로젝트 디렉토리로 이동하여 작업 공간을 생성합니다.

cd /home/labex/project
mkdir -p container-service

서비스 상태를 확인합니다.

systemctl is-failed rhce-container-app.service || true

선택한 서비스 속성을 저장합니다.

systemctl show rhce-container-app.service -p ActiveState -p Result -p ExecMainStatus | tee container-service/service-state.txt

최근 서비스 로그를 읽습니다.

sudo journalctl -u rhce-container-app.service -n 20 --no-pager

애플리케이션이 준비 파일을 생성하기 전에 서비스가 실패하는 것을 확인할 수 있습니다.

이미지 및 환경 파일 검사

이 단계에서는 로컬에 사용 가능한 이미지와 서비스에서 사용하는 이미지 태그를 비교합니다.

로컬 이미지를 나열합니다.

sudo podman images | tee container-service/images.txt

서비스 환경 파일을 읽습니다.

sudo cat /etc/rhce-container/app.env | tee container-service/env-before.txt

래퍼 명령을 확인합니다.

sudo sed -n '1,16p' /usr/local/bin/rhce-container-run

로컬 이미지 태그는 latest이지만, 서비스는 missing을 가리키고 있습니다.

이미지 태그 복구

이 단계에서는 서비스 환경 파일만 업데이트하여 풀 (pull) 된 이미지 태그를 사용하도록 수정합니다.

잘못된 태그를 교체합니다.

sudo sed -i 's/:missing/:latest/' /etc/rhce-container/app.env

수정된 환경 설정을 저장합니다.

sudo cat /etc/rhce-container/app.env | tee container-service/env-after.txt

이제 서비스가 로컬에 존재하는 이미지를 가리키게 되었습니다.

컨테이너 서비스 재시작

이 단계에서는 실패 상태를 초기화하고 systemd 로 관리되는 컨테이너를 재시작합니다.

실패 상태를 재설정합니다.

sudo systemctl reset-failed rhce-container-app.service

서비스를 재시작합니다.

sudo systemctl restart rhce-container-app.service

활성 상태를 저장합니다.

systemctl is-active rhce-container-app.service | tee container-service/service-final.txt

이제 Podman 이 올바른 이미지를 사용할 수 있으므로 서비스가 활성 상태를 유지해야 합니다.

실행 중인 컨테이너 검증

이 단계에서는 Podman 상태와 애플리케이션 준비 파일을 확인합니다.

실행 중인 컨테이너를 나열합니다.

sudo podman ps --filter name=rhce-container-app --format "{{.Names}} {{.Status}}" | tee container-service/container-state.txt

컨테이너가 생성한 준비 파일을 읽습니다.

cat /srv/rhce-container/ready.txt | tee container-service/ready.txt

컨테이너화된 서비스가 정상적으로 실행 중이며 예상된 출력을 생성했습니다.

요약

systemd 로 관리되는 Podman 서비스의 실패 원인을 진단하고, 사용 가능한 이미지와 설정된 이미지 태그를 비교하여 환경 파일을 수정했으며, 서비스를 재시작하고 실행 중인 컨테이너와 애플리케이션 준비 파일을 검증했습니다.