docker技术入门与实战 第3版学习笔记之第6章

第6章 docker数据管理

在生产环境中使用docker,往往需要对数据进行持久化或者多个容器之间进行数据共享

容器中管理数据主要有两种方式:

  • 数据卷:容器内数据直接映射到本地主机环境
  • 数据卷容器:使用特定的容器维护数据卷

数据卷

数据卷 (pata Volumes) 是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器

数据卷可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便;
  • 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;
  • 对数据卷的更新不会影响镜像,解耦开应用和数据;
  • 卷会一直存在,直到没有容器使用,可以安全地卸载它。

创建数据卷

Docker 提供了 volume 子命令来管理数据卷,如下命令可以快速在本地创建一个数据卷:

bash 复制代码
PS C:\Users\fe> docker volume create -d local test
test

此时查看/var/lib/docker/volumes路径下会发现创建的数据卷位置

docker volume还支持inspect(查看详细信息)、 ls (列出已有数据卷)、 prune (清理无用数据卷)、 rm (删除数据卷)

绑定数据卷

docker run的时候可以通过--mount选项使用数据卷,这种创建的数据卷形式称为绑定数据卷

  • volume:普通数据卷,映射到主机/var/1ib/docker/volumes路径下;
  • bind:绑定数据卷,映射到主机指定路径下;
  • tmpfs:临时数据卷,只存在于内存中。

数据卷容器

如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。

创建一个数据卷容器并挂载到本地,使用--volumes-from参数所挂载的数据卷容器自身并不需要保持在运行状态

ruby 复制代码
docker run -it -v F:\Docker\Data:/dbdata --name dbdata ubuntu

可以在其他容器中使用--volumes-from来挂在dbdata容器中的数据卷

css 复制代码
docker run -it --volumes-from dbdata --name db1 ubuntu

操作步骤:

  1. 先创建一个数据卷容器
  2. 创建一个新的容器A 绑定数据卷
  3. 在创建一个新容器B,同样绑定数据卷
  4. 进入容器A,进入绑定的数据卷容器,创建文件夹或文件
  5. 进入容器B,进入绑定的容器卷容器,查看文件夹内的文件
ruby 复制代码
PS C:\Users\fe> docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
PS C:\Users\fe> docker run -id -v F:\Docker\Data:/dbdata --name data ubuntu
6fb436e25c191646a2f00d70a8e57588afb3258b65ffd8463782933dec13c4f0
PS C:\Users\fe> docker run -id --volumes-from data --name qongqiA ubuntu
d81f0f6bb9a5e2f68931829cd673468f3df2917ec3738c8aa437e37ab39d825c
PS C:\Users\fe> docker run -id --volumes-from data --name qongqiB ubuntu
711996ef960ecd239a2cacf0c5f30f3a9f2d87e6ae610f11081f26d482674864
PS C:\Users\fe> docker exec -it qongqiA /bin/bash
root@d81f0f6bb9a5:/# ls
bin   dbdata  etc   lib    lib64   media  opt   root  sbin  sys  usr
boot  dev     home  lib32  libx32  mnt    proc  run   srv   tmp  var
root@d81f0f6bb9a5:/# cd dbdata
root@d81f0f6bb9a5:/dbdata# ls
root@d81f0f6bb9a5:/dbdata# touch a b c.text
root@d81f0f6bb9a5:/dbdata# ls
a  b  c.text
root@d81f0f6bb9a5:/dbdata# exit
PS C:\Users\fe> docker exec -it qongqiB /bin/bash
root@711996ef960e:/# ls
bin   dbdata  etc   lib    lib64   media  opt   root  sbin  sys  usr
boot  dev     home  lib32  libx32  mnt    proc  run   srv   tmp  var
root@711996ef960e:/# cd dbdata
root@711996ef960e:/dbdata# ls
a  b  c.text
root@711996ef960e:/dbdata#

在删除使用数据卷卷的容器的时候,数据卷并不会自动删除,需要删除的时候需要先将使用数据卷的容器删掉,最后在删除数据卷

利用数据卷容器来迁移数据

可以利用数据卷对其中的数据继续宁备份、恢复,以实现数据的迁移

备份

备份命令:docker run --volumes-from data -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /data

意思时 先利用ubuntu镜像创建一个容器worker,使用--volumes-from data参数来让worker容器挂载data容器的数据卷,使用-v $(pwd):/backup参数来挂载本地的当前目录到worker容器的/backup目录。woker容器启动后,使用 tar cvf /backup/backup.tar /data命令将/data下的内容备份为容器内的 /backup/backup.tar

恢复

先创建一个带有容器数据卷的容器docker run -v /data --name data2 ubuntu /bin/bash

然后创建另一个新的容器,挂载data2的容器,并使用untar解压备份文件到所挂载的容器卷中

javascript 复制代码
docker run --volumes-from data2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
相关推荐
qq_364371724 小时前
基于 Docker 容器化环境配置
运维·docker·容器
GentleDevin5 小时前
Docker 运维常用命令大全
docker·容器·运维命令
运维全栈笔记5 小时前
基于Docker的MinIO单机部署与功能测试指南
运维·docker·容器
心机之蛙qee6 小时前
docker的安装(RHEL9)
运维·docker·容器
炸炸鱼.6 小时前
Docker 高级管理 —— 容器通信技术与数据持久化
docker
乐hh6 小时前
DM8配置SSL
数据库·docker·ssl
极客先躯7 小时前
高级java每日一道面试题-2025年12月05日-实战篇[Dockerj]-Docker 安装后的默认存储路径是什么?如何修改?
java·docker·默认存储路径在不同系统上的区别·linux overlay2·修改存储路径的理论方法·修改流程中的关键理论点
凤舞飘伶7 小时前
windows安装docker-desk
windows·docker·容器
运维全栈笔记7 小时前
Docker一键部署Immich:自建私有云相册,照片视频备份无忧
linux·服务器·网络·docker·容器
bukeyiwanshui9 小时前
20260508 docker教案
运维·docker·容器