日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Docker】备份Docker镜像image、容器container、数据volume

發布時間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Docker】备份Docker镜像image、容器container、数据volume 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 鏡像image備份
    • 容器container備份
    • 數據卷volume
      • 基本操作
      • 數據卷備份
    • reference

本意上想要了解一下 Docker 容器中 Volume 的備份,畢竟重要的數據都在 Volume 中。然后順帶看了一下 Docker 鏡像,容器的備份,不過鏡像和容器托管到 Docker Hub 上也算是備份了。

Volume 可以叫做 數據卷,可供一個或者多個容器使用:

  • 數據卷 可以在容器之間共享和重用
  • 對 數據卷 的修改會立馬生效
  • 對 數據卷 的更新,不會影響鏡像
  • 數據卷 默認會一直存在,即使容器被刪除

鏡像image備份

這里說的備份指的是

  • 直接從本地備份鏡像文件,可以使用 docker save 命令將鏡像打包成 tar 文件,
  • 之后可以使用 docker load 命令來恢復。

容器container備份

備份容器有不同的方法:

  • 通過 [docker commit] 命令來提交一個基于當前容器狀態的新鏡像
  • 使用 [docker export] 命令來將容器導出到系統文件并壓縮成 tar,之后可以根據該 tar 文件使用 docker import 來創建新的鏡像

需要注意的是所有的命令都只會備份容器 layered file system ,不包括 掛載的數據卷 Volumes

數據卷volume

基本操作

Docker user guide 中有非常詳細的知道,如何備份數據卷,這樣就可以在新容器啟動時使用備份好的數據。當備份 data volume 時,需要先關閉容器。

docker volume create my-vol # 創建數據卷docker volume ls # 查看所有數據卷docker volume inspect my-vol # 查看指定數據卷內容docker run -d -P \--name web \# -v my-vol:/wepapp \--mount source=my-vol,target=/webapp \training/webapp \python app.py # 啟動并掛載一個數據卷 使用 `--mount`docker inspect web # 查看容器中 mount 信息docker volume rm my-vol # 移除數據卷

數據卷 是

  • 被設計用來持久化數據的,
  • 它的生命周期獨立于容器,Docker 不會在容器被刪除后自動刪除 數據卷,并且也不存在垃圾回收這樣的機制來處理沒有任何容器引用的 數據卷。
  • 如果需要在刪除容器的同時移除數據卷。可以在刪除容器的時候使用 docker rm -v這個命令。
  • 無主(dangling)的數據卷可能會占據很多空間,要清理請使用以下命令docker volume prune

數據卷備份

比如在 docker compose 中定義了 volumes

volumes:db_data:

那么在啟動 docker compose 之后會生成一個 DOCKER_COMPOSE_NAME 加上 VOLUME_NAME 的容器卷

[DOCKER_COMPOSE_NAME]_[VOLUME_NAME]

那么可以使用下面的命令來備份數據卷:

docker run --rm \ --volume [DOCKER_COMPOSE_PREFIX]_[VOLUME_NAME]:/[TEMPORARY_DIRECTORY_TO_STORE_VOLUME_DATA] \--volume $(pwd):/[TEMPORARY_DIRECTORY_TO_STORE_BACKUP_FILE] \alpine \tar cvf /[TEMPORARY_DIRECTORY_TO_STORE_BACKUP_FILE]/[BACKUP_FILENAME].tar /[TEMPORARY_DIRECTORY_TO_STORE_VOLUME_DATA]

看清楚其中的臨時 DATA 目錄和 臨時備份目錄,執行該命令之后,在當前文件夾下就會產生 BACKUP_FILENAME.tar 這樣的文件,里面包含數據卷中的內容。

那么就能夠使用該命令來恢復數據卷數據

docker run --rm \ --volume [DOCKER_COMPOSE_PREFIX]_[VOLUME_NAME]:/[TEMPORARY_DIRECTORY_STORING_EXTRACTED_BACKUP] \--volume $(pwd):/[TEMPORARY_DIRECTORY_TO_STORE_BACKUP_FILE] \alpine \tar xvf /[TEMPORARY_DIRECTORY_TO_STORE_BACKUP_FILE]/[BACKUP_FILENAME].tar -C /[TEMPORARY_DIRECTORY_STORING_EXTRACTED_BACKUP] --strip 1

如果是數據庫容器,比如 mysql 容器,備份數據可以使用如下方式

docker exec [CONTAINER_NAME] /usr/bin/mysqldump -u root --password=root [DATABASE] > backup.sql

然后使用下面的命令來恢復

cat backup.sql | docker exec -i [CONTAINER_NAME] /usr/bin/mysql -u root --password=root [DATABASE]

對于 docker compose 啟動的多個容器,可能因為宿主機器變化而導致 docker 容器的id有變化,可能在回復數據之后,還需要對數據庫連接的地址進行修改才能完整的恢復。

reference

  • https://stackoverflow.com/a/26339848/1820217
  • https://stackoverflow.com/a/39125414/1820217
  • https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb

總結

以上是生活随笔為你收集整理的【Docker】备份Docker镜像image、容器container、数据volume的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。