在docker环境下配置php以及swole并创建hyperf项目

发布时间 2023-06-12 18:43:27作者: 秋江月

在上篇文章中说了在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里面做这些操作很简单。