我的项目docker-compose
具有相同的配置(PHP,MySQL,nginx)。当我使用docker-compose up
运行一个项目时没有问题,但我需要每天在它们之间切换几次以进行开发。
问题:
Docker for Mac
- edge 现在只需每次运行up
和down -v
。
大多数情况下,项目都是相同的PHP版本(应该是)和MySQL。
其中一个想法是在主文件夹workspace
,docker-compose
中使用一些负载均衡器创建配置,这将是一些规则将为给定项目生成域,其中卷为主文件夹,并且有一个MySql服务器和少数DB - 但这是个不切实际的想法。
在给定情况下,哪种解决方案有效?
版本:'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配置。
可以同时使用所有项目。 第一步是提议 - 任何初始化和结束都没有问题,因为没有痛苦 - 应该快速而简单。
答案 0 :(得分:4)
我开始使用Portainer,一旦设置了容器,就会有一个网页,允许您启动,停止和管理正在运行的容器。
Portainer本身就是一个docker机器,所以我在机器启动时启动它,然后在Web浏览器中我可以看到我已经设置的MySQL,PHP和phpmyadmin容器。您可以单独启动和停止它们,也可以通过浏览器将控制台执行到机器中。
浏览器还会显示机器使用情况统计信息,IP地址和端口转发详细信息,以及浏览器中的大量有用信息。
最后,它还允许您远程管理docker机器,因此我使用docker设置桌面,我可以在笔记本电脑上管理容器。
答案 1 :(得分:4)
nginx
:
您可以指定不同的端口,如:
docker run -ti --name nginx-1 -p 8081:80 nginx:latest
docker run -ti --name nginx-2 -p 8082:80 nginx:latest
或者在nginx配置中,您可以指定不同的server_name
,例如:
nginx-1 -> server_name one.dev;
nginx-2 -> server_name two.dev;
更简单mysql
:
您可以使用与nginx相同的不同端口
或者不同的hostnames
docker run -it --rm -p 3308:3306 --name mysql-1 --hostname mysql-1 mysql:latest
docker run -it --rm -p 3308:3306 --name mysql-2 --hostname mysql-2 mysql:latest
或者你可以有1个mysql,但是有不同的数据库,或者有不同的用户......
负载平衡:
你可以使用haproxy
并配置如:
# nginx
mode tcp
balance roundrobin
server nginx-1 localhost:8081 check port 8081 inter 1000
server nginx-2 localhost:8082 check port 8082 inter 1000
# mysql
# etc
PS:我提供的示例不是docker-compose
格式,但我希望您能得到一个要点...并希望将此命令转换为docker-compose格式并不困难