Ubuntu Docker容器備份與恢復指南
docker stop <container_name_or_id>docker ps -a確認狀態)。docker inspect <container_name_or_id> | grep Mounts -A 10Source字段)和容器內路徑(Destination字段)。使用docker export命令將容器的完整文件系統導出為tar歸檔文件,包含容器內的所有文件、目錄及配置(但不包含鏡像的歷史層)。
命令示例:
docker export <container_name_or_id> > container_backup.tar
使用docker commit命令將容器的當前狀態保存為一個新的鏡像,包含鏡像的所有層、環境變量、端口映射等元數據。
命令示例:
docker commit <container_name_or_id> backup_image:latest
docker save命令:docker save -o backup_image.tar backup_image:latest數據卷是Docker中持久化存儲的核心,備份卷數據是確保關鍵數據不丟失的關鍵步驟。
命令示例(使用tar打包卷內容):
# 創建備份目錄
mkdir -p /backup/container_name
# 打包卷數據(將容器內卷路徑打包到宿主機備份目錄)
docker run --rm -v <volume_name>:/volume -v /backup/container_name:/backup busybox tar cvf /backup/volume_backup.tar /volume
<volume_name>:卷名稱(可通過docker volume ls查看);/volume:容器內卷的掛載路徑(需與docker inspect中的Destination一致);/backup/container_name:宿主機上的備份目錄。若使用docker export備份,可通過docker import將tar文件導入為新鏡像,再創建容器。
命令示例:
# 導入tar文件為新鏡像
cat container_backup.tar | docker import - restored_image:latest
# 基于新鏡像創建容器
docker run -d --name restored_container -p 8080:80 restored_image:latest
-p 8080:80:將宿主機8080端口映射到容器80端口(根據原容器配置調整);--name restored_container:新容器名稱(需唯一)。若使用docker commit或docker save備份,可通過docker load加載鏡像,再創建容器。
命令示例:
# 加載鏡像tar文件
docker load -i backup_image.tar
# 基于鏡像創建容器
docker run -d --name restored_container -p 8080:80 backup_image:latest
docker load會保留鏡像的所有元數據(如環境變量、端口映射),無需手動指定。若備份了數據卷,需將備份數據解壓到新卷,再掛載到恢復的容器中。
命令示例(解壓卷數據):
# 創建新卷
docker volume create restored_volume
# 解壓備份數據到新卷
docker run --rm -v restored_volume:/volume -v /backup/container_name:/backup busybox tar xvf /backup/volume_backup.tar -C /volume
docker run -d --name restored_container -v restored_volume:/data -p 8080:80 restored_image:latest-v restored_volume:/data:將新卷掛載到容器內/data路徑,需與原容器卷路徑一致)docker exec執行FLUSH TABLES WITH READ LOCK(MySQL)或fsync(MongoDB)后再備份。cron定時任務、Portainer圖形化管理工具)實現備份自動化,減少人為操作失誤。通過以上步驟,可實現Ubuntu環境下Docker容器的高效備份與恢復,確保數據安全與業務連續性。