gpt4 book ai didi

php - 如何 docker 化

转载 作者:行者123 更新时间:2023-12-02 18:32:24 27 4
gpt4 key购买 nike

我正在玩小型服务器,试图对运行在其上的服务进行docker化。为简化起见,假设我必须主要处理:Wordpress和另一项服务。

在Docker集线器上有许多用于Wordpress的图像,但是它们似乎都启动了Web服务器(Apache2)和PHP-FPM。我看不到它与docker哲学如何兼容,后者指出“每个容器只有一个进程”。 我错了吗?

因此,我使用docker-compose启动了三个容器:web_db(MariaDB),web_server(nginx)和web_fpm(PHP-FPM)。通过web_server可以对包含数据的./www卷进行监视。因此,将Wordpress文件放置在./www/wordpress中之后,我可以通过继续http://my-ip/wordpress来访问它并将其安装在经典的Wordpress安装中。 这是正确的方法吗?

现在我的Wordpress已启动并正在运行,我想添加另一个服务。但是,那时我真的不知道什么是最佳实践。我应该只创建./www/other-service,并使用相同的容器吗?在我看来,只为一个进程提供一个容器会更好(例如,为什么要有两个执行PHP-FPM的容器?),但是也许我应该避免这样做来隔离我的服务。更确切地说,我认为创建带有第二个数据库的第二个容器可能是很好的(即必要的)。 我可以/应该为Nginx提供一个容器,为PGHP-FPM提供一个容器,为两个数据库提供两个容器吗?还是应该为其他服务重新创建整个堆栈,并在前面放置第三个nginx来做代理并管理HTTPS和证书?

最佳答案

Can/should I have one container for Nginx, one for PHP-FPM and two containers for the two databases? Or should I re-create an entire stack for the other service, with a third nginx in front to do the proxy and managing the HTTPS and certificates?



你好

我为wordpress网络所做的工作(在OVH Cloud上为10多个wordpress)正在为每个Wordpress创建一个堆栈,其中包括:
  • 1个带有Apache / PHP的Wordpress容器,我的wp-content文件夹
  • 的已安装卷
  • 1带有/ var / lib / mysql的安装卷的MySQL容器
  • 1 Nginx代理容器
  • 1让我们加密容器

  • 这种配置是当我在一台主机上获得一台wordpress时。如果我需要在同一主机上启动多个Wordpress,则可以使用Nginx代理启动一个堆栈+让我们加密,然后每个wordpress一个Wordpress / Mysql堆栈。

    我从不直接公开Wordpress容器的端口,我的所有域/虚拟主机均由Nginx代理容器配置,并自动配置为使用“让我们加密”中的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加密。

    我希望我的英语还不错。 :)

    关于php - 如何 docker 化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37317028/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com