【云原生&Docker基础篇第4篇】实战探究Docker数据卷的奥秘

🏡  博客首页:派 大 星

⛳️  欢迎关注  ❤️ 点赞  🎒 收藏  ✏️ 留言

🎢  本文由派大星原创编撰

🚧  系列专栏:Docker—云原生

🎈  本系列记录容器化技术的初次探险与深入思考历程,如有描述有误的地方还望诸佬不吝赐教


在这里插入图片描述


前言:什么是数据卷

数据卷是一个可供一个或者多个容器使用的特殊目录,它绕过UFS可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新不会影响镜像
  • 卷会一直存在直到没有容器使用
小试牛刀之创建数据卷

使用docker volume create [数据卷名称]命令来创建一个数据卷

[root@VM-4-14-centos /]# docker volume create my-vol
my-vol

在这里插入图片描述

查看数据卷

创建完成之后就需要查看创建的数据卷是否存在

[root@VM-4-14-centos /]# docker volume ls
DRIVER    VOLUME NAME
local     my-vol

在这里插入图片描述

除此之外也可以通过命令来查看数据卷的详细信息

 docker volume inspect [数据卷名称]

在这里插入图片描述

启动挂载数据卷的容器
① 挂载普通目录作为数据卷

首先在使用docker run启动挂载数据卷的容器之前,需要了解一些命令基础:

  • -v:标记来创建一个数据卷并挂载到容器里
  • --mount :标记来将 数据卷 挂载到容器里

由上述两条命令的作用是一样的,都是将数据卷挂载到容器里,但是在书写时的格式却差别略大,而且在使用docker run启动中一次可以挂载多个数据卷

-v

docker run -d -P --name web -v /webapp training/webapp python app.py

在这里插入图片描述

--mount

$ docker run -d -P \
    --name web \
    --mount source=my-vol,target=/usr/share/nginx/html \
    nginx:alpine

使用--mount需要指定source也就是数据卷的名称和挂载到的目标位置

②挂载主机目录作为数据卷

依然是使用-v指定一个本地主机目录到容器中

docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

在这里插入图片描述
上述的命令加载主机的/src/webapp目录到容器的/opt/webapp目录下,这个功能在进行测试的时候十分方便,比如用户放置一些程序到本地目录,来查看容器是否正常工作。

注📢: 本地目录的路径必须是绝对路径,如果目录不存在Docker会自动为你创建,并且Docker挂载数据卷的默认权限是读写,用户也可以通过:ro指定为只读

docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

在这里插入图片描述

③挂载本地主机文件作为数据卷

同样使用-v命令从主机挂载单个文件到容器中

docker run --rm -it -v ~/.bash_history:/bash_history ubuntu /bin/bash

在这里插入图片描述

数据卷容器

如果有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器

数据卷容器其实就是一个正常的容器,专门用来提供数据卷供其他容器挂载

首先创建一个命名的数据卷容器 pdx

docker run -d -v /pdx --name pdx training/postgres echo Data-only container for postgres

在这里插入图片描述

还可以在其他容器中使用--volumes-from参数来从多个容器挂载多个数据卷,也可以从其他已经挂载的数据卷的容器来挂数据卷

docker run -d volumes-from pdx --name p1 training/postgres
docker run -d volumes-from pdx --name p2 training/postgres

注意📢: 使用--volumes-from参数所挂载数据卷的容器自己并不需要保持在运行状态

如果删除了挂载的容器(包括pdx、p1和p2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用docker rm -v命令来指定同时删除关联的容器。

🔔🔔🔔 E n d i n g 🔔🔔🔔 🔔 🔔 🔔 Ending 🔔 🔔 🔔 🔔🔔🔔Ending🔔🔔🔔

在这里插入图片描述

  • 27
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 28
    评论
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT派同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值