zl程序教程

您现在的位置是:首页 >  工具

当前栏目

深入浅出Docker容器数据卷

Docker容器数据 深入浅出
2023-09-11 14:16:33 时间

Hello朋友们,又快要一周结束了,利用今天这个休息的时间准备再出一篇云原生的文章,研究下Docker的容器数据卷,因为这个点自己也不是很熟练,因此想利用一篇文章再次深度学习并分享下,如果哪里有写的不妥的地方还请大家多多提醒呀!

1 什么是数据卷

一句话,数据卷就是存放数据的卷(哈哈哈)。但是对于“卷”这个概念,对计算机存储方面掌握不扎实的小伙伴应该会有一些陌生,卷的英文是Volume,在Windows系统中经常会被提及,他的概念类似于分区(Partition),都是基于磁盘来进行动态划分的,可以初步的定义为硬盘上的存储区域,当然卷也分为基本卷、镜像卷、带区卷等做种类型,像RAID 0、RAID 1、RAID 5等常见的磁盘分区阵列也是属于卷的一种。

2 Docker容器数据卷

Docker容器数据卷,我们可以做一下概念你的拆分Docker容器数据卷=Docker的容器的数据卷=Docker的容器的数据的卷,因此它的概念还是基于“卷”的。

因此Docker容器数据卷的作用就是使用了一个命名卷来将数据持久化到我们的数据库中,让我们能清楚的知道容器的数据存放在了哪里,当然在多容器的环境下也能达到使容器数据更加安全,方便管理等目的。

Docker容器数据卷的工作就是将Docker容器数据通过映射进行备份+持久化到本地的主机目录。

3 Docker容器数据卷的挂载使用

Docker将容器卷于宿主机进行挂载一般有三种方式(官方推荐有两种):

  • named volumes:命名卷,也叫具名挂载,持久化数据,不必知道确切的挂载点。
  • bind mounts:绑定挂载,也叫匿名挂载,可以控制主机上的确切挂载点。
  • tmpfs mounts(不建议使用):将容器数据挂载到宿主机的内存中

三种方式的不同点:
在这里插入图片描述
推荐的两种进行比较:

命名卷绑定挂载
挂载在主机的位置Docker自动选择自定义
挂载示例(-v命令)my-volume:/usr/local/data/path/to/data:/usr/local/data
用容器内容填充新卷YesNo
支持卷驱动YesNo

3.1 命名卷的使用

语法:

docker run -d  -v 卷名:容器内目录  镜像名/id  

其他语法:

Usage:  docker volume COMMAND

Manage volumes

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

Run 'docker volume COMMAND --help' for more information on a command.

所有docker容器内的卷,在未指定主机内目录时,都在:/var/lib/docker/volumes/卷名/_data 下,可通过具名挂载可以方便的找到卷,因此广泛使用这种方式进行挂载。

3.2 绑定挂载的使用

示例:

# 挂载命令
[root@iZ1608aqb7ntn9Z 20210806]# docker run -it -v /opt/Docker/20210806/:/opt centos /bin/bash

# 进入到容器内部
[root@e749444d0ee1 /]# cd opt/
[root@e749444d0ee1 opt]# ls -l
total 0
-rw-r--r-- 1 root root 0 Aug  6 03:35 ymx

# 查看本机
[root@iZ1608aqb7ntn9Z ~]# cd /opt/Docker/20210806/
[root@iZ1608aqb7ntn9Z 20210806]# ll
总用量 0
-rw-r--r-- 1 root root 0 86 11:35 ymx 

# docker inspect [容器名或ID] 查看挂载
[root@iZ1608aqb7ntn9Z 20210806]# docker inspect e749444d0ee1 
......
     "Mounts": [
            {
                "Type": "bind",
                "Source": "/opt/Docker/20210806",  # 对应主机的源目录
                "Destination": "/opt",    # 容器中的目录
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
......

4 小总结

命名卷是将数据持久保存在Docker容器和服务中的首选方法。命名卷的一些适用于:

  • 在多个运行中的容器之间共享数据。容器停止或删除时,该卷仍然存在,并且多个容器可以同时挂载相同的卷
  • 数据备份

绑定挂载适用于:

  • 将配置文件从主机共享给容器。
  • 在Docker主机上的开发环境和容器之间共享源代码或构建工件。