文中一定支持系统版本: CentOs7/MacOs10
1.创建php7的镜像文件
Dockerfile内容如下:
FROM php:7.3.8-fpm
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak \
&& echo 'deb http://mirrors.aliyun.com/debian/ buster main non-free contrib' > /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/debian-security buster/updates main' >> /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib' >> /etc/apt/sources.list \
&& echo 'deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib' >> /etc/apt/sources.list \
&& apt-get update \
&& apt-get install -y vim \
&& apt-get install -y libzip-dev \
&& apt-get install -y librabbitmq-dev \
&& export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" \
&& apt-get install -y --no-install-recommends libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmagickwand-dev libmcrypt-dev libmemcached-dev zlib1g-dev \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm iconv gd\
&& pecl install imagick-3.4.4 mcrypt-1.0.2 memcached-3.1.3 redis-5.0.2 swoole-4.4.3 grpc-1.26.0 protobuf-3.11.2 zip-1.15.5 amqp-1.9.4 mongodb-1.6.1 \
&& docker-php-ext-enable imagick mcrypt memcached redis swoole grpc protobuf zip amqp mongodb \
&& docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache
RUN php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" \
&& php composer-setup.php \
&& php -r "unlink('composer-setup.php');" \
&& mv composer.phar /usr/local/bin/composer
LABEL Author="HiZheng"
LABEL Version="2020.02.20"
LABEL Description="PHP 7.3.8 开发环境镜像. "
制作镜像:
docker build -t hizheng/php7:v1 .
制作完成!
注意点:
- 其中将镜像环境的源改为了国内的,否则你懂的的原因安装扩展太慢了;
- 安装了一些我需要的php扩展,你可以酌情调整;
- 注意debian源的版本,用的是buster 关于debian发行版本参阅link
2. 使用docker-composer统一管理服务
我的站点挂载目录: /var/web/site-master
我的服务配置路径: /var/server/php_nginx/group1
nginx容器配置的挂载目录: /var/server/php_nginx/group1/nginx
php容器配置的挂载目录: /var/server/php_nginx/group1/php
创建文件: /var/server/php_nginx/group1/docker-compose.yml
写入配置如下:
version: '2'
services:
nginx:
container_name: local-nginx1
image: 'nginx'
ports:
- "80:80"
volumes:
- /var/web/site-master:/usr/share/nginx/html
- /var/server/php_nginx/group1/nginx:/etc/nginx
- /var/server/php_nginx/group1/logs/nginx:/var/log/nginx
networks:
web:
ipv4_address: 192.168.2.1
dns: 223.5.5.5
environment:
TZ: 'Asia/Shanghai'
restart: always
php:
container_name: local-php1
image: 'hizheng/php7:v1'
ports:
- "9000:9000"
volumes:
- /var/web/site-master:/var/www/html
- /var/server/php_nginx/group1/php/etc:/usr/local/etc
- /var/server/php_nginx/group1/logs/php:/var/log/php
networks:
web:
ipv4_address: 192.168.2.2
environment:
TZ: 'Asia/Shanghai'
restart: always
networks:
web:
driver: 'bridge'
ipam:
config:
- subnet: 192.168.2.0/24
gateway: 192.168.2.254
注意点:
- 需要配置在一个网段之中,我选择是192.168.2.x网段;
- 这里挂载的路径,nginx 和 php容器中是不一样的,但是站点是一个站点,后续配置ngxin需要用到;
启动服务:
docker-compse up
会自动生成一些配置文件,我们此时中断服务;开始编辑文件;
3.编辑配置
编辑nginx配置
vim /var/server/php_nginx/group1/nginx/conf.d/default.conf
更改如下:
server {
listen 80;
server_name testwebname.com;
access_log /var/log/nginx/web.access.log;
error_log /var/log/nginx/web.error.log;
location / {
root /usr/share/nginx/html/html;
index index.php;
}
location ~ \.php$ {
if ($request_uri ~ ^(.+\.php)(/.+?)($|\?)) {}
root /var/www/html;
fastcgi_pass 192.168.2.2:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
include fastcgi_params;
}
}
需要编辑php.ini 请编辑文件: /var/server/php_nginx/group1/php/etc/php/php.ini
4运行程序
执行命令,设置为守护进程运行模式;
docker-compse up -d
安装完毕!