在上篇文章中说了在linux环境下安装php8.2以及swoole扩展的问题,只是很多时候我们的环境都是在windows下进行的,但是在windows中安装swoole太麻烦了。这时候就到了我们的docker出场的时候了。
首先docker的安装,这个网上到处都是,就不多赘述了,贴一个docker官网地址:https:docker.com,顺便贴一个安装docker的---文档
下面正式开始,首先创建一个基于docker的项目目录,比如docker_hyperf,暂定目录结构如下:
-docker_hyperf --php ---Dockerfile --nginx --mysql --redis --project --docker-compose.yaml
首先来编写php目录下的Dockerfile,根据hyperf框架的要求,我们需要配置以下php版本以及扩展:(hyperf文档)
PHP >= 8.0 以下任一网络引擎 Swoole PHP 扩展 >= 4.5,并关闭了 Short Name Swow PHP 扩展 JSON PHP 扩展 Pcntl PHP 扩展(仅在 Swoole 引擎时) OpenSSL PHP 扩展(如需要使用到 HTTPS) PDO PHP 扩展 (如需要使用到 MySQL 客户端) Redis PHP 扩展 (如需要使用到 Redis 客户端) Protobuf PHP 扩展 (如需要使用到 gRPC 服务端或客户端)
所以开始编写Dockerfile:
FROM php:8.2-fpm RUN apt-get update -y && apt-get upgrade -y RUN pecl install redis && docker-php-ext-enable redis RUN pecl install swoole && docker-php-ext-enable swoole && echo 'swoole.use_shortname=Off'>> /usr/local/etc/php/conf.d/docker-php-ext-swoole.ini RUN pecl install protobuf && docker-php-ext-enable protobuf RUN docker-php-ext-install pcntl && docker-php-ext-configure pcntl EXPOSE 9000
因为php8.2-fpm已经默认带有json openssl pdo等扩展,所以我们只需要安装redis、swoole、pcntl、protobuf等扩展。
编写是否成功,我们进入到php目录下,进行一次build:
cd php docker build .
执行上述命令后就会进行编译,编译完成后我们可以查看编译后的镜像:
docker image ls
如果编译成功后,我们会看到一个tag为none的镜像,为了方便使用,我们可以给他命名一个名字:
docker tag XXX php8 #xxx为镜像id前三位
在这儿,有一个问题,这边是以本地环境已经安装过composer作为前提的,如果本地没有composer,这时候需要在php中的Dockerfile中加入以下命令:
RUN apt-get install zlib1g-dev libzip-dev zip -y && docker-php-ext-install zip && docker-php-ext-enable zip #如果前面没有安装zip扩展,这儿需要安装,安装了请忽略 RUN curl -fsSL https://getcomposer.org/installer | php && chmod +x composer.phar && mv composer.phar /usr/local/bin/composer #composer安装 RUN cd /var/www && composer create-project hyperf/hyperf-skeleton hyperf -n
现在就是docker-compose.yaml文件的编写了:
version: '3.8' networks: default: driver: bridge services: php: build: ./php tty: true container_name: php8 ports: - '9000:9000' volumes: - ./src:/var/www/hyperf networks: - default nginx: image: nginx:latest tty: true restart: unless-stopped volumes: - ./nginx/conf/default.conf:/etc/nginx/conf.d/default.conf ports: - '8080:80' networks: - default mysql: image: mysql:latest container_name: mysql8 environment: TZ: Aisa/Shanghai MYSQL_DATABASE: hyperf_data MYSQL_USER: 'hyperf_user' MYSQL_PASSWORD: 'hyperf' MYSQL_ROOT_PASSWORD: 'root' restart: always tty: true ports: - '3307:3306' networks: - default redis: image: redis:latest container_name: redis5 ports: - '6308:6309' volumes: - ./redis/data:/data networks: - default
大功告成。执行:
docker compose up
运行以后没有报错,可以通过"docker container ls"查看启动的容器。
是不是发现在docker里面做这些操作很简单。
标签:PHP,RUN,swole,hyperf,&&,docker,php From: https://www.cnblogs.com/liusuifeng/p/17475837.html