如何在单个docker容器上安装多个php版本

时间:2017-05-22 16:26:02

标签: php nginx docker docker-compose dockerfile

我最近开始使用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同时运行,我可以创建三个容器,即用php5.6-fpm使用php7.1-fpm和nginx如果有人试图访问hostone.dev等,我怎么告诉nginx在运行php5.6-fpm的conatainer中寻找一个文件夹

1 个答案:

答案 0 :(得分:2)

Docker的主要理念是每个容器有一个任务(或进程)。有关详细说明,请参阅https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/

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

其次,我认为您滥用多个FROM功能。

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

  

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

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