文章目录

  • 镜像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相关推荐

  1. Docker——使用docker工具管理软件/组件的运行,镜像、容器、数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境

    Docker--使用docker工具管理软件/组件的运行,镜像.容器.数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境 一.docker的安装和卸载 1.卸载 2.安装 3. 导 ...

  2. Docker 自动更新镜像和容器-Watchtower

    Docker 自动更新镜像和容器-Watchtower 我们Consul集群已经搭建好了,Docker api 服务也部署好了,但是呢,又碰到一个问题. 我们每次更新api 服务,都需要拉取镜像,停止 ...

  3. Docker安装 下载镜像 部署容器 备份 创建私服

    Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用应用 ...

  4. Docker安装与镜像,容器命令管理

    docker和容器的关系 -Docker是完整的一套容器管理系统 -Docker提供了一组命令, 让用户更加方便直接地使用容器技 术,而不需要过多关心底层内核技术 一.Docker的安装 1.配置环境 ...

  5. Docker基础之九: 管理容器的数据

    管理容器的数据 (对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面.) 到目前为止,我们已经介绍了Docker的一些基本概念,如 ...

  6. Docker架构、镜像及容器的安装和基本操作

    Docker概念 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的虚拟机.Docker的宗旨:Build,Ship and Run Any APP,Anywhere,即通过对应用组件 ...

  7. docker删除none镜像_Docker容器相关命令

    1.新建并启动容器 使用以下docker run命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,下面将列举一些常用的选项. -d选项:表示后台运行 -P选项:随机端口映射 -p选项:指 ...

  8. Docker中操作镜像和容器的常用命令

    场景 CentOS7中Docker的安装与配置: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119028701 在上面将Doc ...

  9. Linux启动容器端口,docker安装 创建镜像 启动容器 的 使用方法

    1.linux centos 安装docker yum -y install docker 2.启动docker systemctl start docker #启动 docker 服务 system ...

  10. Docker 常用命令 - 镜像与容器

    Docker命令,可参见官网:Reference documentation | Docker Documentation 查看docker版本(version) docker version [ro ...

最新文章

  1. iOS 预览word pdf 文件
  2. 帝国cms调用缩略图和具体文章的方法
  3. 【深度学习入门到精通系列】关于梯度下降和反向传播的探索
  4. 水质php202169,基于php的水质查询api调用代码实例
  5. 使用postman传递参数时报错:Content type ‘multipart/form-data;boundary=--(略)
  6. python3中的dict循环性能对比
  7. 计算机英文版个人简历发文,计算机个人简历英文_英文简历.doc
  8. phpcmsV9 关键词keywords删除、替换与修改
  9. mysql避免死锁的方法
  10. 模板引擎 Velocity
  11. python决策树分类案例_银行产品销售案例与决策树分类算法
  12. Windows 8和CentOS 6.4(64)双系统硬盘安装教程
  13. Linux基金会宣布成立Ceph基金会
  14. mac adb环境变量配置
  15. 揪出手机耗电元凶——高德地图缓存数据
  16. PNAS:整合抑郁症的分子、细胞和皮层神经影像特征
  17. python网易云爬虫_使用python进行爬虫下载网易云音乐
  18. 手游族迎来360手机卫士神助攻 玩家免打扰尽情发育
  19. 罗永浩与他的锤子手机!
  20. pstack 安装linux_linux下的进程堆栈查看工具pstack

热门文章

  1. CV之MTCNN:MTCNN算法过程及其相关思路配图集合
  2. JAVA常见的排序算法
  3. c# 检查目录,当指定目录不存在时建立目录
  4. 百度经验怎么赚钱之练就三星经验,轻松布局流量入口。
  5. (转) 设置sqlplus中的退格键
  6. poj 1164 The Castle
  7. 成功开源项目证明Web是开源最大成功
  8. Linux 平台下 RMAN 全备 和 增量备份 shell 脚本
  9. U盘安装CentOS7跳坑记
  10. binarytreenode”使用 类 模板 需要 模板 参数列表_c++1117 模板核心知识(一)—— 函数模板...