问题
我有一些使用相同配置(PHP、MySQL、nginx)的 docker-compose
项目。当我运行一个项目时,使用docker-compose up
没有任何问题,但是因为需要进行开发,我每天需要在这些项目之间进行切换。
存在的问题:
- nginx 共享端口的配置
- 默认数据库和连接的共享配置(名称和用户)
- 每个项目的域名
我拥有
Docker for Mac
- edge 版本
现在
目前只是每次运行 up
和 down -v
命令来启动和停止容器。大多数情况下,这些项目都具有相同的 PHP 版本(应该如此)和 MySQL 版本。
想法
负载均衡器
其中一种想法是在主文件夹 workspace
中创建一个 docker-compose
配置,其中包含一些负载均衡器,它可以根据给定项目的规则生成域名,并将项目的卷作为主文件夹,还有一个 MySql 服务器和一些数据库 - 但这只是一个初步想法。
问题
什么解决方案适用于这种情况?
- 提出任何结构或 Docker 配置来解决独立配置的问题吗?
更新
我的 docker-compose 文件
version: '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正确构建 - 可以进行开发工作 - 可以通过一些动态域名访问页面 - 通过命令停止项目
可以同时使用所有项目。第一步是提议 - 任何初始化和关闭都应该很好,因为不痛苦 - 应该快速且容易。