使用docker-compose安装卷

时间:2018-01-10 07:57:22

标签: docker-compose docker-volume

我正在研究如何使用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

此示例不需要定义卷,为什么会这样?

1 个答案:

答案 0 :(得分:2)

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

volumes:
 mysql:

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

它如何知道如何使用此路径? 检查mysql的Dockerfile。这是:

VOLUME /var/lib/mysql

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

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

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

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

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

中使用mysql设置ghost