Docker数据卷及其使用(以Nginx静态文件部署为例)

什么是docker数据卷?

要弄清楚什么是docker数据卷,我们先来看一个问题:
Nginx镜像安装运行,查看===》七、docker常用指令演示(以nginx安装为例)

我们在Nginx部署成功后,想要部署静态文件,这时是想要进入容器内部部署的(因为容器沙箱机制,对外不可访问)。

1、Nginx容器内部静态资源文件部署的路径?

去DockerHub查看docker镜像详情

在这里插入图片描述

2、进入容器内部

//进入容器内部,-it是开启交互终端,bash是开启终端的模式为命令行bash模式
docker exec -it 镜像名 bash

//进入静态部署路径
cd /usr/share/nginx/html

//查看当前目录
ls -l

//编辑文件
vi 文件名

在这里插入图片描述

注意问题:
当我们去修改文件的时候,会出现命令不存在问题:
为什么存在这种问题,之前不是说Docker容器包含完整的运行环境,模拟了系统运行环境吗?那怎么连文件 编辑命令都不支持呢?但是确支持ls查看指令呢?
这是因为,容器运行确实是包含当前应用运行的完整环境,但是这个运行环境是最小的环境,不必要的系统函数不会集成进去。
比如这里Nginx的运行,他就不需要vi文件编辑的命令函数。
因此,容器提供程序的运行环境,但是程序运行产生的数据、程序运行依赖的配置都应该与容器解耦
在这里插入图片描述

3、将静态文件部署到html路径

根据上面的情况,Nginx容器运行最小环境不包含vi文件编辑等不必要的命令,那么想要修改Nginx内部文件特别麻烦。所以如果生产开发环境都使用这种方式部署静态文件十分麻烦,那有没有一种方式,可以更加便捷效率的部署静态文件呢?

有,那就是数据卷技术

4、什么是数据卷

数据卷(volume)是一个虚拟目录,是容器目录宿主机目录之前映射的桥梁

那两者是如何映射的呢?
volume会去映射容器内的文件目录,然后宿主机目录再去映射volume的逻辑目录(虚拟目录)。

特别注意:
一旦这种映射形成,docker会将容器内目录变动更新到宿主机目录中,而宿主机目录的变动也会同步更新到容器内目录中。
这就类似于前端vue的双向绑定。

下面以Nginx为例子:
在这里插入图片描述
在上图中:

  • 我们创建了两个数据卷:conf、html
  • Nginx容器内部的conf目录和html目录分别与两个数据卷关联。
  • 而数据卷conf和html分别指向了宿主机的/var/lib/docker/volumes/conf/_data目录和/var/lib/docker/volumes/html/_data目录

这样以来,容器内的conf和html目录就 与宿主机的conf和html目录关联起来,我们称为挂载

此时,我们操作宿主机的/var/lib/docker/volumes/html/_data就是在操作容器内的/usr/share/nginx/html/_data目录。只要我们将静态资源放入宿主机对应目录,就可以被Nginx代理了。

5、数据卷特别知识

在这里插入图片描述

6、如何创建数据卷?并且 实现数据卷映射?

6.1数据卷常用指令

命令说明文档
docker volume create创建数据卷docker volume create
docker volume ls查看所有数据卷docker volume ls
docker volume rm删除指定数据卷 docker volume rm
docker volume inspect查看某个数据卷的详情docker volume inspect
docker volume prune清除未使用的数据卷docker volume prune

注意:

  • 容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。而且创建容器的过程中,数据卷会自动创建。
  • docker volume --help,可以查看数据卷命令帮助。

6.2创建数据卷并实现映射

  • 1、挂载数据卷
# 1.首先创建容器并指定数据卷,注意通过 -v 参数来实现  数据卷  挂载
# 格式:-v 数据卷:容器内目录
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
# 我们知道,数据卷挂载要在容器创建的时候配置,如果容器创建好了是不能挂载数据卷的(已经创建好,想要先删除再重新创建)。
# 当执行上述命令时,会创建容器,如果数据卷不存在,就会自动创建数据卷并实现数据卷挂载。

在这里插入图片描述

  • 2、查看数据卷详情
# 查看数据卷详情,可以查看数据卷映射的宿主机目录
# 格式:docker volume inspect 数据卷名
docker volume inspect html

在这里插入图片描述

修改index.html文件,可以查看Nginx内文件也发生同步改变
在这里插入图片描述

  • 3、查看容器是否有数据卷,有则查看数据卷详情
# 注意这里是容器名,和查看数据卷详情不同,这个命令是查看某个容器数据卷详情
docker inspect 容器名

在这里插入图片描述
在这里插入图片描述
注意:
匿名卷
在这里插入图片描述

7、实现宿主机任意目录和容器目录之间映射

注意,上面实现的是数据卷默认的宿主机目录容器目录之间映射。这里是任意宿主机目录容器目录之间的映射

# 会被识别为一个数据卷叫mysql,运行时会自动创建这个数据卷
-v html:/var/lib/mysql 

 # 会被识别为当前目录下的mysql目录,运行时如果不存在会创建目录
-v ./nginx/html:/var/lib/mysql

注意:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值