* 以下示例使用 docker-compose 命令
* 因此需要 Dockerfile 和 docker-compose.yml 文件搭配
* 以下示例假设 Dockerfile 在 php 为文件名的目录下
* php目录和 docker-compose.yml 在同一个目录下
* 另外,为了使用 xdebug 在 vscode 上 对 php 进行调试,因此需要安装 php 的 xdebug 组件, 在 Dockerfile 同目录下,增加了 tools 目录,增加了 xdebug.ini 配置文件
* 因此文件目录结构如下:
- docker-compose.yml
- php
- Dockerfile
- tools
- xdebug.ini
* 以下内容仅做参考
* php 目录下的 Dockerfile 参考内容:
FROM php:8.3-fpm
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY tools /var/tools/
# 更新安装依赖包和核心扩展
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
libxml2-dev libtidy-dev libxslt1-dev libmemcached-dev zlib1g-dev libssl-dev \
libmcrypt-dev cron vim git zip unzip libzip-dev procps telnet \
openssh-server net-tools \
libwebp-dev libxpm-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp --with-xpm \
&& docker-php-ext-install -j$(nproc) gd soap tidy xsl iconv zip \
bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm \
&& rm -rf /var/lib/apt/lists/* \
&& echo y|pecl install mcrypt redis memcached \
xdebug \
&& docker-php-ext-enable redis mcrypt memcached \
xdebug \
&& docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache \
&& rm -rf /tmp/pear/* \
&& cat /var/tools/xdebug.ini >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& cp -rf /var/tools/.netrc /root/ \
# 修改 dash 为 bash
&& ln -fs /bin/bash /bin/sh \
&& mkdir -p /var/log/php-fpm \
&& chown -R www-data:www-data /var/log/php-fpm
# 安装 Composer
ENV COMPOSER_HOME /root/composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
ENV PATH $COMPOSER_HOME/vendor/bin:$PATH
#设置镜像的工作目录
WORKDIR /data
# 设置用户权限
# 1000 需要根据宿主机的指定站点用户的 uid 对应
# 可通过 cat /etc/passwd 查看
RUN usermod -u 1000 www-data
* docker-compose.yml 中 php 的内容段参考:
php-8.3:
#设置Dockerfile路径
#由于自定义创建有点慢,因此可以选择从阿里云获取之前上传过的镜像,见image标签
#如果build和image同时存在,则会先build,然后再使用image标签中的作为镜像名字
build: ./php
#从阿里云获取镜像
#image: registry.cn-hangzhou.aliyuncs.com/24-php-nginx-redis/php-nginx-redis:docker-file_php-fpm-7.3
#设置容器间的连接配置 容器服务名:在本容器中使用的别名
links:
- redis-5.0:redis
- mysql-8.0:mysql
#文件映射
volumes:
- ../data/www:/data/www:rw
- ../data/logs/php-fpm:/var/log/php-fpm:rw
environment:
TZ: 'Asia/Shanghai'
#端口映射,9000端口不能暴露到宿主机访问,否则容易被攻击
expose:
- "9000"
#重启策略
# restart: always
command: bash -c "php-fpm"
* xdebug.ini 中的内容段参考:
xdebug.collect_params=true
xdebug.collect_return=true
xdebug.idekey=VSCODE
; get host IP
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
xdebug.mode=develop,debug,coverage
xdebug.log_level=7
xdebug.log=/var/log/php-fpm/xdebug.log
xdebug.output_dir=/var/log/php-fpm
xdebug.start_with_request=yes
xdebug.discover_client_host=true
xdebug.connect_timeout_ms=100