使用 docker-compose 快速搭建 Hyperf + Redis 开发环境

0x00: 为什么要使用docker-compose搭建开发环境

  • 使用线上环境镜像, 开发环境与线上环境保持一致, 包括PHP版本, Swoole版本以及各种扩展版本

  • 无需手动安装PHP和Swoole等运行环境

  • 跨Windows / Linux / macOS部署

  • 无需手动安装Redis

0x01: 准备工作

  • 安装Docker

  • 确认本机9501端口没有占用(lsof -i :9501)

  • 确认本机6379端口没有占用(lsof -i :6379)

0x02: docker-compose.yaml

version: "3.7"
services:
  redis:
    image: redis
    container_name: redis
    ports:
      - 6379:6379
    volumes:
      - type: volume
        target: /data
        source: redis
  hyperf:
    image: bcycr-registry.cn-hangzhou.cr.aliyuncs.com/base/hyperf:7.4-v1
    stdin_open: true
    tty: true
    container_name: hyperf
    environment:
      REDIS_HOST: redis
      SCAN_CACHEABLE: (false)
    volumes:
      - $APP_ROOT:/opt/www
    ports:
      - 9501:9501
    links:
      - redis
    depends_on:
      - redis
volumes:
  redis: { }

0x03: 使用步骤

  • 将上面的docker-compose.yaml内容保存到本地的docker-compose.yaml中, 下例保存到/root/docker-compose.yaml

  • 将docker-compose.yaml:18行的$APP_ROOT替换为Hyperf项目的绝对路径

  • 运行docker-compose -f /root/docker-compose.yaml up -d, 注意将/root/docker-compose.yaml替换为实际的docker-compose.yaml路径

    2m@2ms-MacBook-Pro bcy-next % docker-compose -f docker-compose.yaml up -d
    Starting redis ... done
    Starting hyperf ... done
  • 运行docker ps查看正在运行的容器, 正常情况下应该看到

    2m@2ms-MacBook-Pro bcy-next % docker ps
    CONTAINER ID        IMAGE                                                           COMMAND                  CREATED             STATUS              PORTS                    NAMES
    30a8b491cad5        bcycr-registry.cn-hangzhou.cr.aliyuncs.com/base/hyperf:7.4-v1   "/bin/sh"                38 minutes ago      Up 15 minutes       0.0.0.0:9501->9501/tcp   hyperf
    7c4c6b05a251        redis                                                           "docker-entrypoint.s…"   46 minutes ago      Up 15 minutes       0.0.0.0:6379->6379/tcp   redis

    此时redis和hyperf容器都已经运行并且监听了63799501端口, 但hyperf应用并没有启动, 需要进入容器启动hyperf

  • 运行docker exec -it hyperf bash打开hyperf容器的终端, 此时可以使用php bin/hyperf.php start运行hyperf应用或者运行其它的命令

    2m@2ms-MacBook-Pro bcy-next % docker exec -it hyperf bash
    bash-5.0# php bin/hyperf.php -V
    Console Tool

0x04: 连接Redis

由于docker-compose.yaml中声明了links, 所以hyperf容器可以直接使用redis作为host连接redis, environment字段已经自动设置了REDIS_HOST环境变量, 如果.env中有REDIS_HOST需要注释掉

0x05: 宿主机访问

Redis和Hyperf容器均可以通过宿主机回环地址直接访问

2m@2ms-MacBook-Pro bcy-next % curl http://127.0.0.1:9501/healthz
ok%
2m@2ms-MacBook-Pro bcy-next % redis-cli             
127.0.0.1:6379> ping
PONG

0x06: 停止

docker-compose -f /root/docker-compose.yaml down -d

最后更新于