Difference between revisions of "LXC"
(→See also: renamed to →External links: , formatting fix) |
(use source highlighting) |
||
Line 6: | Line 6: | ||
LXC upstream has begun to integrate checkpoint/restore support through the lxc-checkpoint tool. This functionality has been in the recent released version of LXC---LXC 1.1.0 , you can install the LXC 1.1.0 or you can check out the development version on Ubuntu by doing: | LXC upstream has begun to integrate checkpoint/restore support through the lxc-checkpoint tool. This functionality has been in the recent released version of LXC---LXC 1.1.0 , you can install the LXC 1.1.0 or you can check out the development version on Ubuntu by doing: | ||
− | < | + | <source lang="bash"> |
sudo add-apt-repository ppa:ubuntu-lxc/daily | sudo add-apt-repository ppa:ubuntu-lxc/daily | ||
sudo apt-get update | sudo apt-get update | ||
sudo apt-get install lxc | sudo apt-get install lxc | ||
− | </ | + | </source> |
Next, create a container: | Next, create a container: | ||
− | < | + | <source lang="bash"> |
− | sudo lxc-create -t ubuntu -n u1 -- -r trusty -a amd64 | + | sudo lxc-create -t ubuntu -n u1 -- -r trusty -a amd64 |
− | </ | + | </source> |
And add the following lines (as above) to its config: | And add the following lines (as above) to its config: | ||
− | < | + | <source lang="bash"> |
cat | sudo tee -a /var/lib/lxc/u1/config << EOF | cat | sudo tee -a /var/lib/lxc/u1/config << EOF | ||
# hax for criu | # hax for criu | ||
Line 27: | Line 27: | ||
lxc.cgroup.devices.deny = c 5:1 rwm | lxc.cgroup.devices.deny = c 5:1 rwm | ||
EOF | EOF | ||
− | </ | + | </source> |
Finally, start, and checkpoint the container: | Finally, start, and checkpoint the container: | ||
− | < | + | <source lang="bash"> |
sudo lxc-start -n u1 | sudo lxc-start -n u1 | ||
sleep 5s # let the container get to a more interesting state | sleep 5s # let the container get to a more interesting state | ||
sudo lxc-checkpoint -s -D /tmp/checkpoint -n u1 | sudo lxc-checkpoint -s -D /tmp/checkpoint -n u1 | ||
− | </ | + | </source> |
At this point, the container's state is stored in /tmp/checkpoint, and the filesystem is in /var/lib/lxc/u1/rootfs. You can restore the container by doing: | At this point, the container's state is stored in /tmp/checkpoint, and the filesystem is in /var/lib/lxc/u1/rootfs. You can restore the container by doing: | ||
− | < | + | <source lang="bash"> |
sudo lxc-checkpoint -r -D /tmp/checkpoint -n u1 | sudo lxc-checkpoint -r -D /tmp/checkpoint -n u1 | ||
− | </ | + | </source> |
And then, get your container's IP and ssh in: | And then, get your container's IP and ssh in: | ||
− | < | + | <source lang="bash"> |
ssh ubuntu@$(sudo lxc-info -i -H -n u1) | ssh ubuntu@$(sudo lxc-info -i -H -n u1) | ||
− | </ | + | </source> |
===Troubleshooting=== | ===Troubleshooting=== |
Revision as of 19:20, 21 September 2016
Requirements
You should have built and installed a recent (>= 1.3.1) version of CRIU.
Checkpointing and restoring a container
LXC upstream has begun to integrate checkpoint/restore support through the lxc-checkpoint tool. This functionality has been in the recent released version of LXC---LXC 1.1.0 , you can install the LXC 1.1.0 or you can check out the development version on Ubuntu by doing:
sudo add-apt-repository ppa:ubuntu-lxc/daily
sudo apt-get update
sudo apt-get install lxc
Next, create a container:
sudo lxc-create -t ubuntu -n u1 -- -r trusty -a amd64
And add the following lines (as above) to its config:
cat | sudo tee -a /var/lib/lxc/u1/config << EOF
# hax for criu
lxc.console = none
lxc.tty = 0
lxc.cgroup.devices.deny = c 5:1 rwm
EOF
Finally, start, and checkpoint the container:
sudo lxc-start -n u1
sleep 5s # let the container get to a more interesting state
sudo lxc-checkpoint -s -D /tmp/checkpoint -n u1
At this point, the container's state is stored in /tmp/checkpoint, and the filesystem is in /var/lib/lxc/u1/rootfs. You can restore the container by doing:
sudo lxc-checkpoint -r -D /tmp/checkpoint -n u1
And then, get your container's IP and ssh in:
ssh ubuntu@$(sudo lxc-info -i -H -n u1)
Troubleshooting
Error (mount.c:805): fusectl isn't empty: 8388625
Dumping of fuse filesystems is currently not supported. Empty the container's /sys/fs/fuse/connections
and try again.
CRIU doesn't yet support shared mountpoints as LXC does; make sure your rootfs is on a non-shared mount.
External links
- The New New Thing: Turning Docker Tech into a Full Speed Hypervisor - Talk of Tycho Andersen with demo of migration LXC container with Doom inside
- Demo script