我正在研究如何使用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
此示例不需要定义卷,为什么会这样?
答案 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