docker 搭建alpine下php多版本开发环境
docker-compose.yml
version: "3.3"
services:
mysql-8.0:
container_name: fyl-mysql-8.0
image: mysql:8.0
restart: always
ports:
- "3306: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: fyl-mysql-5.7
image: mysql:5.7
restart: always
ports:
- "3307: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: fyl-redis
image: redis:5.0.7
command: redis-server --requirepass zengshun2021
#command: redis-server /usr/local/etc/redis/redis.conf
restart: always
ports:
- "6379: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: fyl-php-5.6
image: php:5.6-fpm-alpine
build: ./dockerfiles/php/5.6-fpm
restart: always
ports:
- "9001:9000"
volumes:
- ./etc/php/5.6:/usr/local/etc/php
- ./var/www:/var/www/html
- /etc/localtime:/etc/localtime:ro
links:
- "mysql-8.0"
php-7.4:
container_name: fyl-php-7.4
image: php:7.4-fpm-alpine
build: ./dockerfiles/php/7.4-fpm
restart: always
ports:
- "9002:9000"
volumes:
- ./etc/php/7.4:/usr/local/etc/php
- ./var/www:/var/www/html
- /etcw/localtime:/etc/localtime:ro
links:
- "mysql-8.0"
php-8.0:
container_name: fyl-php-8.0
image: php:8.0-fpm-alpine
build: ./dockerfiles/php/8.0-fpm
restart: always
ports:
- "9000:9000"
volumes:
- ./etc/php/8.0:/usr/local/etc/php
- ./var/www:/var/www/html
- /etc/localtime:/etc/localtime:ro
links:
- "mysql-8.0"
nginx-1.26.1:
container_name: fyl-nginx
image: nginx:1.26.1-alpine
restart: always
ports:
- "80: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-8.0"
- "php-5.6"
- "php-7.4"
php5.6 Dockerfile
FROM php:5.6-fpm-alpine
#安装php5.6的拓展
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk update\
&& apk add --no-cache libmcrypt-dev freetype-dev libjpeg-turbo-dev git libpng-dev \
# libfreetype6-dev \
# libjpeg62-turbo-dev \
&& docker-php-ext-install mcrypt mysqli pdo pdo_mysql mbstring bcmath zip opcache \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.13/community/ --allow-untrusted gnu-libiconv
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php
php7.4/8.0 Dockerfile
FROM php:7.4-fpm-alpine
# FROM php:8.0-fpm-alpine
#安装php7.4的拓展
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk update \
&& apk add build-base autoconf bzip2-dev libxslt-dev freetype-dev libjpeg-turbo-dev libpng-dev zlib-dev libzip-dev icu-dev \
&& docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ \
&& docker-php-ext-install gd \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install opcache \
&& docker-php-ext-install bcmath \
&& docker-php-ext-install mysqli \
&& docker-php-ext-install zip \
&& docker-php-ext-configure intl && docker-php-ext-install intl \
#&& pecl install redis-5.3.1 \
#&& docker-php-ext-enable redis \
&& apk del build-base
运行项目
# 构建并保持后台运行
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