Skip to content

Instantly share code, notes, and snippets.

@acgrid
Last active March 16, 2018 05:39
Show Gist options
  • Save acgrid/07428f1e319166a10c889e650f440c5a to your computer and use it in GitHub Desktop.
Save acgrid/07428f1e319166a10c889e650f440c5a to your computer and use it in GitHub Desktop.
Translated guides about docker

卷的建议用法

Docker容器和服务中持久化数据的最佳方案。用例包括:

  • 多个运行中的容器间共享数据。不手动建立时,卷会在首次挂载到容器时创建。卷不因容器停止或移除被删除。多个容器能同时挂载同一个容器,并可设定只读/读写。卷只会被手动明确删除。
  • Docker主机不一定有确定的目录文件结构时,卷有助于将容器运行环境与Docker主机配置解耦。
  • 需要将容器数据储存在远程主机或云服务上,而不仅仅存在本地。
  • 需要在Docker主机间备份、还原、迁移数据的话是更好的选择。可在停止使用该卷的容器后,备份卷所在的目录(例如/var/lib/docker/volumes/<卷名>)

绑定挂载的建议用法

一般来说尽量用卷。绑定挂载适用于下列用例:

  • 容器共享主机的配置文件。Docker默认为容器提供DNS解析就是用挂载主机文件/etc/resolv.conf到各个容器实现的。
  • 主机上的开发环境向容器共享在源码、编译成品。例如将Maven的target/挂载到容器内,主机上编译Maven项目后容器即可访问重编译的产物。 如果采用这种方式开发,生产环境的Dockerfile应当将生产环境成品直接拷入镜像而不是依赖于挂载。
  • 主机上的目录文件结构能保证与容器所需的绑定挂载一致。

临时文件系统挂载的建议用法

tmpfs挂载最适于不需持久的数据,包括主机上和容器内。 可以是处于安全考虑,或者是保证需要大量非持久化状态数据的容器性能。

关于卷、绑定冲突的提示

  • 把一个空卷挂载到容器内一个有文件或子目录存在的目录时,已有文件目录将会穿透(复制)到卷内。类似地,启动容器但指定了一个尚未创建的卷,会自动建立空卷。这是预装其他容器所需数据的好方法。
  • 把非空卷或绑定挂载到容器内一个有文件或子目录存在的目录时,已有文件目录将被挂载屏蔽。如同在Linux下,U盘挂载到/mnt时原来存放在/mnt下的文件将被屏蔽直到U盘卸载。被屏蔽的文件不会被修改删除,但在挂载期间不可访问。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment