【中间件】docker数据卷

📝个人主页:五敷有你****

🔥系列专栏:中间件****

⛺️稳中求进,晒太阳

1.数据卷(容器数据管理)

修改nginx的html页面时,需要进入nginx内部。并且因为内部没有编辑器,修改文件也很麻烦。

这就是因为容器与数据(容器内文件)耦合带来的后果。要解决这个问题,必须将数据与容器解耦,这就要用到数据卷了。

1.1.什么是数据卷

**数据卷(volume)**是一个虚拟目录,指向宿主机文件系统中的某个目录。

一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。

这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了

1.2.数据集操作命令

数据卷操作的基本语法如下:

复制代码
docker volume [COMMAND]

docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:

  • create 创建一个volume

  • inspect 显示一个或多个volume的信息

  • ls 列出所有的volume

  • prune 删除未使用的volume

  • rm 删除一个或多个指定的volume

1.3.创建和查看数据卷

需求:创建一个数据卷,并查看数据卷在宿主机的目录位置

① 创建数据卷

复制代码
docker volume create html

② 查看所有数据

复制代码
docker volume ls

结果:

③ 查看数据卷详细信息卷

复制代码
docker volume inspect html

结果:

可以看到,我们创建的html这个数据卷关联的宿主机目录为/var/lib/docker/volumes/html/_data目录。

小结

数据卷的作用:

  • 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

数据卷操作:

  • docker volume create:创建数据卷

  • docker volume ls:查看所有数据卷

  • docker volume inspect:查看数据卷详细信息,包括关联的宿主机目录位置

  • docker volume rm:删除指定数据卷

  • docker volume prune:删除所有未使用的数据卷

1.4.挂载数据卷

我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下:

复制代码
docker run \
  --name mn \
  -v html:/root/html \
  -p 8080:80
  nginx \

这里的-v就是挂载数据卷的命令:

  • -v html:/root/htm :把html数据卷挂载到容器内的/root/html这个目录中

1.5.案例-给nginx挂载数据卷

需求:创建一个nginx容器,修改容器内的html目录内的index.html内容

分析:上个案例中,我们进入nginx容器内部,已经知道nginx的html目录所在位置/usr/share/nginx/html ,我们需要把这个目录挂载到html这个数据卷上,方便操作其中的内容。

提示:运行容器时使用 -v 参数挂载数据卷

步骤:

① 创建容器并挂载数据卷到容器内的HTML目录

复制代码
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx

② 进入html数据卷所在位置,并修改HTML内容

复制代码
# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html

1.6.案例-给MySQL挂载本地目录

容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上。关联关系如下:

  • 带数据卷模式:宿主机目录 --> 数据卷 ---> 容器内目录

  • 直接挂载模式:宿主机目录 ---> 容器内目录

如图:

语法

目录挂载与数据卷挂载的语法是类似的:

  • -v [宿主机目录]:[容器内目录]

  • -v [宿主机文件]:[容器内文件]

需求:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器

实现思路如下:

1)在将课前资料中的mysql.tar文件上传到虚拟机,通过load命令加载为镜像

2)创建目录/tmp/mysql/data

3)创建目录/tmp/mysql/conf,将课前资料提供的hmy.cnf文件上传到/tmp/mysql/conf

4)去DockerHub查阅资料,创建并运行MySQL容器,要求:

① 挂载/tmp/mysql/data到mysql容器内数据存储目录

② 挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件

③ 设置MySQL密码

1.7.小结

docker run的命令中通过 -v 参数挂载文件或目录到容器中:

  • -v volume名称:容器内目录

  • -v 宿主机文件:容器内文

  • -v 宿主机目录:容器内目录

数据卷挂载与目录直接挂载的

  • 数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找

  • 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看

相关推荐
mghio44 分钟前
Dubbo 中的集群容错
java·微服务·dubbo
阿里云云原生5 小时前
LLM 不断提升智能下限,MCP 不断提升创意上限
云原生
阿里云云原生6 小时前
GraalVM 24 正式发布阿里巴巴贡献重要特性 —— 支持 Java Agent 插桩
云原生
sauTCc9 小时前
Docker初探
docker
宁zz9 小时前
乌班图安装jenkins
运维·jenkins
云上艺旅9 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
c无序9 小时前
【Docker-7】Docker是什么+Docker版本+Docker架构+Docker生态
docker·容器·架构
FixBug_Nick9 小时前
使用Docker安装及使用最新版本的Jenkins
docker·容器·jenkins
大丈夫立于天地间9 小时前
ISIS协议中的数据库同步
运维·网络·信息与通信
rainFFrain10 小时前
单例模式与线程安全
linux·运维·服务器·vscode·单例模式