最近有两个项目需要使用PHP进行实现。
本文仅作关键步骤和基本原理记录
开发环境使用DockerComposer进行构建,分为两个容器。
- Nginx
- PHP-FPM
Nginx通过Docker容器编排内网调用PHP-FPM
Nginx、PHP配置以及代码通过挂载方式挂入
version: '3'
services:
nginx:
image: nginx:latest
ports:
- 80:80
volumes:
- ${NGINX_LOG}:/var/log/nginx
- ${NGINX_WWWROOT}:/var/www/html
- ${NGINX_CONFIG}:/etc/nginx
restart: always
phpfpm:
build: ./php
ports:
- 9000:9000
- 9001:9001
volumes:
- ${PHP_CONFIG}:/usr/local/etc/php
- ${NGINX_WWWROOT}:/var/www/html
restart: always
.env
NGINX_LOG=./nginx/log/ NGINX_WWWROOT=./nginx/wwwroot/ NGINX_CONFIG=./nginx/conf/ PHP_CONFIG=./php/conf/ # config文件夹需要提前使用docker cp备一份在宿主机,否则容器启动时不会自动创建。dockerfile(phpfpm)
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
&& 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 xdebug-2.7.2 swoole-4.4.3
&& docker-php-ext-enable imagick mcrypt memcached redis xdebug swoole
&& docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache
RUN cd /tmp
&& php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
&& php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
&& php composer-setup.php
&& php -r "unlink('composer-setup.php');"
&& mv composer.phar /usr/local/bin/composer



