使用 docker-compose 挂载卷

Mounting volumes with docker-compose

我正在研究如何使用 docker-compose 挂载卷以实现数据持久性,但我无法理解我阅读的所有示例。

https://www.linux.com/learn/docker-volumes-and-networks-compose

version: '2'

services:

 mysql:  

  image: mysql

  container_name: mysql

  volumes:

    - mysql:/var/lib/mysql

...

volumes:

 mysql:

好的,所以这在底部定义了一个名为 mysql 的卷,它在

中引用了这个卷
- mysql:/var/lib/mysql

mysql 图像如何知道在这个名为 mysql 的卷中查找?它是否只是设计用于查看存储数据或其他东西的所有卷?

然后在其他示例中我看到以下内容:

services:

 nginx:

   image: nginx

   depends_on:

     - ghost

   volumes:

     - ./default.conf:/etc/nginx/conf.d/default.conf

   ports:

     - "80:80"    

   networks:

     - proxy

这个例子不需要定义卷,这是为什么?

您的 MySQL 数据将存储在由以下人员创建的命名卷 mysql 中:

volumes:
 mysql:

您可以使用 docker volume ls 列出 docker 个卷,'path' 类似于:/var/lib/docker/volumes/mysql/date。当您在此文件夹中 cd 时,您将看到与路径 mysql 容器中的数据相同的数据:/var/lib/mysql。如果您在容器内执行,您将看到相同的数据。

它怎么知道如何使用这个路径? 好吧检查 mysql 的 Dockerfile。这里是:

VOLUME /var/lib/mysql

简而言之:您的 mysql 的所有数据都存储在容器内的 /var/lib/mysql 中,并挂载到您主机上的命名 docker 卷 mysql,这路径类似于 /var/lib/docker/volumes/mysql/data/.

下一部分是在 nginx 容器内的路径 /etc/nginx/conf.d/default.conf 上安装 ./default.conf(在您的主机上,相对路径)。

Nginx 和 ghost 在这种情况下不需要命名卷,因为它们不需要保留特定数据。创建环境时,您将使用 Ghost 添加数据(写博客),但数据本身将存储在 mysql 数据库中。不在 Ghost 容器中。

备注(如果您的第二个示例与 mysql 示例无关):ghost 的默认图像正在使用同一容器内的 sqlite3 数据库(=!每个容器的微服务所以这很好开发,而不是生产)。但是如果你要使用这个设置,你需要为你的 sqlite 创建一个命名卷,它与 ghost 在同一个容器中。看看ghost的dockerfile。 如果你想使用 mysql 你可能需要将一个配置文件挂载到你的 ghost 容器来告诉容器:使用 mysql,你将不需要为 ghost 命名的 docker 卷,然后,因为数据不会存储在 ghost 容器中,而是存储在 mysql 容器中。 为了在不对命名卷使用 mysql 的情况下保持上一个示例的持久性,您必须为位于此路径的 ghost 容器内的 sqlite 数据库添加一个卷:/var/lib/ghost/content。再次检查 Dockerfile 以查看此路径。

This blog post 解释了如何在 docker-compose

中使用 mysql 设置 ghost