Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Dockerized example for article at Pehapkari.cz about running multiple PHP versions: https://pehapkari.cz/blog/2017/03/27/multiple-php-versions-the-easy-way/
FROM debian:stretch
ENV DEBIAN_FRONTEND noninteractive
# install NGINX
RUN apt-get update && \
apt-get install -y nginx --no-install-recommends && \
rm -rf /var/lib/apt/lists/*
# install PHP 7.0
RUN apt-get update && \
apt-get install -y php7.0-cli php7.0-fpm --no-install-recommends && \
rm -rf /var/lib/apt/lists/*
# install PHP 5.6
RUN apt-get update && \
apt-get install -y apt-transport-https ca-certificates curl gnupg --no-install-recommends && \
rm -rf /var/lib/apt/*
RUN curl https://packages.sury.org/php/apt.gpg | apt-key add -
RUN echo 'deb https://packages.sury.org/php/ stretch main' > /etc/apt/sources.list.d/deb.sury.org.list
RUN apt-get update && \
apt-get install -y php5.6-cli php5.6-fpm --no-install-recommends && \
rm -rf /var/lib/apt/lists/*
# verify versions
RUN php7.0 -v
RUN php5.6 -v
RUN php -v
# clear active virtual hosts
RUN rm -f /etc/nginx/sites-enabled/*
# prepare PHP 7.0 virtual host
RUN mkdir /var/www/site-with-php7.0
COPY index.php /var/www/site-with-php7.0/index.php
COPY site-with-php7.0.vhost /etc/nginx/sites-available/site-with-php7.0
# prepare PHP 5.6 virtual host
RUN mkdir /var/www/site-with-php5.6
COPY index.php /var/www/site-with-php5.6/index.php
COPY site-with-php5.6.vhost /etc/nginx/sites-available/site-with-php5.6
# enable the virtual hosts
RUN ln -s ../sites-available/site-with-php5.6 /etc/nginx/sites-enabled
RUN ln -s ../sites-available/site-with-php7.0 /etc/nginx/sites-enabled
# (Docker-specific) install supervisor so we can run everything together
RUN apt-get update && \
apt-get install -y supervisor --no-install-recommends && \
rm -rf /var/lib/apt/lists/*
COPY supervisor.conf /etc/supervisor/supervisord.conf
RUN mkdir /run/php
EXPOSE 8870 8856
CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"]
<?php
phpinfo();
server {
listen 8856 default_server;
listen [::]:8856 default_server;
server_name _;
root /var/www/site-with-php5.6;
index index.php;
location / {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php5.6-fpm.sock; # adjust for the listen setting discussed above
}
}
server {
listen 8870 default_server;
listen [::]:8870 default_server;
server_name _;
root /var/www/site-with-php7.0;
index index.php;
location / {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock; # adjust for the listen setting discussed above
}
}
[supervisord]
nodaemon = true
[program:php70]
command = php-fpm7.0 -F -y /etc/php/7.0/fpm/php-fpm.conf
user = root
autostart = true
[program:php56]
command = php-fpm5.6 -F -y /etc/php/5.6/fpm/php-fpm.conf
user = root
autostart = true
[program:nginx]
command = /usr/sbin/nginx -g 'daemon off;'
user = root
autostart = true
#!/bin/bash
docker build -t multiphp .
docker run --rm -P multiphp
@leymannx

This comment has been minimized.

Copy link

commented Jan 12, 2018

Updated PHP70 to PHP71

  1. $ git clone https://gist.github.com/2fca8bfdc5004bade15bac84b9ab73e7.git tmp/multiphp
  2. $ docker build -t nginx-multiphp tmp/multiphp
  3. $ docker run -p 8856:8856 -p 8871:8871 --rm -P nginx-multiphp
  4. In your browser visit: http://localhost:8856 for PHP56 and http://localhost:8871 for PHP71 accordingly.
  5. Happy happy
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.