使用 Docker 同时运行多个 Web 开发环境

Posted

技术标签:

【中文标题】使用 Docker 同时运行多个 Web 开发环境【英文标题】:Using Docker to run several web development environments at the same time 【发布时间】:2019-06-23 02:51:51 【问题描述】:

我的任务是维护几个网络应用程序,所有这些应用程序都使用 LAMP 堆栈。其中一些在 php 5.6 上运行,其中一些在 PHP 7.0 上运行,一些使用 Wordpress,一些使用 Symfony... 理想情况下,我想在家中设置与生产环境尽可能相同的测试/开发环境。

我一直在研究 Docker(警告:这里是新手!),看看它是否适合我的需要。我将在 Windows 和 Mac 上工作,我想在我的机器上拥有几个 LAMP 环境,每个环境都有自己的 PHP/mysql/etc 版本,彼此隔离,并且都在同一个环境中运行虚拟机(因为否则我还不如只使用我熟悉的东西并设置不同的虚拟机)。 Docker 能做到吗?

(对不起,如果这听起来像一个愚蠢的问题:阅读 Docker,我的印象是容器理念允许您精确地做我描述的事情,而不会像使用虚拟机那样浪费资源,但是,我还没有找到任何关于同时运行多个 LAMP 环境)。

【问题讨论】:

Docker 与 VM 具有相同的概念,只是所有容器共享相同的 Guest OS,而不是拥有单独的 Guest OS。这意味着它们可以在容器(CPU/RAM)之间动态共享资源。与 VirtualBox 不同,不管它是否需要,它都会占用大量资源;所以这意味着你可以告诉容器使用 1GB 的 RAM,但是,与 VM 不同,容器会将它不使用的内存返回给主机。 也许你想要“Docker Compose”docs.docker.com/compose @Scuzzy:根据我的阅读,Docker Compose 允许您在一个环境中“链接”多个容器:nginx + PHP + MySQL 等。但我要问的是你是否可以在一个虚拟机中同时拥有多个这样的“链”。看起来下面提到的这个“Php Docker Stack”就是我要找的东西,所以我会检查一下。 【参考方案1】:

PHP Docker 堆栈

Php Docker 堆栈在生产和开发中运行 Php 应用程序,使用 Docker Compose 服务来运行任何 Php 版本、数据库、缓存、队列、日志等等......

从现在开始,无需再为操作系统而烦恼,即可准备好完整的开发堆栈来构建我们出色的 Php 应用程序。

可以通过composer包含在每个php项目中:

https://packagist.org/packages/exadra37-docker/php-docker-stack

或者,如果您愿意,可以直接从 here 克隆它。

它为每个服务提供了一些默认图像,但都可以通过.env 进行配置,因此我们可以在 docker compose 文件中为任何受支持的服务传递我们想要的任何 docker 图像。

Php Docker 堆栈服务:

Http - Nginx、Apache 等 Php - Php-Fpm。 数据库 - Perconna、MariaDB、Mysql 等 缓存 - Redis、MemCached 等 日志 - Logstash -> ElasticSearch 队列 - Beenstalkd、RabbitMQ、ActiveMQ、Apache Kafka 等 Cron 作业 - 仅用于安排 cron 作业。 Dev CLI - 访问容器外壳。 数据库 CLI - 就像很棒的 mysql 的 mycli propmt。 缓存 CLI - 类似于 redis cli。

我在以前的工作中每天都在使用它进行开发。

我是它的作者,我有一些需要在上游完善和合并的本地增强功能。

请随意尝试,如有任何疑问或反馈,请联系我。

【讨论】:

听起来很有趣!我一定会检查出来的。谢谢。 我从未在 MAC 或 Windows 中使用过它,因此我不确定在那里是否可以正常工作,但如果不能在 repo 中打开问题,请告诉我。【参考方案2】:

好的,经过很长时间,我想我应该分享我找到的并且我目前正在使用的解决方案:devilbox。它太棒了,一旦你开始熟悉它,它就会非常强大、灵活且可自定义。

【讨论】:

以上是关于使用 Docker 同时运行多个 Web 开发环境的主要内容,如果未能解决你的问题,请参考以下文章

详解使用Docker搭建Java Web运行环境

Java开发工程师(Web方向) - 01.Java Web开发入门 - 第6章.蜂巢

docker部署并运行Redis

使用 docker 运行多个项目,每个项目都使用 docker-compose 运行

使用docker高效搭建开发环境

大项目docker打包部署慢