分类: 架构设计与优化
2018-06-07 17:56:10
容器适用无状态的应用,容器运行时的数据分两部分:镜像层和容器层,镜像层是的数据是永久存储的,而容器的数据随容器的停止也就消失,对于有状态的应用来说(应用状态就是应用组件完成他们的工作(即执行任务)时所需的数据。),没有持久化的数据不能支撑应用的正常运行;常用两种方式为有状态的应用提供持久化的数据储存;
本文转自-学领未来
(1)Volumes
(2)bind mount
此外根据场景还可以使用volume container以及tmpfs做为数据存储;
卷存储在由Docker管理的主机文件系统的一部分中(Linux上的/var/lib/docker/volumes/)。非Docker进程不应该修改这部分文件系统。卷是在Docker中保留
数据的最佳方式。
volume的使用场景:
1.在多个容器之间共享数据
2.对主机的目录结构不清楚的
3.当您想要将容器的数据存储在远程主机或云提供商上而不是本地时
4.当您需要备份,还原或将数据从一台Docker主机迁移到另一台时,卷是更好的选择。您可以使用卷停止容器,然后备份卷的目录
(例如/var/lib/docker/volumes/
创建volume
docker volume create canway01
查看volume
docker volume ls
查看volume的详细信息
docker volume inspect canway01
删除volume
docker volume rm canway01
使用volume
docker volume create canway02
docker run -ti --name Volume_Test -v canway02:/tmp centos /bin/bash
//将卷挂在在容器的tmp目录下,如果挂在的卷不存在会自动创建
新建数据文件
echo Volume_Test>> /tmp/Volume_Test
停止容器查看
docker inspect Volume_Test |grep mount -i -A 10
再次启动容器,查看数据是否存在
绑定安装可能存储在主机系统的任何位置。他们甚至可能是重要的系统文件或目录。 Docker主机或Docker容器上的非Docker进程可以随时修改它们。
bind mount的使用场景
1.从主机共享配置文件到容器,如/etc下的配置文件,或/bin的命令等
2.进行开发时,在主机和容器中共享源代码
3.当Docker主机的文件或目录结构保证与容器所需的绑定安装一致时
bind mount的使用与volume差别不大,volume由docker自动管理,bindmount需要熟悉的操作员管理;
新建目录
mkdir /tmp/D_bindmount
挂在使用
docker run -ti --name BindMount -v /tmp/D_bindmount/:/tmp/D_bindmount centos /bin/bash
本篇只是简单的介绍volume和bind mount的基础使用,在实际的环境因考虑更多复杂的其他因素,如:volume随容器的迁移等