深入浅出Docker容器数据卷

简介: 深入浅出Docker容器数据卷

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
用容器内容填充新卷 Yes No
支持卷驱动 Yes No
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 8月   6 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主机上的开发环境和容器之间共享源代码或构建工件。
相关文章
|
3天前
|
存储 Kubernetes Docker
Kubernetes(K8S)集群管理Docker容器(概念篇)
Kubernetes(K8S)集群管理Docker容器(概念篇)
|
3天前
|
存储 Ubuntu 安全
Docker容器常用命令
Docker容器常用命令
15 1
|
9天前
|
存储 运维 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第18天】 在现代微服务架构中,Docker容器已成为部署和运行应用的标准环境。随之而来的挑战是如何有效监控这些容器的性能与健康状况,确保系统的稳定性和可靠性。本文将探讨构建一个高效稳定的Docker容器监控体系的关键技术和方法,包括日志管理、性能指标收集以及异常检测机制,旨在为运维人员提供实用的指导和建议。
14 0
|
11天前
|
程序员 索引 Python
06-python数据容器-set(集合)入门基础操作
06-python数据容器-set(集合)入门基础操作
|
11天前
|
索引 容器
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
|
11天前
|
索引 容器
06-python数据容器-list列表定义/list的10个常用操作/列表的遍历/使用列表取出偶数
06-python数据容器-list列表定义/list的10个常用操作/列表的遍历/使用列表取出偶数
|
18天前
|
关系型数据库 MySQL Linux
docke数据卷容器
docke数据卷容器
11 0
|
18天前
|
Linux Docker 容器
docker 容器常用命令
docker 容器常用命令
13 0
|
1月前
|
Java Go 开发者
Docker容器技术简介及其与Go语言的结合点
【2月更文挑战第23天】本文首先概述了Docker容器技术的核心概念和优势,接着探讨了Go语言与Docker容器技术的结合点。通过阐述Docker的轻量级、可移植性和版本控制等特性,以及Go语言在容器化应用中的优势,本文旨在说明两者结合能够实现更高效、灵活的应用开发和部署。
|
18天前
|
Linux Shell 虚拟化
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
28 0