Difference between revisions of "Runc"
Jump to navigation
Jump to search
(Created page with "This article provides an overview of CRIU integration with [https://github.com/opencontainers/runc runc] and explains how to use it.") |
|||
| (11 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
This article provides an overview of CRIU integration with [https://github.com/opencontainers/runc runc] and explains how to use it. | This article provides an overview of CRIU integration with [https://github.com/opencontainers/runc runc] and explains how to use it. | ||
| + | |||
| + | == Container Checkpoint/Restore == | ||
| + | |||
| + | Create a container rootfs | ||
| + | <pre> | ||
| + | mkdir -p alpine-container/rootfs && cd alpine-container | ||
| + | wget https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/alpine-minirootfs-3.22.2-x86_64.tar.gz | ||
| + | tar -xzf alpine-minirootfs-3.22.2-x86_64.tar.gz -C rootfs | ||
| + | rm -f alpine-minirootfs-3.22.2-x86_64.tar.gz | ||
| + | </pre> | ||
| + | |||
| + | Create a container specification file: | ||
| + | |||
| + | <pre> | ||
| + | runc spec | ||
| + | </pre> | ||
| + | |||
| + | Set a command to run in the container: | ||
| + | |||
| + | <pre> | ||
| + | sed -i 's/"sh"/"sh", "-c", "i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done"/' config.json | ||
| + | </pre> | ||
| + | |||
| + | Start the container and redirect the output/error to <code>looper.out</code> and <code>looper.out</code>: | ||
| + | |||
| + | <pre> | ||
| + | sudo runc run looper 0</dev/null 1>looper.out 2>looper.err & | ||
| + | </pre> | ||
| + | |||
| + | Alternatively, you can disable the interactive terminal and run container in the background as follows: | ||
| + | |||
| + | <pre> | ||
| + | sed -i 's/"terminal": true/"terminal": false/g' config.json | ||
| + | sudo runc run -d looper 0</dev/null 1>/dev/null 2>/dev/null | ||
| + | </pre> | ||
| + | |||
| + | Show running containers | ||
| + | |||
| + | <pre> | ||
| + | sudo runc list | ||
| + | sudo runc state looper | ||
| + | </pre> | ||
| + | |||
| + | Now the container can be checkpointed: | ||
| + | |||
| + | <pre> | ||
| + | mkdir /tmp/checkpoint | ||
| + | sudo runc checkpoint --image-path /tmp/checkpoint --work-path /tmp/checkpoint looper | ||
| + | </pre> | ||
| + | |||
| + | Once the container is checkpointed it will be no longer visible in <code>runc list</code>. | ||
| + | |||
| + | The following command can be used to restore the container: | ||
| + | |||
| + | <pre> | ||
| + | sudo runc restore --image-path /tmp/checkpoint --work-path /tmp/checkpoint looper | ||
| + | </pre> | ||
| + | |||
| + | Show running containers: | ||
| + | |||
| + | <pre> | ||
| + | sudo runc list | ||
| + | sudo runc state looper | ||
| + | </pre> | ||
| + | |||
| + | The following command can be used to terminate the running container: | ||
| + | <pre> | ||
| + | sudo runc kill looper KILL | ||
| + | sudo runc delete looper | ||
| + | </pre> | ||
Latest revision as of 18:56, 9 October 2025
This article provides an overview of CRIU integration with runc and explains how to use it.
Container Checkpoint/Restore[edit]
Create a container rootfs
mkdir -p alpine-container/rootfs && cd alpine-container wget https://dl-cdn.alpinelinux.org/alpine/latest-stable/releases/x86_64/alpine-minirootfs-3.22.2-x86_64.tar.gz tar -xzf alpine-minirootfs-3.22.2-x86_64.tar.gz -C rootfs rm -f alpine-minirootfs-3.22.2-x86_64.tar.gz
Create a container specification file:
runc spec
Set a command to run in the container:
sed -i 's/"sh"/"sh", "-c", "i=0; while true; do echo $i; i=$(expr $i + 1); sleep 1; done"/' config.json
Start the container and redirect the output/error to looper.out and looper.out:
sudo runc run looper 0</dev/null 1>looper.out 2>looper.err &
Alternatively, you can disable the interactive terminal and run container in the background as follows:
sed -i 's/"terminal": true/"terminal": false/g' config.json sudo runc run -d looper 0</dev/null 1>/dev/null 2>/dev/null
Show running containers
sudo runc list sudo runc state looper
Now the container can be checkpointed:
mkdir /tmp/checkpoint sudo runc checkpoint --image-path /tmp/checkpoint --work-path /tmp/checkpoint looper
Once the container is checkpointed it will be no longer visible in runc list.
The following command can be used to restore the container:
sudo runc restore --image-path /tmp/checkpoint --work-path /tmp/checkpoint looper
Show running containers:
sudo runc list sudo runc state looper
The following command can be used to terminate the running container:
sudo runc kill looper KILL sudo runc delete looper