docker容器数据卷

       将应用和环境打包成一个镜像,如果数据保存在容器中,一旦容器删除,数据也将会丢失,我们需要将数据持久化容器之间可以将数据共享,将产生的数据同步到本地,这就是容器目录挂载的技术,可以将容器内的目录挂载到linux 本地上面;

即支持容器的持久化和同步操作!容器间也可以数据共享

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

docker run -it -v  主机目录:容器内部目录 

docker run -it --name centos02  -v /home/:/home centos  /bin/bash

 安装Mysql 测试数据持久化测试   

docker pull myslq:5.7  ##下载镜像

运行mysql容器,-v挂载需要同步的目录,-e环境配置 -d后台运行 -p 暴露端口  --name 配置名字 

docker run -d -p 3310:3306 -v  /home/mysql/conf.d:/etc/mysql/conf.d  -v /home/mysql/data:/var/lib/mysql  \

-e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

删除容器,会删除容器内部数据,但是不会删除本地数据

但是如果删除容器内部数据文件或者删除本地挂载的数据文件,数据文件将会丢失

 

具名挂载、匿名挂载

#匿名挂载,不指定本地路径,不建议使用

-v  容器内部路径

docker run -d -p --name  nginx

docker volume ls  #查看所有挂载的volume的情况 

[root@iZ2ze8c46ib9nf58ej4mxyZ data]# docker volume ls   volume name 没有具体名字
DRIVER              VOLUME NAME
local               7c793e6caf8b964e19f1ec4ed7b08d0eeadb59d50de5f5453d8fc26e1564c658、

#具名挂载,可以方便找到具体卷的位置

[root@iZ2ze8c46ib9nf58ej4mxyZ data]# docker run -d -P --name  nginx03 -v juming-nginx:/etc/nginx nginx
161e9a3790afae10d226de38855ced3db8d779d408ea1051b094d8324d40af05
[root@iZ2ze8c46ib9nf58ej4mxyZ data]# docker volume ls
DRIVER              VOLUME NAME
local               7c793e6caf8b964e19f1ec4ed7b08d0eeadb59d50de5f5453d8fc26e1564c658
local               juming-nginx 

#查看挂载情况

[root@iZ2ze8c46ib9nf58ej4mxyZ data]# docker volume inspect juming-nginx
[
    {
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",    #未指定本地目录的情况,默认会挂载在/var/lib/docker/volumes/
        "Name": "juming-nginx",
        "Options": {},
        "Scope": "local"
    }
]

#如何确定是具名挂载还是匿名挂载

-v 容器内路径   #匿名挂载,未指定本地具体路径以及名称

-v 名称:容器内路径 #具名挂载 ,指定了挂载名称,未指定具体挂载路径

-v 本地路径:容器内路径 #指定路径挂载

设置可读写权限,默认是rw

ro  readonly#只读  只能通过宿主机操作,不能通过容器内部操作

rw readwrite#可读可写

[root@iZ2ze8c46ib9nf58ej4mxyZ data]# docker run -d -P --name  nginx03 -v juming-nginx:/etc/nginx:ro   nginx

[root@iZ2ze8c46ib9nf58ej4mxyZ data]# docker run -d -P --name  nginx03 -v juming-nginx:/etc/nginx:rw   nginx

dockerfile 构建镜像时自动挂载数据卷

编辑dockerfile文件

vi dockerfile1

-----------------------------------------

FROM centos

VOLUME ["volume1","volume2"]

CMD echo "....end..."

CMD  /bin/bash

 

docker build -f /home/docker-test-volume/dockerfile1  -t centos:1.0 .   ##注意要写最后一个点 . 

数据卷容器

利用数据卷容器可以使两个或者多个容器之间实现数据同步

docker run -it --name docker01 ncb/centos:1.0   ##启动docker01 ;

docker run -it --name  docker02 --volumes-from  docker01   ncb/centos:1.0  ##启动docker02 同步挂载docker01的数据卷;

这样docker02可以同步到docker01中的数据卷的数据

docker run -it --name docker03 --volumes-from docker01 ncv/centos:1.0 ##启动docker03 同步挂载docker01的数据卷;

这样docker03也可以同步到docker01中的数据卷的数据

注意:1、如果本地挂载目录文件删除,docker01,doker02,docker03数据均会被清除

           2、如果docker01内部数据卷数据被清除,本地挂载目录以及docker02,docker03数据均会被清除

           3、docker01,02,03其中容器删除 ,数据仍可保存在其他容器内部数据卷和本地挂载点

           4、两个子容器默认无法在容器内部数据卷中操作;

容器之间可以做配置信息的传递 ,比如集群配置,数据库备份,数据同步等;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Symoons

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值