第 22 章 创建并恢复容器检查点


Checkpoint/Restore in Userspace(CRIU)是一个软件,可让您在正在运行的容器或独立应用程序中设置检查点,并将它的状态保存到磁盘中。您可以在重启时同时使用保存的数据来恢复容器。

警告

内核不支持 AArch64 上的预复制检查点。

22.1. 本地创建并恢复容器检查点

这个示例基于 Python 的 web 服务器,该服务器会返回一个整数,它会在每个请求后递增。

先决条件

  • container-tools 元数据包已安装。

流程

  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

    容器基于通用基础镜像(UBI 8)并使用基于 Python 的服务器。

  3. 构建容器:

    # podman build . --tag counter

    文件 counter.pyContainerfile 是容器构建进程(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:8088
    0
    # curl 10.88.0.247:8088
    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 开始,而是从之前的值开始。

这样,您可以通过重新引导轻松保存完整的容器状态。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.