首页 > 其他分享 >docker-数据卷挂载

docker-数据卷挂载

时间:2023-02-19 00:55:16浏览次数:39  
标签:容器 宿主机 mysql 挂载 docker 数据 目录

docker容器数据卷

数据卷也叫:目录挂载

即:将容器内的目录,挂载到宿主机

为什么要使用数据卷

容器的持久化和同步操作!

多个容器间也是可以数据共享的,即多个容器可以挂载同一个目录

/*
如果数据都在容器中,那么把容器删除以后,数据也会随之丢失
    如:mysql容器,容器删了,里面的数据就都没了
所以要把数据进行持久化
    容器之间可以有一个数据共享的技术
    即:容器和宿主机,数据共享
    Docker容器中产生的数据,同步到本地(宿主机)
*/
​
​
/*
挂载后
在容器里面的操作如:创建文件,写入文件会同步到宿主机对应的目录
在宿主机对应的目录创建写入文件也会同步到容器内
*/

使用数据卷的好处

/*
如修改数据库的配置文件还要进入容器里面修改,比较麻烦
当挂载以后只需要在本地修改会即可,容器会自动同步
​
挂载以后会占用磁盘两份存储,即容器内占一份,宿主机占一份
挂载以后,删除容器以后,宿主机对应的挂载目录不会删除
*/

 

挂载数据卷

方式一:直接使用命令来挂载 -v

v:volume

docker run -it -v 主机目录:容器内目录
# 容器起来以后挂载以后使用docker inspect 容器id 查看目录是否挂载成功
docker inspect 容器id
# 搜索Mounts,这里面就是目录的挂载信息
#   Source:主机内路径
#   Destination:docker容器内的路径
# 如果Mounts这里不展示挂载信息,就说明是挂载失败了
​

挂载后,容器停止后;还会相互同步吗

实现数据卷挂载以后,容器停止以后,往宿主机的挂载目录写入对应的数据,

此时数据也会同步到容器内对应的目录

测试结论

/*
1.停止容器
2.宿主机上修改文件
3.启动容器
4.容器内的数据依旧是同步的
*/

 

安装MySQL时挂载

# -d 后台运行
# -p 端口映射
# -v 卷挂载,多个v 指同时挂载多个目录
# -e 环境配置,这里跟的是mysql的密码
# --name 容器名称
​
​
docker run -d -p 8091:3306 --name mysql5.7 -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
# 当把mysql容器删除以后,
#  发现我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能

具名挂载和匿名挂载

# 匿名挂载
# 即:-v挂载时不写卷名,直接  -v 容器内路径

目录挂载的三种方式

实际应用中,具名挂载比较常用

# 如何确定是具名挂载还是匿名挂载,还是指定路径挂载
-v 容器内路径            # 匿名挂载
-v 卷名:容器内路径        # 具名挂载,注意此处卷名前面不要加"/"不然会被当作指定路径挂载
-v /宿主机路径:容器内路径  # 指定路径挂载
​
docker run -d -P --name mysql -v /ect/mysql  # 匿名挂载
​
docker run -d -P --name mysql data_volume:/ect/msyql  # 具名挂载

查看卷具体的位置

docker volume inspect 卷名称
docker volume ls  # 查看所有卷

扩展(ro/rw属性)

# 通过 -v容器内路径:ro、rw改变读写权限
ro  readonly  # 只读
rw  readwrite # 可读可写
# 一旦设置了容器权限,容器对我们挂载出来的内容就有限定了
docker run -d -P --name mysql5.7 -v juming-mysql:/etc/mysql:ro
​
# 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作

标签:容器,宿主机,mysql,挂载,docker,数据,目录
From: https://www.cnblogs.com/xiaomengniu/p/17134097.html

相关文章