问下如果我需要搭建一个nginx+mysql+php7.4+redis 环境,创建一个容器是都放在一起比较好呢还是弄几个容器?

就是我想给客户部署网站,客户离线状态,我想通过docker容器方式部署,就想问下到底是通过软件都放在一个容器里面,还是都分开到各个容器里面呢?
我感觉分开后占的空间会更大一些,然后网站访问速度会相对来说慢一些,毕竟需要到各个容器里面走一遭。
合在一起感觉不太灵活,如果哪个软件需要更新,那就不太好弄了?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 23

显然分开最好

8个月前 评论

想想 docker 的本质就知道答案了

8个月前 评论

你想想后期如果要水平扩容你怎么办?架构要大改啊!

分成多个容器可以选择是单节点还是分布式,是跑在一个服务器上还是多个服务器上。

然后可以根据服务的性能瓶颈选硬件,例如 MySQL 服务用高性能 SSD,Redis 用大内存……

另外,不要以为都放在一个服务器上,离得近性能就一定比分布式高,所有服务在一个机器上, CPU 调度可能大部分时间在做上下文切换的无用功!

8个月前 评论
fatrbaby

nginx+php一个容器,mysql一个容器,redis一个容器。

8个月前 评论
sanders

分开,如果使用 php-fpm 且单机部署 建议使用 docker-compose 进行部署。 将 php-fpm、nginx、mysql、redis 分成四个容器进行部署,这里一定要注意把 mysql 和 redis 的卷挂好,避免数据损失。

如果使用队列 一定要给每个队列消费者单拆一个容器,让写有 php artisan queue:work 的脚本作为容器的1号进程。

如果使用定时任务,还需要给定时任务的 crontd 启动一个容器,注意要让 crond 在前台作为容器的1号进程。

8个月前 评论
sanders (作者) 8个月前
yyy123456 8个月前
yyy123456 8个月前
yyy123456 8个月前

当然分开好 用docker-compose 进行构建就好了
1、nginx
2、php-fpm+composer
3、redis
4、mysql
5、supervisor

8个月前 评论

几个疑问
1、商业化项目,软件版本基本是固定的。后期升级(大版本升级基本不可能,代码结构,软件特性都有变化)
2、客户的项目访问量大到超过一台单机的最大性能了?(很多项目php opcache都不开就说是性能不够了,然后要搞分布式。。。emmmm)
3、感觉是为了用docker而进行的docker。。。。
4、假设是单机部署。那么docker的意义是??

以上我瞎说的。

8个月前 评论
GeorgeKing 7个月前
zion_xayts_com 8个月前
sanders 8个月前
air93610 (作者) 8个月前
sanders 8个月前
air93610 (作者) 8个月前
sanders 8个月前
air93610 (作者) 8个月前
air93610 (作者) 7个月前

完全分开

看下 laradock 项目

8个月前 评论

建议是分开,laradock和dnmp都是分开的,需要容器之间访问数据就使用容器名就可以,例如有两个版本Mysql(mysql5.7h和mysql8.0),在env里配置就是:

host =>mysql5.7

不在容器内,例如部署了go语言的程序,访问数据库还是127.0.0.1:端口号。

7个月前 评论
Junwind

数据库不要放容器中

7个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!