如何在一个docker集装箱上安装多个PHP版本

我最近开始使用docker,并且能够设置两个容器,一个使用apache2运行php7.0,另一个运行mysql,他们都可以相互通话,一切工作正常,现在我要设置一个新的docker集装箱哪些shoudl有nginx,php5.6-fpm和php7.0-fpm安装在单个容器上我一直试图实现它,因为过去几个小时没有运气。 以下是我的Dockerfile

FROM nginx:latest FROM php:php7.1-fpm FROM php:php5.6-fpm COPY ./src /var/www/html RUN apt-get update && apt-get install -y \ nano \ git \ zip \ mcrypt \ && docker-php-ext-install mcrypt \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \ 

**编辑:**

我知道一个容器应该有一个责任,但我处于需要php5.6-fpm和php7.1-fpm同时运行的情况,我可以创build三个容器,即使用php7的php5.6-fpm。 1-fpm和nginx如果有人试图访问hostone.dev等,我将如何告诉nginx在运行php5.6-fpm的conatainer中寻找一个文件夹

Docker的一个主要思想是每个容器有一个任务(或进程)。 请参阅https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/以获取更多关于此的说明。

我会质疑是否通过尝试在一个容器中运行这么多的东西来充分利用Docker。 可以在同一个容器中运行PHP和Apache(这里有一个官方的图片!),但是我build议不要在同一个容器中运行nginx和PHP FPM,因为PHP FPM是它自己的进程,因此应该有自己的容器。

其次,我认为你滥用多个FROMfunction。

https://docs.docker.com/engine/reference/builder/#from

FROM可以在单个Dockerfile中出现多次,以创build多个图像。 只需在每个新的FROM命令之前logging由提交输出的最后一个映像ID。

FROM关键字指定一个基础图像,您将在其上构build基础图像。 如果你想要一个单一的图像作为输出,你需要一个基础的图像build立。 如果您的基本映像是php:7.1-fpm ,则需要手动安装所需的其他PHP版本。 这可能会很困难,因为它们会在很多地方发生冲突。 我强烈推荐重新考虑你的devise,使用两个独立的容器,或者用PHP 7运行你的PHP 5代码 – 它大部分是向后兼容的。