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

Linux使用lsyncd实现2个文件夹实时同步

官方文档: https://axkibe.github.io/lsyncd/download/ 1.安装 $ yum install lsyncd $ yum install rsync $ yum install libtermcap-devel ncurses-devel l...

阅读全文

firewall 防火墙常用命令

查看版本 $ firewall-cmd --version 0.4.3.3 help $ firewall-cmd --help 状态 $ firewall-cmd --state running 重载配置 $ firewall-cmd --reload 重新加载...

阅读全文

修改linux centos系统默认时区

方法一 先安装ntpdate: yum install -y ntpdate 再选择一个时间服务器来更新时间: ntpdate time.windows.com 恢复系统时间为utc时间 ln -sf /usr/share/zo...

阅读全文

欢迎留言