容器数据卷的使用
什么是容器数据卷? 容器的持久化和同步操作,容器之间的数据是可以共享的
使用数据卷
# 方式一:使用命令来挂载 -v
docker run -it -v 主机目录:容器内目录
# 查看home目录下内容
[root@192 home]# ls
admin litermail
# 启动容器并挂载,同步容器内/home/ceshi与宿主机目录/home
[root@192 home]# docker run -it -v /home/ceshi:/home centos /bin/bash
[root@f3b15146d460 /]# [root@192 home]# ls
admin ceshi litermail
# 我们每次改动nginx.conf配置文件都需要进入容器内部太麻烦,可以在容器外部提供一个映射路径
实战:安装mysql
# 获取镜像
[root@kuangshen home]# docker pu11 mysq7 : 5.7
# 运行容器,需要做数据挂载!
# 安装启动mysq1 ,需要配置密码的,这是要注意点!
# 官方测试:docker run --name some-mysq1 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysq1:tag
# 启动我们的
-d后台运行
-p端映射
-v卷挂载
-e环境配置
--name容器名字
[root@192 home]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
527e3df99073f9bf22bb15d420fbfd6bafa77df9eb27ef89cafc0b7219293a39
#启动成功之后,我们在本地使用mysql测试一下
具名挂载和匿名挂载
# 匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
# 查看所有volume的情况
[root@192 mysql]# docker volume ls
DRIVER VOLUME NAME
local be3361c06cd98fca66083d05ca297c15e1a559c941822b2ee46c71f3f806eeea
local eb1061ffe794c8af235e1be9f9a7afc25dd3ef3c1f89adca1b8f60e2692b6781
# 这种就是匿名挂载,我们在-v只写了容器内的路径,没有写容器外的路径!
# 具名挂载
[root@192 mysql]# docker run -d -P --name nginx02 -v lulaoye:/etc/nginx nginx
b00c4d384c1360f768f2f9cd696c1558422a17ad7e9e766aebe07f261213c089
[root@192 mysql]# docker volume ls
DRIVER VOLUME NAME
local lulaoye
# 通过-v 卷名:容器内路径
# 查看一下
[root@192 mysql]# docker volume inspect lulaoye
[
{
"CreatedAt": "2022-10-14T16:33:47+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/lulaoye/_data",
"Name": "lulaoye",
"Options": null,
"Scope": "local"
}
]
# 所有的docker容器的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data
# 如何确定是匿名挂载,具名挂载还是指定路径挂载
-v 容器内的路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /主机路径:容器内路径 # 指定路径挂载
扩展:
# 通过-v 容器内路径:ro rw 改变读写权限
ro 只读
rw 只写
# 一旦这个设置了容器权限,容器对我们挂载出来的内容就有限定了
[root@192 mysql]# docker run -d -P --name nginx02 -v lulaoye:/etc/nginx:ro nginx
[root@192 mysql]# docker run -d -P --name nginx02 -v lulaoye:/etc/nginx:rw nginx
# 只要看到 ro 说明这个路径只能通过本机来操作,容器内部是无法操作的