Menu Close
Settings Close

Language and Page Formatting Options

第15章 コンテナーチェックポイントの作成および復元

CRIU (Checkpoint/Restore In Userspace) は、実行中のコンテナーまたは個々のアプリケーションでチェックポイントを設定して、その状態をディスクに保存するソフトウェアです。保存したデータを使用して、再起動後に、チェックポイントの時点にコンテナーを復元できます。

15.1. ローカルでのコンテナーチェックポイントの作成および復元

以下の例は、要求ごとにインクリメントする整数を 1 つ返す Python ベースの Web サーバーをベースとしています。

手順

  1. 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()
  2. 以下の定義でコンテナーを作成します。

    # 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

    コンテナーは Universal Base Image (UBI 8) をベースとしており、Python ベースのサーバーを使用します。

  3. コンテナーをビルドします。

    # podman build . --tag counter

    counter.py ファイルおよび Containerfile ファイルは、コンテナービルドプロセス (podman build) の入力情報です。ビルドされたイメージはローカルに保存され、counter でタグ付けされます。

  4. root でコンテナーを起動します。

    # podman run --name criu-test --detach counter
  5. 実行中のコンテナーの一覧を表示するには、次のコマンドを実行します。

    # podman ps
    CONTAINER ID  IMAGE  COMMAND  CREATED   STATUS  PORTS NAMES
    e4f82fd84d48  localhost/counter:latest  5 seconds ago  Up 4 seconds ago  criu-test
  6. コンテナーの IP アドレスを表示します。

    # podman inspect criu-test --format "{{.NetworkSettings.IPAddress}}"
    10.88.0.247
  7. 要求をコンテナーに送信します。

    # curl 10.88.0.247:8080
    0
    # curl 10.88.0.247:8080
    1
  8. コンテナーのチェックポイントを作成します。

    # podman container checkpoint criu-test
  9. システムを再起動します。
  10. コンテナーを復元します。

    # podman container restore --keep criu-test
  11. 要求をコンテナーに送信します。

    # curl 10.88.0.247:8080
    2
    # curl 10.88.0.247:8080
    3
    # curl 10.88.0.247:8080
    4

    結果は 0 で開始あれるのではなく、以前の値で継続されます。

これにより、再起動後に完全なコンテナーの状態を簡単に保存できます。