12-23 55 views
1.创建Dockerfile
文件名:Dockerfile.php-fpm82
FROM php:8.2-fpm
# 安装必要的依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libwebp-dev \
libxpm-dev \
libzip-dev \
libmagickwand-dev \
libicu-dev \
libxml2-dev \
libcurl4-openssl-dev \
libreadline-dev \
libonig-dev \
supervisor \
imagemagick \
net-tools \
iputils-ping \
procps \
inkscape \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# 安装PECL扩展和其他PHP扩展
RUN pecl install imagick redis apcu
RUN docker-php-ext-enable imagick redis apcu
RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp --with-xpm
RUN docker-php-ext-install -j$(nproc) gd pdo_mysql mysqli zip intl bcmath opcache mbstring xml dom curl pcntl exif
RUN docker-php-ext-enable imagick redis apcu exif
# 安装Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# 创建 www 用户和组,并确保 USER_ID 和 GROUP_ID 与宿主机一致
RUN groupadd -g 1000 www && useradd -u 1000 -g www -m www
# 创建必要的目录并设置权限
RUN mkdir -p /apps/web /var/log/php /var/lib/php /var/run/supervisor /run/php-fpm \
&& chown -R www:www /apps/web /var/log/php /var/lib/php /var/run/supervisor /run/php-fpm \
&& chown www:www /usr/local/etc/php-fpm.conf /var/lib/php \
&& chmod -R 775 /apps/web /var/log/php /var/lib/php \
&& chmod -R 777 /var/run/supervisor \
&& touch /var/log/supervisord.log && chown www:www /var/log/supervisord.log && chmod 775 /var/log/supervisord.log
# 复制配置文件
COPY ./etc/supervisord.conf /etc/supervisord.conf
USER root
# 配置Supervisor 设置 ENTRYPOINT 和 CMD
ENTRYPOINT ["/usr/bin/supervisord"]
CMD ["-n", "-c", "/etc/supervisord.conf"]
# 设置工作目录和用户
USER www
WORKDIR /apps/web/
imagemagick、inkscape 选装,根据自己需要。
2.环境变量
# Dockerfile 同级目录创建.env文件
# 项目路径,替换为你的实际项目路径
APP_PATH=/apps
PROJECT_PATH=/apps/web
DOCKER_PATH=/apps/docker
# 用户和组ID,通常用于匹配主机系统的用户和组
USER_ID=1000
GROUP_ID=1000
3.docker-compose.yml
version: '3.8'
services:
php82:
build:
context: .
dockerfile: Dockerfile.php-fpm82
args:
USER_ID: ${USER_ID:-1000}
GROUP_ID: ${GROUP_ID:-1000}
container_name: php82
volumes:
- ${PROJECT_PATH}:/apps/web
- ${DOCKER_PATH}/etc/php/php82:/usr/local/etc/php
- ${DOCKER_PATH}/logs/php/php82:/var/log/php
- ${DOCKER_PATH}/etc/supervisor/php82:/etc/supervisor/conf.d/
environment:
PHP_EXTENSION_DIR: /usr/local/lib/php/extensions/no-debug-non-zts-20200930
depends_on:
- mariadb
- redis
networks:
- docker_mynetwork
networks:
docker_mynetwork:
driver: bridge
//提前创建好目录
/apps/docker/etc/php/php82
/apps/docker/logs/php/php82
/apps/docker/etc/supervisor/php82
在/apps/docker/etc/php/php82下放置php.ini
在/apps/docker/etc/supervisor/php82 放置php-fpm进程文件,用来监听解析php文件
php-fpm脚本
www@e24a5e45dedc:/apps/web$ cat /etc/supervisor/conf.d/php-fpm.conf
[program:php-fpm]
command=/usr/local/sbin/php-fpm --nodaemonize
autostart=true
autorestart=true
user=www
stdout_logfile=/tmp/php-fpm.log
stderr_logfile=/tmp/php-fpm-error.log
启动命令
docker compose up -d