Docker数据管理

一、容器的数据管理介绍

1.Docker容器的分层

容器的数据分层目录

  • LowerDir: image 镜像层,即镜像本身,只读

  • UpperDir: 容器的上层,可读写 ,容器变化的数据存放在此处

  • MergedDir: 容器的文件系统,使用Union FS(联合文件系统)将lowerdir 和 upperdir 合并完成后给容器使用,最终呈现给用户的统一视图

  • WorkDir: 容器在宿主机的工作目录,挂载后内容会被清空,且在使用过程中其内容用户不可见

范例: 查看指定容器数据分层

docker  inspect

2.哪些数据需要持久化

有状态的协议

有状态协议就是就通信双方要记住双方,并且共享一些信息。而无状态协议的通信每次都是独立的,与上一次的通信没什么关系。

"状态”可以理解为“记忆”,有状态对应有记忆,无状态对应无记忆

  • 左侧是无状态的http请求服务,右侧为有状态

  • 下层为不需要存储的服务,上层为需要存储的部分服务

3.容器数据持久保存方式

如果要将写入到容器的数据永久保存,则需要将容器中的数据保存到宿主机的指定目录

Docker的数据类型分为两种:

  • 数据卷(Data Volume): 直接将宿主机目录挂载至容器的指定的目录 ,推荐使用此种方式,此方式较常用

  • 数据卷容器(Data Volume Container): 间接使用宿主机空间,数据卷容器是将宿主机的目录挂载至一个专门的数据卷容器,然后让其他容器通过数据卷容器读写宿主机的数据 ,此方式不常用

二、数据卷(data volume)

1.数据卷(data volume)

数据卷使用场景

  • 数据库

  • 日志输出

  • 静态web页面

  • 应用配置文件

  • 多容器间目录或文件共享

数据卷的特点

  • 数据卷是目录或者文件,并且可以在多个容器之间共同使用,实现容器之间共享和重用对数据卷更改数据在所有容器里面会立即更新。

  • 数据卷的数据可以持久保存,即使删除使用使用该容器卷的容器也不影响。

  • 在容器里面的写入数据不会影响到镜像本身,即数据卷的变化不会影响镜像的更新

  • 依赖于宿主机目录,宿主机出问题,上面容器会受影响,当宿主机较多时,不方便统一管理

  • 匿名和命名数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,会拷贝到新初始化的数据卷中

据卷使用方法

启动容器时,可以指定使用数据卷实现容器数据的持久化,数据卷有三种

  • 指定宿主机目录或文件: 指定宿主机的具体路径和容器路径的挂载关系

    • 容器和真机共用空间, 把容器的文件挂载到 真机的文件夹

  • 匿名卷: 不指定数据名称,只指定容器内目录路径充当挂载点,docker自动指定宿主机的路径进行挂载

  • 命名卷: 指定数据卷的名称和容器路径的挂载关系 和匿名卷在一个目录 , 只是取了一个自定义的名字

docker run 命令的以下格式可以实现数据卷

-v, --volume=[host-src:]container-dest[:<options>]
<options>
ro 从容器内对此数据卷是只读,不写此项默认为可读可写
rw 从容器内对此数据卷可读可写,此为默认值

方式1

#指定宿主机目录或文件格式: 
-v   <宿主机绝对路径的目录或文件>:<容器目录或文件>[:ro]  #将宿主机目录挂载容器目录,两个目录
都可自动创建

例子:

docker run -it --name c1 -v /data:/opt centos:7

 方式2

#匿名卷,只指定容器内路径,没有指定宿主机路径信息,宿主机自动生成/var/lib/docker/volumes/<卷ID>/_data目录,并挂载至容器指定路径
-v <容器内路径

例子:

docker run -it --name c2 -v /data centos:7
docker inspect 76d714e6fa84
#查看宿主机路径

 方式3

#命名卷将固定的存放在/var/lib/docker/volumes/<卷名>/_data
-v <卷名>:<容器目录路径>
#可以通过以下命令事先创建,如可没有事先创建卷名,docker run时也会自动创建卷
docker volume create <卷名>

例子:

docker run -d  -p 80:80 --name nginx01 -v  vol1:/usr/share/nginx/html nginx

docker rm 的 -v 选项可以删除容器时,同时删除相关联的匿名卷

-v, --volumes   Remove the volumes associated with the container

管理卷的操作

docker volume COMMAND
Commands:
 create     Create a volume
 inspect     Display detailed information on one or more volumes
  ls         List volumes
 prune       Remove all unused local volumes
  rm         Remove one or more volumes

 

posted @ 2024-08-04 22:36  hx_ky36  阅读(1)  评论(0编辑  收藏  举报