php - 使用 PHP、MySQL、nginx 同时运行多个 Dockerize 项目

标签 php mysql nginx docker docker-compose

问题

我有具有相同配置(PHP、MySQL、nginx)的 docker-compose 配置的项目。当我用 docker-compose up 运行一个项目时没有问题,但我需要在它们之间切换到每天几次进行开发。

问题:

  • nginx同一端口的共享配置
  • 默认数据库和连接(名称和用户)的共享配置
  • 每个项目的域

我有

  • Docker for Mac - 边缘

暂时

现在只需运行 updown -v 每次。 大多数情况下,项目使用相同的 PHP 版本(应该)和 MySQL。

想法

负载平衡器

一个想法是在主文件夹 workspacedocker-compose 中创建配置,其中包含一些负载均衡器,一些规则将为给定项目生成域,其中卷为主文件夹和一个 MySql 服务器和几个数据库 - 但这是原始想法。

问题

什么解决方案适用于特定情况?

  • 提出任何结构或docker配置来解决独立配置?

更新

我的 docker-compose 文件

版本:'2.1'

为开发人员设置单一服务器

services:
  app:
    image: ${PHP_IMAGE}
    volumes:
     - ${COMPOSE_DIR}/../../:/var/www:cached
     - ${COMPOSER_HOME}:/root/.composer:cached
    depends_on:
     - db
    environment:
     - SYMFONY_ENV=${SYMFONY_ENV-prod}
     - SYMFONY_DEBUG
     - SYMFONY_HTTP_CACHE
     - SYMFONY_HTTP_CACHE_CLASS
     - SYMFONY_TRUSTED_PROXIES
     - DATABASE_USER
     - DATABASE_PASSWORD
     - DATABASE_NAME
     - DATABASE_HOST=db

  web:
    image: ${NGINX_IMAGE}
    volumes_from:
     - app:ro
    ports:
     - "8080:80"
    environment:
     - SYMFONY_ENV=${SYMFONY_ENV-prod}
     - MAX_BODY_SIZE=20
     - FASTCGI_PASS=app:9000
     - TIMEOUT=190
     - DOCKER0NET
    command: /bin/bash -c "cd /var/www && cp -a doc/nginx/ez_params.d /etc/nginx && bin/vhost.sh --template-file=doc/nginx/vhost.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"

  db:
    image: ${MYSQL_IMAGE}
    volumes:
     - ${COMPOSE_DIR}/entrypoint/mysql:/docker-entrypoint-initdb.d/:ro
    environment:
     - MYSQL_RANDOM_ROOT_PASSWORD=1
     - MYSQL_USER=$DATABASE_USER
     - MYSQL_PASSWORD=$DATABASE_PASSWORD
     - MYSQL_DATABASE=$DATABASE_NAME
     - TERM=dumb

鉴于此,正如我所说,我希望运行具有不同 PHP 版本的项目。每个都有相同的 nginx 配置,然后需要以某种方式轻松同时运行它们。

了解@Vladimir Kovpak 的回答,但以这种方式手动工作会产生大量工作。 每个项目都有自己的 docker-compose 配置。

什么才是完美的

场景 1

  • 进入项目,运行命令以通过 docker-compose 正确构建
    • 可以做开发工作
    • 可以通过一些动态域访问页面
  • 运行命令关闭项目

场景 2

  • 转到项目,运行命令以通过 docker-compose 正确构建
  • 转到其他项目,运行命令以通过 docker-compose 正确构建
  • 转到其他项目,运行命令以通过 docker-compose 正确构建
    • 可以做开发工作
    • 可以通过一些动态域访问页面
  • 运行命令关闭项目

可以同时处理所有项目。 第一步是命题 - 任何初始化和关闭都可以,因为不痛苦 - 应该快速而简单。

最佳答案

我开始使用Portainer一旦容器设置好,它就会有一个网页,允许您启动、停止和管理正在运行的容器。

Portainer 本身是一个 docker 机器,所以我在机器启动时启动它,然后在 Web 浏览器中我可以看到我已经设置的 MySQL、PHP 和 phpmyadmin 容器。您可以单独启动和停止它们,也可以通过浏览器在机器中执行控制台。

浏览器还会向您显示机器使用统计信息、IP 地址和端口转发详细信息,因此您的浏览器中有大量有用的信息。

最后,它还允许你远程管理 docker 机器,所以我已经用 docker 设置了我的桌面,我可以在我的笔记本电脑上管理容器。

关于php - 使用 PHP、MySQL、nginx 同时运行多个 Dockerize 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45031943/

相关文章:

php - 将所有内容传递到一个位置 nginx

php - 如何计算 zend 框架的行数?

mysql - 加入多个专栏

python - 使用 Python 插入变量 MySQL,不工作

django - 用于上游 Django/Gunicorn 后端的 NGINX 反向代理

sockets - nginx、fastcgi 和开放套接字

reactjs - 访问 React js 应用程序时不断收到 Nginx 403 Forbidden 错误

php - php 中剩余的天数、小时数和分钟数

php - Laravel:并行运行 Artisan 命令

mysql - SQL外键错误?