How to take container snapshots in docker

百般思念 提交于 2019-12-02 16:57:31
qkrijger

The command docker commit takes a snapshot of your container. That snapshot is an image, which you can put on a (private) repository to be able to pull it on another host.

An option that does not use an image (which you say you want to avoid) is indeed save and load. According to the documentation this saves your container with all file layers. So if you have a setup with child containers such as Ubuntu > JavaJDK > Elasticsearch > my-container, all 4 file layers would get in there. But you may have the first 3 layers already present as images on the other host, in which case save amounts to a lot of overhead. Then, you can use export and import, which according to the documentation only exports the top file layer (in other words, the container, and not the images below it).

More information on the images, container, file layers etc can be found in the official documentation (e.g. file system.

If you're looking for an "exact state", including the execution state, you may need to use CRIU (checkpoint).

Given a linux host machine, Docker can use CRIU to save the execution state of the container. CRIU is still "experimental", and you can see all the possible commands (after enabling experimental mode) by running:

docker checkpoint

You can use the --save-dir option to put the checkpoint in the directory of your choosing.

You can then use

docker start --checkpoint (checkpoint name) --checkpoint-dir (checkpoint directory)

to restore the checkpoint.

If moving servers, you may need to bring the image along with you.

You can read more on the docs: https://docs.docker.com/engine/reference/commandline/checkpoint/

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!