From 5440f0a981a8e4ee316c9f5b1ec989abc9b53515 Mon Sep 17 00:00:00 2001
From: Cat Tom <linweijie2015@gmail.com>
Date: Thu, 25 Jul 2024 02:02:52 +0800
Subject: [PATCH] hand on

---
 ...-of-Docker-Volumes-A-Step-by-Step-Guide.md | 56 +++++++++++++++----
 1 file changed, 45 insertions(+), 11 deletions(-)

diff --git a/docs/tech/Backup-and-Restore-of-Docker-Volumes-A-Step-by-Step-Guide.md b/docs/tech/Backup-and-Restore-of-Docker-Volumes-A-Step-by-Step-Guide.md
index b76438f..683dd86 100644
--- a/docs/tech/Backup-and-Restore-of-Docker-Volumes-A-Step-by-Step-Guide.md
+++ b/docs/tech/Backup-and-Restore-of-Docker-Volumes-A-Step-by-Step-Guide.md
@@ -2,21 +2,20 @@
 
 本教程将以备份 Grafana 的数据卷为例,手把手教你如何备份和还原 Docker 卷。
 
+以下是 Grafana 的 docker-compose 配置参考:
+
 ``` title="docker-compose.yml"
-grafana:
+services:
+  grafana:
     image: grafana/grafana-enterprise
     container_name: grafana
     ports:
-      - 100.114.118.48:3000:3000
+      - 3000:3000
     volumes:
       - grafana-storage:/var/lib/grafana
-    environment:
-      GF_SERVER_DOMAIN: "3-buyvm-lv.tail184fc.ts.net"
-    networks:
-      - basic_network
-    labels:
-      - "com.centurylinklabs.watchtower.enable=true"
     restart: unless-stopped
+volumes:
+  grafana-storage:
 ```
 
 ## 第一步:确定准备备份的 Docker 卷
@@ -34,11 +33,12 @@ docker volume ls
 ```
 DRIVER    VOLUME NAME
 local     3-buyvm-lv_grafana-storage
+...
 ```
 
 在本次演示中,`3-buyvm-lv_grafana-storage` 将是我们将要备份的卷。
 
-## 第二步:创建备份
+## 第二步:创建 Docker 卷的备份
 
 要创建 Docker 卷备份,可以使用 `docker run` 命令启动一个容器,挂载要备份的卷,并将备份数据写入压缩包。 
 
@@ -50,8 +50,42 @@ busybox \
 tar -czvf /backup/<backup-filename>.tar.gz <target>
 ```
 
-下面是我们备份 `3-buyvm-lv_grafana-storage` 的示例命令:
+在该命令中,用要备份的卷的名称替换 `<volume-name>`,用 docker 容器内的挂载点替换 `<target>`,用备份文件的名称替换 `<backup-filename>`。
+
+依照上面的命令,我们备份 `3-buyvm-lv_grafana-storage` 的命令便要这样写:
 
 ```bash
+docker run --rm \
+--mount source=3-buyvm-lv_grafana-storage,target=/var/lib/grafana \
+-v /root/backup:/backup \
+busybox \
+tar -czvf /backup/3-buyvm-lv_grafana-storage.tar.gz /var/lib/grafana
+```
 
-```
\ No newline at end of file
+## 第三步:还原 Docker 卷
+
+如果需要从备份中还原 Docker卷,我们可以使用 `docker run` 命令启动一个容器,挂载备份文件并将备份数据写入卷。
+
+```bash
+docker run --rm \
+--mount source=<volume-name>,target=<target> \
+-v $(pwd):/backup \
+busybox \
+tar -xzvf /backup/<backup-filename>.tar.gz -C /
+```
+
+在该命令中,用要备份的卷的名称替换 `<volume-name>`,用 docker 容器内的挂载点替换 `<target>`,用备份文件的名称替换 `<backup-filename>`。
+
+依照上面的命令,我们还原 `3-buyvm-lv_grafana-storage` 的命令便要这样写:
+
+```bash
+docker run --rm \
+--mount source=3-buyvm-lv_grafana-storage,target=/var/lib/grafana \
+-v /root/backup:/backup \
+busybox \
+tar -xzvf /backup/3-buyvm-lv_grafana-storage.tar.gz -C /
+```
+
+## 参考
+
+[Backup and Restore of Docker Volumes: A Step-by-Step Guide](https://osmosys.co/blog/backup-and-restore-of-docker-volumes-a-step-by-step-guide/)
\ No newline at end of file