自己总结出来的方案
进入docker的挂载目录
cd /root/data/打包压缩docker挂载数据
tar -cvzf docker_data.tar docker_data/
# 如果有部署dst服务器,但不想备份dst目录,则可以使用
tar -cvzf docker_data.tar --exclude='docker_data/dst' docker_data/
# 压缩时跳过目录细则参考:https://blog.kuuhaku.fun/archives/tarya-suo-shi-tiao-guo-zhi-ding-mu-lu-c :创建打包文件,会递归目录中的每个文件,如果想改变此行为,可以指定 --no-recursion
-v :在打包时打印详细debug信息
-f :指定打包后的文件名
-z :打包文件时使用 gzip 进行压缩
-x :提取打包文件
du命令分析文件夹
觉得打包的文件体积不对,可以查一下大小
# 分析当前目录下所有文件和文件夹的大小,按大小排序
du -h --max-depth=1 | sort -hr
# 分析指定目录
du -h --max-depth=1 /path/to/directory | sort -hr参数说明:
-h:人类可读的格式(KB、MB、GB)--max-depth=1:只显示指定目录的直系内容sort -hr:按人类可读的数字逆序排序(从大到小)
解压
cd /root/data
tar -xvzf test.tar或者解压到指定目录
tar -xvzf test.tar -C /root/data/Docker挂载目录打包
查看文件路径
docker inspect 容器名查看Mounts,就可以看到映射到本地的目录。
"Mounts": [
{
"Type": "bind",
"Source": "/root/data/docker_data/halo",
"Destination": "/root/.halo2",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
}
],
Source:挂载路径
Destination:容器内部路径
实际要备份的就是挂载路径下的内容,将其打包压缩存起来就好
省力命令
或者直接用下面这个命令:
docker run --rm --volumes-from CONTAINER -v $(pwd):/backup busybox tar cvfz /backup/backup.tar CONTAINERPATH更改CONTAINER(容器名)和CONTAINERPATH(容器内部路径),例如:
docker run --rm --volumes-from halo -v $(pwd):/backup busybox tar cvfz /backup/backup.tar /root/.halo2SCP传输文件到另一台服务器
scp /root/backup/backup.tar root@6.6.6.6:/root/data/docker-data/halo然后输入目标主机密码,就能使用ssh传输文件
然后用docker compose正常安装容器
替换掉数据
这里我用的Xftp下载下来
其他常用命令
查日志最后10行
docker logs --tail 10 <容器ID或名称>解压
tar -zxvf /root/data/docker-data/halo/backup.tar重命名
mv data bw-data #把data重命名成bw-data罗列目录下文件
ls -al查看正在运行的docker容器
docker ps查看到当前路径
pwd停止docker容器
docker stop halo删除docker容器
docker rm -f halo因为挂载属于持久性挂载,容器被删掉,但是挂载文件不会被删除
所以有时候需要手动删除挂载文件
删除文件夹
rm -rf 文件夹名/创建文件夹
mkdir 文件夹名