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