一、数据卷
1、容器存在的问题:
2、数据卷的作用:
将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全。
3、数据卷的定义:
4、数据卷操作的基本语法如下:
1、新增和查询数据卷
#创建一个volume
docker volume create 数据卷名称
#列出所有的volume
docker volume ls
#显示一个或多个volume的信息
docker volume inspect 数据卷名称
效果如下:html 文件夹的名称以及路径
2、删除数据卷,命令如下:
#删除一个或多个指定的volume
docker volume rm 数据卷名称
#删除未使用的volume
docker volume prune 数据卷名称
二、数据卷的挂载
命令如下:
docker run \
--name mn \
-v html:/root/html \
-p 8080:80
nginx \
docker run :就是创建并运行容器
-- name mn :给容器起个名字叫mn
-v html:/root/htm :把 html 数据卷挂载到 【容器内的/root/html 】 这个目录中,-v命令可以有多个,因为有时需要挂载多个数据卷
-p 8080:80 :把宿主机的8080端口映射到容器内的80端口
nginx :镜像名称
案例:创建一个nginx容器,修改容器内的html目录内的index.html内容
1、命令:
docker run \
--name myNginx \
-d \
-p 8080:80 \
-v html:/usr/share/nginx/html \
nginx:latest
2、查询是否挂载成功
# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html
注意:如果容器运行时volume不存在,会自动被创建出来。
三、宿主机目录挂载到容器中
案例:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器
提示:目录挂载与数据卷挂载的语法是类似的:
-v [宿主机目录]:[容器内目录]
-v [宿主机文件]:[容器内文件] 这种会把宿主机的文件直接覆盖到容器内部的文件。
命令如下:
docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
-v /tmp/mysql/data:/var/lib/mysql \
-p 3306:3306 \
mysql:5.7.25
-e :设置密码
-v :挂载数据卷,但这里是把宿主机的目录挂载到容器中
注意:数据卷挂载和宿主机目录挂载的区别:
1、数据卷挂载的目录都是固定的,数据卷目录是在:/var /lib/docker/volumes/。
2、宿主机目录挂载的的目录,可以在宿主机自定义,随便放在宿主机什么位置都可以。
3、宿主机还可以进行文件挂载,可以对容器的文件进行合并执行。