【发布时间】:2017-09-06 08:10:49
【问题描述】:
我想使用 docker 运行多个 WordPress 网站和一个共享数据库。
是否可以指定一个数据库并为某个sql文件设置一个合适的卷来为它的docker-compose.yml文件中的每个容器初始化WordPress?
例如,我有三个docker-compose.yml 文件用于共享容器、站点A 和站点B。
当我在./shared 中运行docker-compose up 时,将为两个站点(example_a 和example_b)创建两个数据库。
当我在./siteA 中运行docker-compose up 时,我想将当前数据库更改为example_a,并通过来自./siteA/mysql/setup.sql 的sql 使用一定量的数据初始化站点。
siteB 也是如此。
我知道我可以在docker-compose.yml 的 mysql 部分中指定数据库和卷,如 -
WORDPRESS_DB_NAME: example_a 和 - ./db-data/mysql.dump.sql:/docker-entrypoint-initdb.d/install_wordpress.sql,但我只有一个共享 mysql,无法为每个站点指定数据库和卷。
我有多个 docker-compose.yml 文件,如下所示。
./shared/docker-compose.yml
version: "2"
services:
proxy:
image: jwilder/nginx-proxy
privileged: true
container_name: proxy
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./certs:/etc/nginx/certs:ro
restart: always
logging:
options:
max-size: 5m
max-file: "10"
mysql:
image: mysql:5.7
container_name: mysql
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--max-allowed-packet=128M
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=foobar
restart: always
volumes:
- db-data:/var/lib/mysql
- ./mysql/sql-setup.sql:/docker-entrypoint-initdb.d/sql-setup.sql # to create multiple databases (e.g. example_a, example_b)
logging:
options:
max-size: 5m
max-file: "10"
volumes:
db-data:
driver: local
networks:
default:
external:
name: shared
./siteA/docker-compose.yml
version: "2"
services:
example_a_wordpress:
image: wordpress
container_name: a.example
environment:
WORDPRESS_DB_NAME=example_a
WORDPRESS_DB_PASSWORD=foobar
VIRTUAL_HOST: a.example.dev
external_links:
- mysql
restart: always
volumes:
- ./dist/theme:/var/www/html/wp-content/themes/main
- ./dist/assets:/var/www/html/assets
logging:
options:
max-size: 5m
max-file: "10"
networks:
default:
external:
name: shared
./siteB/docker-compose.yml
version: "2"
services:
example_b_wordpress:
image: wordpress
container_name: b.example
environment:
WORDPRESS_DB_NAME=example_b
WORDPRESS_DB_PASSWORD=foobar
VIRTUAL_HOST: b.example.dev
external_links:
- mysql
restart: always
volumes:
- ./dist/theme:/var/www/html/wp-content/themes/main
- ./dist/assets:/var/www/html/assets
logging:
options:
max-size: 5m
max-file: "10"
networks:
default:
external:
name: shared
【问题讨论】:
-
我认为你过于复杂了。您应该研究一下 Wordpress Multisite,它几乎可以满足您的所有需求。 premium.wpmudev.org/blog/ultimate-guide-multisite
-
除了共享 MySQL 容器外,您还可以共享一个 Apache2/PHP 容器,而不是使用多个容器与官方 wordpress 镜像。
-
通过使用不同的前缀,您可以将所有内容存储在一个数据库中。不明白这会是你真正想要的东西。
标签: mysql wordpress docker docker-compose dockerfile