深入浅出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主机上的开发环境和容器之间共享源代码或构建工件。
相关文章
|
26天前
|
开发者 Docker 容器
获取Docker基础使用方法:让容器化变得轻松。
对于Docker的初学者来说,了解这些基础知识点就足够了。实践是最好的老师,越是动手操作,对Docker的理解会越深。祝阅读这篇文章的开发者们一切顺利,愿你在Docker的海洋中航行顺利!
80 17
|
1月前
|
关系型数据库 MySQL Docker
|
2月前
|
Ubuntu Linux Docker
Docker容器的实战讲解
这只是Docker的冰山一角,但是我希望这个简单的例子能帮助你理解Docker的基本概念和使用方法。Docker是一个强大的工具,它可以帮助你更有效地开发、部署和运行应用。
130 27
|
12天前
|
Docker 容器
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。
|
2月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
146 28
|
3月前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
174 16
|
3月前
|
存储 开发工具 开发者
揭秘 Microsoft.Docker.SDK:让容器开发更轻松的强大工具揭秘
随着云计算和容器技术的快速发展,`Docker` 已经成为容器化技术的事实标准。`Microsoft` 作为 `Docker` 的主要支持者和参与者,推出了 `Microsoft.Docker.SDK`,旨在帮助开发者更轻松地进行容器开发。本文将深入揭秘 Microsoft.Docker.SDK 的功能、使用方法以及它在容器开发中的应用。
119 12
|
9月前
|
Linux Docker 容器
Docker操作 :容器命令
Docker操作 (四)
258 56
|
8月前
|
安全 Shell Linux
docker进入容器命令
docker进入容器命令
353 1
|
9月前
|
应用服务中间件 Shell nginx
Docker容器操作基础命令
关于Docker容器操作基础命令的教程,涵盖了从启动、查看、删除容器到端口映射和容器信息获取的一系列常用命令及其使用方法。
236 14
下一篇
oss创建bucket