人们如何处理Docker容器的持久存储?

我目前正在使用这种方法:构建映像,例如PostgreSQL,然后启动容器

docker run --volumes-from c0dbc34fd631 -d app_name/postgres

恕我直言,这有缺点,我不能(意外地)删除容器“c0dbc34fd631”。

另一个想法是将主机卷“-v”挂载到容器中,然而,容器中的用户id不一定与来自主机的用户id匹配,然后权限可能会被打乱。

注意:除了——volumes-from 'cryptic_id',你还可以使用——volumes-from my-data-container,其中my-data-container是你分配给仅数据容器的名称,例如docker run——name my-data-container…(见公认答案)


当前回答

使用Docker Compose时,只需附加一个命名卷,例如:

version: '2'
services:
  db:
    image: mysql:5.6
    volumes:
      - db_data:/var/lib/mysql:rw
    environment:
      MYSQL_ROOT_PASSWORD: root
volumes:
  db_data:

其他回答

虽然这仍然是Docker需要做一些工作的一部分,但你应该将卷与volume指令放在Dockerfile中,这样你就不需要从另一个容器复制卷了。

这将降低容器的相互依赖性,并且不必担心删除一个容器会影响另一个容器。

我最近写了一篇关于潜在解决方案和演示该技术的应用程序的文章。我发现它在开发和生产过程中非常有效。希望它能帮助或激发一些想法。

回购:https://github.com/LevInteractive/docker-nodejs-example 文章:http://lev-interactive.com/2015/03/30/docker-load-balanced-mongodb-persistence/

在Docker v1.0版本中,可以通过以下命令绑定主机上的文件或目录的挂载:

$ docker run -v /host:/container ...

上面的卷可以用作运行Docker的主机上的持久存储。

这取决于你的场景(这并不适合生产环境),但这里有一种方法:

创建MySQL Docker容器

它的要点是使用主机上的目录进行数据持久性。

我只是在主机上使用一个预定义的目录来持久化PostgreSQL的数据。同样,通过这种方式,可以轻松地将现有的PostgreSQL安装迁移到Docker容器:https://crondev.com/persistent-postgresql-inside-docker/