我正在玩我的小型服务器,尝试将其上运行的服务停靠。为简化起见,假设我必须掌握一些主要内容:Wordpress和其他服务。
Docker Hub上有很多适用于Wordpress的图像,但它们似乎都启动了Web服务器(Apache2)和 PHP-FPM。我不知道它是如何与docker哲学兼容,说明“每个容器有一个进程”。 我错了吗?
所以我使用docker-compose来启动三个容器:web_db
(MariaDB),web_server
(nginx)和web_fpm
(PHP-FPM)。 web_server
将./www
列为包含数据的卷./www/wordpress
。因此,在将Wordpress文件放入http://my-ip/wordpress
之后,我可以通过./www/other-service
访问它并安装它来安装经典的Wordpress文件。 这是正确的方法吗?
现在我的Wordpress已启动并运行,我想添加其他服务。但是,我真的不知道什么是最佳做法。我应该简单地创建{
tags : {
$all : [
{
$elemMatch : {
id: 1
}
},
{
$elemMatch : {
id: 2
}
},
{
$elemMatch : {
id: 3
}
}
],
$not : {
$elemMatch : {
id: { $in : [4,5] }
}
}
}
}
,那么使用相同的容器?在我看来,只有一个容器用于进程更好(例如,为什么有两个容器执行PHP-FPM?),但也许我应该避免这种情况来隔离我的服务。更确切地说,我认为用第二个数据库创建第二个容器可能是好的(即必要的)。 可以/应该为nginx设置一个容器,一个用于PGHP-FPM,两个容器用于两个数据库?或者我应该为其他服务重新创建一个完整的堆栈,在前面使用第三个nginx来执行代理并管理HTTPS和证书吗?
答案 0 :(得分:1)
可以/应该为Nginx设置一个容器,一个用于PHP-FPM,两个容器用于两个数据库?或者我应该为其他服务重新创建一个完整的堆栈,在前面使用第三个nginx来执行代理并管理HTTPS和证书吗?
您好,
我为我的wordpress网络(OVH Cloud上的10多个wordpress)所做的是为每个Wordpress创建一个堆栈:
这个配置是我在一台主机上有一个wordpress的时候。如果我需要在同一个主机上启动多个Wordpress,我会启动一个带有Nginx代理的堆栈+让我们加密,然后每个wordpress一个Wordpress / Mysql堆栈。
我从未直接暴露Wordpress容器端口,我的所有域/ vhost都由Nginx代理容器配置,并自动配置为使用来自Let的加密的SSL。
以下是我的 Rancher堆栈的一个示例,用于一台主机上的 Wordpress :
db:
environment:
MYSQL_PASS: MYSQL_PASS
labels:
io.rancher.container.pull_image: always
io.rancher.scheduler.affinity:host_label: server=TARGET
tty: true
image: tutum/mysql:5.5
volumes:
- /home/docker/wordpress/mysql/lib:/var/lib/mysql:rw
stdin_open: true
letsencrypt:
labels:
io.rancher.container.pull_image: always
io.rancher.scheduler.affinity:host_label: server=TARGET
tty: true
image: jrcs/letsencrypt-nginx-proxy-companion:latest
volumes:
- /home/docker/nginx-proxy/ssl:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes_from:
- proxy
stdin_open: true
proxy:
ports:
- 443:443/tcp
- 80:80/tcp
labels:
io.rancher.sidekicks: letsencrypt
io.rancher.container.pull_image: always
io.rancher.scheduler.affinity:host_label: server=TARGET
tty: true
image: jwilder/nginx-proxy:latest
volumes:
- /etc/nginx/vhost.d
- /usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
- /home/docker/nginx-proxy/ssl:/etc/nginx/certs:ro
- /home/docker/nginx-proxy/vhost.d:/etc/nginx/vhost.d:rw
stdin_open: true
wordpress:
environment:
DB_NAME: DB_NAME
DB_PASS: DB_PASS
DB_USER: DB_USER
LETSENCRYPT_EMAIL: LETSENCRYPT_EMAIL
LETSENCRYPT_HOST: LETSENCRYPT_HOST
VIRTUAL_HOST: www.nicolashug.com, nicolashug.com
VIRTUAL_PORT: '80'
WP_ADMIN_EMAIL: WP_ADMIN_EMAIL
WP_ADMIN_PASSWORD: WP_ADMIN_PASSWORD
WP_ADMIN_USER: WP_ADMIN_USER
WP_PROTO: https
WP_URL: www.nicolashug.com
log_driver: ''
labels:
io.rancher.container.pull_image: always
io.rancher.scheduler.affinity:host_label: server=TARGET
tty: true
log_opt: {}
image: krustyhack/wordpress:latest
links:
- 'db:'
volumes:
- /home/docker/wordpress/wordpress/wp-content:/app/wp-content:rw
stdin_open: true
当我的Wordpress容器第一次使用wp-cli自动安装Wordpress时,首先使用我的管理员登录名,密码,电子邮件等配置它,然后安装我的插件和我的模板。这使我可以启动很多Wordpress而无需通过URL安装它们。
当我在一台主机上需要多个Wordpress时,我使用相同的堆栈,但没有Nginx代理,让我们加密一部分放在一个单独的Rancher堆栈中。
即使我喜欢在这种情况下将所有应用程序/服务与Docker分开,我发现将Apache / PHP / Wordpress放在一个容器中也是最简单的。
我需要做的下一件事是将Mysql与堆栈分开,将所有数据库放在一台服务器上,但这不是讨论:p
对于你的问题,我会做的是每个Wordpress的一个堆栈,包含容器Apache / PHP,容器Mysql和另一个带有Nginx代理的堆栈,让我们对服务器上的所有Wordpress进行加密。
我希望我的英语不是太糟糕。 :)
答案 1 :(得分:0)
嗯,我同意你关于每个容器的一个过程,但是,我不再确定它。例如,本文已在Docker网站上发布:https://docs.docker.com/compose/wordpress/
要回答您的第二个问题,是的,您是对的,您只需要物理主机/容器的IP导航到您的WordPress安装。上面的链接也显示了如何做到这一点。
很好地取决于你想要实现的目标,因为没有好方法或坏方法,所有这些都与个人偏好和你正在运行的硬件有关。如果您有大量可用的磁盘空间和RAM,则每个WordPress安装都可以有一个DB,否则,您可以拥有一个包含所有WordPress DB的web_db。
更多信息:
https://www.sitepoint.com/how-to-use-the-official-docker-wordpress-image/
https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-and-phpmyadmin-with-docker-compose-on-ubuntu-14-04