将应用和环境打包成一个镜像,如果数据保存在容器中,一旦容器删除,数据也将会丢失,我们需要将数据持久化容器之间可以将数据共享,将产生的数据同步到本地,这就是容器目录挂载的技术,可以将容器内的目录挂载到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、两个子容器默认无法在容器内部数据卷中操作;
容器之间可以做配置信息的传递 ,比如集群配置,数据库备份,数据同步等;