
获得徽章 7
将Docker容器中的数据持久化到主机中有三种方式,前两种是持久化到硬盘中,后一种是持久化到主机内存(一般不用),分别是volume与bind mount,它们之间有什么区别呢?
volume是由Docker来管理的,可以使用 docker volume相关的api指令来进行操作,可以在挂载的时候自动创建一个主机文件路径,使用volume,就等于是创建了一块与主机中其他文件或目录隔离的空间,专用于某个(某些)容器做文件的同步。
而bind mount需要明确的指定一个主机的文件路径,需要注意的是,这个路径是可以任意指定的,哪怕是一些重要的文件路径。一旦挂载完成,通过Docker容器中的文件变更就可以影响到主机目录下的文件变更,这具有一定的风险性,所以在选择主机路径的时候需要注意不要选择重要文件目录。
如何做选择呢?
虽然两者都的数据同步都是双向的,但是volume一般是由容器向主机同步,而bind mount更多的是由主机向容器同步。
也就是说,volume更加适合与保存容器中的应用运行时产生的数据,如mysql、redis的数据文件。
bind mount更适合将容器中应用需要使用到的配置文件,由主机同步到容器中,例如Nginx的conf文件。
volume是由Docker来管理的,可以使用 docker volume相关的api指令来进行操作,可以在挂载的时候自动创建一个主机文件路径,使用volume,就等于是创建了一块与主机中其他文件或目录隔离的空间,专用于某个(某些)容器做文件的同步。
而bind mount需要明确的指定一个主机的文件路径,需要注意的是,这个路径是可以任意指定的,哪怕是一些重要的文件路径。一旦挂载完成,通过Docker容器中的文件变更就可以影响到主机目录下的文件变更,这具有一定的风险性,所以在选择主机路径的时候需要注意不要选择重要文件目录。
如何做选择呢?
虽然两者都的数据同步都是双向的,但是volume一般是由容器向主机同步,而bind mount更多的是由主机向容器同步。
也就是说,volume更加适合与保存容器中的应用运行时产生的数据,如mysql、redis的数据文件。
bind mount更适合将容器中应用需要使用到的配置文件,由主机同步到容器中,例如Nginx的conf文件。
展开
评论
1
赞了这篇文章
赞了这篇文章