如何在Docker中保持数据存储的可移植性?

我正在改变我的开发环境到Docker,到目前为止我非常高兴,但是我有一个基本的问题。 但首先让我描述一下我登陆的是什么样的设置。

我正在使用Web开发环境的示例。
所以我在自己的容器里组织每一项服务

  1. 谁谈论一个MySQL容器,并有一个数据容器(称为应用程序)的来源的PHP。
  2. nginx链接到PHP容器并提供数据容器(app)中的文件。
  3. 应用程序基本上是与PHP(以节省空间)相同的容器,并将我的项目文件夹挂载到容器中。 应用程序然后将项目文件夹提供给其他容器。
  4. 那么有一个mysql容器有他自己的数据容器称为数据
  5. 与mysql容器交谈的phpmyadmin容器
  6. 最后还有数据,数据库的数据容器。

我不确定每个人的好处是否清楚,所以它是(因为你可以把所有东西都放到一个容器中)。
将我的主机上的项目文件夹安装到Docker容器中让我使用我最喜欢的编辑器,并使我不断发展。
将数据库引擎与其存储解耦,可以自由更改引擎,但保留数据。 (因为除编辑器和Docker之外,您不必安装任何编程工具。)

我的目标是让整个设置非常便于携带,因此在主机系统上安装我的项目代码的最新版本,而不是居住在容器内是一个巨大的优势。 我在我的项目文件夹里面组织了上面描述的设置在一个叫做“ 所以我可以将整个项目文件夹复制到另一台机器上,input“stillocker-compose”并启动。
我实际上已经把它放在我的Dropbox中,可以像这样切换机器。 很甜蜜

但是有一个缺点。 数据库存储不可移植,因为它位于Virtualbox文件系统的某处。 我尝试将数据存储挂载到主机操作系统中,但这并不奏效。 这些文件在那里,但是当我尝试读取或写入文件时,会出现各种错误。

我想我的问题是,如果有一个最佳做法,以保持在不同的开发机器之间的数据库存储同步(或高度可移植性)。

我想nix的数据容器,并切换到命名卷。 数据容器在一段时间内并不需要,尽pipe一些过时的文档指出了另外一些。

命名卷允许您从各种卷驱动程序中进行select,以便从外部源(包括NFS,gluster和flocker)装入数据。 它也消除了select容器不会有大量磁盘开销的要求,允许您在每个容器中的任何位置安装文件夹,并将容器pipe理与数据pipe理分开(因此docker rm -v $(docker ps -aq)不会破坏你的数据)。

命名卷的创build与在docker run为卷创build名称一样容易,例如docker run -v app-data:/app myapp 。 然后你可以用docker volume ls列出它们。