四Docker实用篇_数据卷
Posted 上善若水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四Docker实用篇_数据卷相关的知识,希望对你有一定的参考价值。
一、数据卷
在之前的nginx案例中,修改nginx的html页面时,需要进入nginx内部。并且因为没有编辑器,修改文件也很麻烦。这就是因为容器与数据(容器内文件)耦合带来的后果。
要解决这个问题,必须将数据与容器解耦,这就要用到数据卷了。
1.1、什么是数据卷
volume [ˈvɒljuːm]
数据卷(volume) 是一个虚拟目录,指向宿主机文件系统中的某个目录。
一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。
这样,我们操作宿主机的/var/lib/docker/volumes/html
目录,就等于操作容器内的/usr/share/nginx/html
目录了。
1.2、数据集操作命令
数据卷操作的基本语法如下:
docker volume [COMMAND]
docker volume
命令是数据卷操作,根据命令后跟随的command
来确定下一步的操作:
create
创建一个volumeinspect
显示一个或多个volume的信息ls
列出所有的volumeprune
删除未使用的volumerm
删除一个或多个指定的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 mynginx -p 80:80 -v html:/usr/share/nginx/html -d nginx
这里的-v就是挂载数据卷的命令:
-v html:/usr/share/nginx/html
:把html数据卷挂载到容器内的/usr/share/nginx/html
这个目录中
1.5、案例—给nginx挂载数据卷
需求:创建一个nginx容器,修改容器内的html目录内的index.html内容
分析:前面案例中,我们进入nginx容器内部,已经知道nginx的html目录所在位置
/usr/share/nginx/html
,我们需要把这个目录挂载到html这个数据上,方便操作其中的内容。
- 创建容器并挂载数据卷到容器内的HTML目录
docker run --name mynginx -p 80:80 -v html:/usr/share/nginx/html -d nginx
- 进入html数据卷所在位置,并修改html内容
1.6、案例—给mysql挂载本地目录
容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上。关联关系如下:
- 带数据卷模式:宿主机目录 —> 数据卷 —> 容器内目录
- 直接挂载模式:宿主机目录 —> 容器内目录
如图
语法:
目录挂载与数据卷挂载的语法时是类似的:
-v
[宿主机目录]:[容器内目录]-v
[宿主机文件]:[容器内文件]
需求:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器
- 创建MySQL镜像
- 创建目录
/app/mysql/data
- 创建目录
/app/mysql/conf
,并将准备好的hmy.cnf文件上传到/app/mysql/conf
- 去DockerHub查阅资料,创建并运行MySQL容器,要求:
挂载/app/myql/data
到MySQL容器内数据存储目录;
挂载/app/mysql/conf/hmy.cnf
到MySQL容器的配置文件;
设置MySQL密码
小结:
docker run的命令中通过 -v 参数挂载文件或目录到容器中:
-v
volume名称:容器内目录-v
宿主机文件:容器内文-v
宿主机目录:容器内目录
数据卷挂载与目录直接挂载的
- 数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找
- 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看
以上是关于四Docker实用篇_数据卷的主要内容,如果未能解决你的问题,请参考以下文章