我在本地计算机上都设置了虚拟机共享文件夹。我在Docker撰写文件中的Wordpress服务中包含以下代码。但不确定卷在这里如何工作。你能解释一下吗?
version: '2'
services:
database:
image: mysql:5.6
volumes:
- ./mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
restart: unless-stopped
wordpress:
image: wordpress:4.9.6
ports:
- 49160:80
links:
- database:mysql
volumes:
- ./wordpress:/var/www/html/wp-content
environment:
WORDPRESS_DB_PASSWORD: password
restart: unless-stopped
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- database:db
ports:
- 8080:80
以上卷代码行是否意味着,是否需要在我当前正在运行的docker-compsose.yml文件中创建一个WordPress文件夹?
还是与虚拟机中的共享文件夹有关?
答案 0 :(得分:1)
基本上,卷是Docker的工具,因此它可以保留数据。 Docker容器通常被设计为无状态的,但是如果您需要在运行之间保留状态/信息,那就是卷的所在。
您可以通过以下方式创建未命名的卷:
volumes:
- /var/www/html/wp-content
这会将您的wp-content文件夹保留在内部卷存储中,而无需使用特定名称。
第二种方法是给它命名,使其成为一个命名卷:
volumes:
- mywp:/var/www/html/wp-content
最后一种类型(也就是您正在做的)称为卷绑定。这基本上是将主机上文件夹的内容绑定/装入容器中。因此,如果您在任一位置更改文件,该文件都会保存在另一位置。
volumes:
- ./wordpress:/var/www/html/wp-content
为了使用您的卷绑定,您将需要在运行docker-compose.yaml的文件夹(通常是根文件夹)中创建文件夹“ wordpress”。之后,当您在容器内更改安装时,绑定上的安装也会更改,反之亦然。
编辑:在您的特定情况下,以下方法应该起作用:
version: '3.2'
services:
database:
image: mysql:5.6
volumes:
- ./mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
restart: unless-stopped
wordpress:
image: wordpress:4.9.6
ports:
- 49160:80
links:
- database:mysql
volumes:
- type: bind
source: ./wordpress
target: /var/www/html/wp-content
environment:
WORDPRESS_DB_PASSWORD: password
restart: unless-stopped
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- database:db
ports:
- 8080:80
答案 1 :(得分:0)
在docker-compose.yml
文件中添加卷将使您能够将内容从本地文件系统“装载”到正在运行的容器中。
因此,关于以下行:
volumes:
- ./wordpress:/var/www/html/wp-content
这意味着本地wordpress
目录中的所有内容都将放置在容器内的/var/www/html/wp-content
目录中。这很有用,因为它允许您在本地开发主题和插件,然后将它们自动注入到正在运行的容器中。
为避免混淆,我建议将wordpress
重命名为其他名称,因此很明显,您仅装载WordPress内容,而不装载核心文件本身。
如果您需要其他参考,这里我也有类似的设置: