文章目录
管理数据方式
三种管理方式:
- Volumes 卷:存储在主机上,且由 Docker 来管理(/var/lib/docker/volumes/ on Linux),其他进程不应该修改他。Volumes 是 Docker 持久化数据的最好方式。
- Bind mounts 绑定挂载。此种方式的数据可以存储在主机的任何位置上,且其他进程可以修改这些数据。
- tmpfs:将数据存储在内存中,且永远不会存储到文件系统上。
Volumes 卷
Volumes 由 Docker 创建于管理。使用命令 docker volume create 创建,或者在 容器或服务创建的时候创建。
当你创建了一个卷,则数据会存储在主机的一个固定目录中。这个与绑定挂载很相似,区别是这个目录由docker管理并且独立于主机的核心功能。
一个卷可以立刻挂载到多个容器上,如果卷没有被使用,也不会自动删除。使用命令 docker volume prune 移除。
当你挂载了一个卷,卷可能是被命名了或者是匿名的。匿名的卷 Docker 会分配给他一个随机的名字,保证在Docker主机上是唯一的。主动命名一个卷也需要保持命名唯一。
Docker 提供 volume drivers,可把卷放在远程机器或者云上。
Bind mounts 绑定挂载
Bind mounts 早起使用,他比 Volumes 的功能少很多。使用他,主机的一个文件或者目录就挂载到了容器上。文件或目录使用全路径的形式引用。文件或目录不存在会自动创建,已经不建议使用的。
tmpfs mounts
在内存中,Docker 关闭文件就跟着消失。可以用来存储不需要持久化与敏感的信息。
命令注意事项
绑定挂载与卷都可以使用 -v or --volume 挂载到容器上,但是语法有很大的不同。tmpfs 使用 --tmpfs.
然而在 17.06 之后,建议使用 --mount 来操作他们,这样会更简洁明了。
使用 Volumes 卷的案例
- 在多个容器之间共享。设置自读或着读写权限。
- 如果 Docker 主机不保证有所需要的文件或目录,可以使用卷来摆脱对主机环境的依赖。
- 当你想存储你容器的数据到远程主机或者云供应商。
- 当你想从一个Docker主机备份、恢复或者合并到另一台主机,卷是比较好的选择。你可以先停止容器,然后备份卷的目录(比如
/var/lib/docker/volumes/<volume-name>)。
bind mounts 绑定挂载较好的使用案例
- 分享主机的配置文件到各个容器上。这就是 Docker 提供 DNS 解决方案的默认实现,通过挂载
/etc/resolv.conf。 - 共享开发者Docker主机上的的代码或者构建结果到容器上。比如挂载 maven 的
target/目录到 容器上,容器就可以直接获得新编译的包。 - 当Docker主机上的文件或目录与容器上的一致。
tmpfs 挂载的案例
不想将数据在主机或容器上保留时。
使用 bind mounts 或者 volumes 需要注意的事情
- 如果你挂载一个有文件与目录的文件到一个空的 volumes卷 上,这些文件将会被传播(拷贝)到卷中。如果你启动一个容器并且指定的卷并不存在,就会为你自动创建一个空的卷。
- 如果你挂载一个不为空的卷或者
bind mounts到容器上一个不为空的目录上时,容器上的目录将会被覆盖,此时容器上原有的文件与目录并没有被移除,而是不能访问而已。
End!!
797

被折叠的 条评论
为什么被折叠?



