22장. 컨테이너 체크포인트 생성 및 복원
CRIU(Checkpoint/Restore In Userspace)는 실행 중인 컨테이너 또는 개별 애플리케이션에서 체크포인트를 설정하고 해당 상태를 디스크에 저장할 수 있는 소프트웨어입니다. 저장된 데이터를 사용하여 체크포인트가 발생했을 때 동시에 컨테이너를 재부팅한 후 컨테이너를 복원할 수 있습니다.
커널은 AArch64에서 사전 복사 체크포인트를 지원하지 않습니다.
22.1. 로컬에서 컨테이너 체크포인트 생성 및 복원
이 예제는 각 요청 후에 증가되는 단일 정수를 반환하는 Python 기반 웹 서버를 기반으로 합니다.
사전 요구 사항
-
container-tools
meta-package가 설치되어 있습니다.
절차
Python 기반 서버를 생성합니다.
# cat counter.py #!/usr/bin/python3 import http.server counter = 0 class handler(http.server.BaseHTTPRequestHandler): def do_GET(s): global counter s.send_response(200) s.send_header('Content-type', 'text/html') s.end_headers() s.wfile.write(b'%d\n' % counter) counter += 1 server = http.server.HTTPServer(('', 8088), handler) server.serve_forever()
다음 정의를 사용하여 컨테이너를 생성합니다.
# cat Containerfile FROM registry.access.redhat.com/ubi9/ubi COPY counter.py /home/counter.py RUN useradd -ms /bin/bash counter RUN dnf -y install python3 && chmod 755 /home/counter.py USER counter ENTRYPOINT /home/counter.py
컨테이너는 UBI(Universal Base Image)를 기반으로 하며 Python 기반 서버를 사용합니다.
컨테이너를 빌드합니다.
# podman build . --tag counter
파일
counter.py
및Containerfile
은 컨테이너 빌드 프로세스(podman build
)에 대한 입력입니다. 빌드된 이미지는 로컬에 저장되고 태그카운터
로 태그가 지정됩니다.컨테이너를 root로 시작합니다.
# podman run --name criu-test --detach counter
실행 중인 모든 컨테이너를 나열하려면 다음을 입력합니다.
# podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e4f82fd84d48 localhost/counter:latest 5 seconds ago Up 4 seconds ago criu-test
컨테이너의 IP 주소를 표시합니다.
# podman inspect criu-test --format "{{.NetworkSettings.IPAddress}}" 10.88.0.247
컨테이너로 요청을 보냅니다.
# curl 10.88.0.247:8088 0 # curl 10.88.0.247:8088 1
컨테이너에 대한 checkpoint를 생성합니다.
# podman container checkpoint criu-test
- 시스템을 재부팅합니다.
컨테이너를 복원합니다.
# podman container restore --keep criu-test
컨테이너로 요청을 보냅니다.
# curl 10.88.0.247:8080 2 # curl 10.88.0.247:8080 3 # curl 10.88.0.247:8080 4
이제 결과가
0
에서 다시 시작되지 않지만 이전 값을 계속 진행합니다.
이렇게 하면 재부팅을 통해 전체 컨테이너 상태를 쉽게 저장할 수 있습니다.
추가 리소스