docker 搭建ubuntu下php多版本开发环境
docker-compose.yml
#version: "3.3"
services:
mysql-8.0:
container_name: ubuntu-mysql-8.0
image: mysql:8.0
restart: always
ports:
- "3309:3306"
volumes:
- ./etc/mysql/8.0/conf.d/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro
- ./var/log/mysql/8.0:/var/log/mysql:ro
- ./var/lib/mysql/8.0:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
environment:
MYSQL_ROOT_PASSWORD: zengshun2021
mysql-5.7:
container_name: ubuntu-mysql-5.7
image: mysql:5.7
restart: always
ports:
- "3310:3306"
volumes:
- ./etc/mysql/5.7/conf.d/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro
- ./var/log/mysql/5.7:/var/log/mysql:ro
- ./var/lib/mysql/5.7:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
environment:
MYSQL_ROOT_PASSWORD: zengshun2021
redis-5.0:
container_name: ubuntu-redis
image: redis:5.0
command: redis-server --requirepass zengshun2021
#command: redis-server /usr/local/etc/redis/redis.conf
restart: always
ports:
- "6380:6379"
volumes:
#- ./etc/redis/redis.conf:/usr/local/etc/redis/redis.conf
- ./var/lib/redis/data:/data
- /etc/localtime:/etc/localtime:ro
php-5.6:
container_name: ubuntu-php-5.6
#image: ubuntu-php:5.6
build: ./dockerfiles/php/5.6-fpm
restart: always
ports:
- "9003:9000"
volumes:
- ./etc/php/5.6/fpm:/etc/php/5.6/fpm:ro
- ./var/www:/var/www/html
- /etc/localtime:/etc/localtime:ro
links:
- "mysql-5.7"
php-7.4:
container_name: ubuntu-php-7.4
#image: ubuntu-php:7.4
build: ./dockerfiles/php/7.4-fpm
restart: always
ports:
- "9004:9000"
volumes:
- ./etc/php/7.4/fpm:/etc/php/7.4/fpm:ro
- ./var/www:/var/www/html
- /etc/localtime:/etc/localtime:ro
links:
- "mysql-8.0"
php-8.0:
container_name: ubuntu-php-8.0
#image: ubuntu-php:7.4
build: ./dockerfiles/php/8.0-fpm
restart: always
ports:
- "9005:9000"
volumes:
- ./etc/php/8.0/fpm:/etc/php/8.0/fpm:ro
- ./var/www:/var/www/html
- /etc/localtime:/etc/localtime:ro
links:
- "mysql-8.0"
nginx-1.26.0:
container_name: ubuntu-nginx
#image: ubuntu-nginx:1.18.0
build: ./dockerfiles/nginx/1.26.0
restart: always
ports:
- "8099:80"
#- "443:443"
volumes:
- ./etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./etc/nginx/conf.d:/etc/nginx/conf.d:ro
- ./etc/nginx/certs:/etc/nginx/certs
- ./etc/nginx/.htpasswd:/etc/nginx/.htpasswd
- ./var/log/nginx:/var/log/nginx
- ./var/www:/usr/share/nginx/html
- /etc/localtime:/etc/localtime:ro
links:
- "php-5.6"
- "php-7.4"
- "php-8.0"
nginx1.26 Dockerfile
#指定基于的基础镜像
FROM ubuntu:22.04
#维护者信息
MAiNTAINER zengshun <15272782842@163.com>
#运行shell脚本或命令
RUN apt-get update && apt install -y curl gnupg2 ca-certificates lsb-release
RUN echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
RUN curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add - && apt-key fingerprint ABF5BD827BD9BF62
RUN apt-get update && apt install -y nginx=1.26.0-1~jammy
#要与主机共享的目录。也可以在docker run 命令中使用 -v选项进行设置。例如,-v/root/data:/data将主>机的/root/data目录连接到Docker容器的/data目录。
#VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"]
#为CMD中设置的可执行文件设置运行目录。
#WORKDIR /etc/nginx
#与主机相连的端口号
#EXPOSE 80 443
#指定容器启动时执行的文件或shell脚本
CMD ["nginx", "-g", "daemon off;"]
php5.6 Dockerfile
#指定基于的基础镜像
FROM ubuntu:22.04
#维护者信息
MAiNTAINER zengshun <15272782842@163.com>
#运行shell脚本或命令
RUN apt-get update && apt-get install -y software-properties-common
RUN apt-get update && add-apt-repository ppa:ondrej/php
RUN apt-get update && apt-get install -y php5.6 php5.6-mcrypt php5.6-mbstring php5.6-curl php5.6-cli php5.6-mysql php5.6-gd php5.6-intl php5.6-xsl php5.6-zip php5.6-fpm
RUN sed -i 's@;daemonize = yes@daemonize = no@g' /etc/php/5.6/fpm/php-fpm.conf
RUN service php5.6-fpm start
#要与主机共享的目录。也可以在docker run 命令中使用 -v选项进行设置。例如,-v/root/data:/data将主>机的/root/data目录连接到Docker容器的/data目录。
#VOLUME ["/var/www/html"]
#为CMD中设置的可执行文件设置运行目录。
#WORKDIR /var/www/html
#与主机相连的端口号
#EXPOSE 9000
#指定容器启动时执行的文件或shell脚本
CMD ["/usr/sbin/php-fpm5.6", "-F"]
php7.4 Dockerfile
#指定基于的基础镜像
FROM ubuntu:22.04
#维护者信息
MAiNTAINER zengshun <15272782842@163.com>
#运行shell脚本或命令
RUN apt-get update && apt-get install -y software-properties-common
RUN apt-get update && add-apt-repository ppa:ondrej/php
RUN apt-get update && apt-get install -y php7.4 php7.4-mcrypt php7.4-mbstring php7.4-curl php7.4-cli php7.4-mysql php7.4-gd php7.4-intl php7.4-xsl php7.4-zip php7.4-fpm
RUN sed -i 's@;daemonize = yes@daemonize = no@g' /etc/php/7.4/fpm/php-fpm.conf
RUN service php7.4-fpm start
#要与主机共享的目录。也可以在docker run 命令中使用 -v选项进行设置。例如,-v/root/data:/data将主>机的/root/data目录连接到Docker容器的/data目录。
#VOLUME ["/var/www/html"]
#为CMD中设置的可执行文件设置运行目录。
#WORKDIR /var/www/html
#与主机相连的端口号
#EXPOSE 9000
#指定容器启动时执行的文件或shell脚本
CMD ["/usr/sbin/php-fpm7.4", "-F"]
php8.0 Dockerfile
#指定基于的基础镜像
FROM ubuntu:22.04
#维护者信息
MAiNTAINER zengshun <15272782842@163.com>
#运行shell脚本或命令
RUN apt-get update && apt-get install -y software-properties-common
RUN apt-get update && add-apt-repository ppa:ondrej/php
RUN apt-get update && apt-get install -y php8.0 php8.0-mcrypt php8.0-mbstring php8.0-curl php8.0-cli php8.0-mysql php8.0-gd php8.0-intl php8.0-xsl php8.0-zip php8.0-fpm
RUN sed -i 's@;daemonize = yes@daemonize = no@g' /etc/php/8.0/fpm/php-fpm.conf
RUN service php8.0-fpm start
#要与主机共享的目录。也可以在docker run 命令中使用 -v选项进行设置。例如,-v/root/data:/data将主>机的/root/data目录连接到Docker容器的/data目录。
#VOLUME ["/var/www/html"]
#为CMD中设置的可执行文件设置运行目录。
#WORKDIR /var/www/html
#与主机相连的端口号
#EXPOSE 9000
#指定容器启动时执行的文件或shell脚本
CMD ["/usr/sbin/php-fpm8.0", "-F"]
运行项目
# 构建并保持后台运行
sudo docker-compose up -d --build
# 不构建保持后台运行
sudo docker-compose up -d
部署文件夹目录
更多
-
通过nginx配置文件中的fastcgi_pass php-8.0:9000切换不同的php版本。
-
或者可以添加一些
hosts
到系统里面,然后通过nginx配置多个站点同时访问不同版本的php。hosts文件地址:Linux & Mac 是在
/etc/hosts
, Windows是在C:\Windows\System32\drivers\etc
.127.0.0.1 www.site1.com 127.0.0.1 www.site2.com 127.0.0.1 www.site3.com