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

时间:2016-10-27 21:29:20

标签: mysql docker docker-compose development-environment

我正在将我的开发环境改为Docker,我很高兴到目前为止,但我有一个基本问题。但首先让我来描述一下我落地的设置。

我正在使用一个用于Web开发的环境示例 我正在自己的容器中组织每个服务,所以

  1. PHP与mysql容器对话,并为源提供数据容器(称为app)。
  2. nginx链接到PHP容器并提供数据容器(app)中的文件。
  3. app基本上与PHP相同(为了节省空间)并将我的项目文件夹安装到容器中。 app然后将项目文件夹提供给其他容器。
  4. 然后有一个mysql容器,它有自己的数据容器,名为data
  5. 与mysql容器对话的phpmyadmin容器
  6. 最后有数据,DB的数据容器。
  7. 我不确定每个人的利益是否清楚,所以就是这样(因为你可以把所有东西放到一个容器里......)。 将项目文件夹从我的主机安装到Docker容器中,让我可以使用我最喜欢的编辑器,并为我提供持续的开发 将数据库引擎与其存储分离后,您可以自由更改引擎但保留数据。 (因为除了编辑器和Docker之外,你不需要安装任何编程内容。)

    我的目标是让整个设置具有高度可移植性,因此在主机系统上使用最新版本的项目代码而不是在容器内生存是一个巨大的优势。我正在我的项目文件夹中的'docer-compose.yml'文件中组织上述设置。所以我可以将整个项目文件夹复制到另一台机器上,键入'heaper-compose'并启动并运行。
    我实际上已经在我的Dropbox中使用它并且可以像这样切换机器。很甜蜜。

    但有一个缺点。数据库存储不可移植,因为它位于Virtualbox文件系统的某个位置。我尝试将数据存储安装到主机操作系统中,但这并没有真正起作用。这些文件存在,但是当我尝试读取或写入时会出现各种错误。

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

1 个答案:

答案 0 :(得分:1)

我删除数据容器并切换到命名卷。尽管有一些过时的文档表明不是这样,但数据容器已经需要很长一段时间了。

命名卷允许您从各种卷驱动程序中进行选择,这些驱动程序可以从外部源(包括NFS,gluster和flocker)安装数据。它还消除了选择不会产生大量磁盘开销的容器的要求,允许您将文件夹安装在每个容器中的任何位置,并将容器管理与数据管理分开(因此docker rm -v $(docker ps -aq)不会#39; t nuke your data)。

指定的卷与创建docker run上的卷名称一样容易创建,例如docker run -v app-data:/app myapp。然后,您可以使用docker volume ls列出它们。