首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈框架,内置协程网络服务器及经常使用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以相似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield, 有相似 Go 语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等,能够用于构建高性能的Web系统、API、中间件、基础服务等等。php
忽然白话文git
使用 docker 安装 swoft 其实听起来比较怪怪的,swoft 是一套 php 框架,依赖 swoole 扩展,说 docker 安装 swoft,实际上是 docker 安装 swoft 运行所需的组件依赖和环境。github
swoft 框架运行环境所需的依赖和环境挨个安装搭建仍是须要一些时间的,好比 php 版本 >= 7.1, swoole 版本 >= 2.1, 并且还要安装 hiredis 来协助开启 swoole 的异步 redis 客户端,同时要求 swoole 开启协程模式等。redis
因此呢,为了节省咱们的时间,官方提供了一个 docker 镜像包,里面包含了 swoft 运行环境所须要的各项组件:docker
php 7.1+
swoole 2.1+ --enable-async-redis-client --enable-coroutine
composer
pecl
咱们只须要下载镜像并新建一个容器,这个容器就提供了 swoft 框架所需的全部依赖和环境,将宿主机上的 sowft 项目挂载到 swoft 镜像的工做目录 /var/www/swoft 下,就能够继续咱们的开发或生产工做了。让你从 swoft 略繁琐的依赖和环境搭建中解放出来,直接进入业务开发工做中去。shell
一开始我没理解好这个 swoft 镜像,镜像里自带的框架实际上是单纯的用来体验的,我一直误觉得要编辑镜像的 swoft 框架源码作开发....json
须要特别注意的是,sowft 镜像的 entrypoint 命令(运行初始化命令)是
ENTRYPOINT ["php", "/var/www/swoft/bin/swoft", "start"]
即 swoft 服务会随着容器而启动,这就要求咱们若是选择将宿主机上开发用的 swoft 项目挂载到容器工做目录时,需已彻底安装才能够(使用 composer 安装好各依赖)。同时容器使用 swoft服务 做为前置进程,若咱们想中止/启动来从新载入 swoft服务 时,容器也会跟随退出,这样就略有不便了。因此,为了后续开发方便,咱们应分离 swoft 服务做为容器的前台进程,使得在容器内 重启/中止 swoft 服务不影响容器自身运行。固然,若是只是单纯的体验 swoft,直接建立并启动容器便可,镜像中已有一套彻底安装的 swoft框架。
在后面咱们将给出一个只须要在宿主机上安装运维所需的 docker/docker-compose/git 便可彻底借助 swoft镜像 去部署开发或生产环境的方法(修改镜像 entrypoint 到 bash 模式,而后进入镜像后使用 composer 安装依赖,启动 swoft,充分利用镜像资源)
宿主机仍需安装基本的 php / composer(或者你把本身本地开发的项目cp过来,但这样可能会致使部分组件版本不一致,仍是提交业务代码 + composer.json + composer.lock 文件,排除 vendor 目录,在线上服务器再 composer install 一遍最为规范)
一、在宿主机建立 swoft 项目(宿主机需实安装基础的 php 环境来使用 composer)bash
composer create-project --prefer-dist swoft/swoft swoft [--dev] && cd swoft 或者 git clone git@github.com:swoft-cloud/swoft.git && cd swoft && composer install && cd swoft
二、拉取 swoft 镜像 建立 swoft 容器 并将宿主机上安装好的 swoft 项目挂载到 swoft 容器的工做目录服务器
// 拉取 swoft 镜像 // 关联本地 swoft 项目目录到镜像的项目目录(/var/www/swoft) // 映射主机 8081 端口 到 容器 80 端口 // 容器命名为 mySwoft // 守护模式启动 docker run -v $(pwd):/var/www/swoft -p 8081:80 --name mySwoft -d swoft/swoft // 查看容器是否运行 docker ps // 查看容器日志 docker logs mySwoft
三、进入 swoft 容器 shellswoole
// 交互模式执行 mySwoft 容器的 bash docker exec -it mySwoft bash // stop 会中止容器因此会退出 shell 后用 docker start mySwoft 启动就好 root@cce12db9add3:/var/www/swoft# php bin/swoft start|stop|reload // 因咱们将宿主机上的swoft项目挂载到了swoft容器的项目目录/var/www/swoft 因此后期开发修改宿主机上的项目便可 // 可使用PS的FTP同步工具
能够在 swoft 的容器 shell 里经过命令查看相应的组件版本
root@cce12db9add3:/var/www/swoft# php -v root@cce12db9add3:/var/www/swoft# php --ri swoole root@cce12db9add3:/var/www/swoft# composer -V root@cce12db9add3:/var/www/swoft# pecl -V
宿主机仍需安装基本的 php / composer(或者你把本身本地开发的项目cp过来,但这样可能会致使部分组件版本不一致,仍是提交业务代码 + composer.json + composer.lock 文件,排除 vendor 目录,在线上服务器再 composer install 一遍最为规范)
swoft 项目中是有 docker-compose.yml 文件的
version: '3' services: swoft: image: swoft/swoft:latest # build: ./ ports: - "80:80" #端口映射 volumes: - ./:/var/www/swoft # 挂载当前路径下的本地swoft项目到镜像项目路径 stdin_open: true #打开标准输出 tty: true # 打开 tty 会话 privileged: true # 给与权限 好比建立文件夹之类的 entrypoint: ["php", "/var/www/swoft/bin/swoft", "start"] # 入口启动命令 即启动 swoft 服务
使用方法天然比直接用 docker 方便些,不过依旧是要在宿主机上先建立一个 swoft 项目
一、在宿主机建立 swoft 项目(宿主机需实安装基础的 php 环境来使用 composer)
composer create-project --prefer-dist swoft/swoft swoft [--dev] && cd swoft 或者 git clone git@github.com:swoft-cloud/swoft.git && cd swoft && composer install && cd swoft
二、使用 docker-compose 来编排启动容器
编辑 docker-compose.yaml 文件 给容器自定义个名字
version: '3' services: swoft: image: swoft/swoft:latest container_name: mySwoft # 给容器自定义个名称便于管理 # build: ./ ports: - "80:80" #端口映射 volumes: - ./:/var/www/swoft # 挂载当前路径下的本地swoft项目到镜像项目路径 stdin_open: true #打开标准输出 tty: true # 打开 tty 会话 privileged: true # 给与权限 好比建立文件夹之类的 entrypoint: ["php", "/var/www/swoft/bin/swoft", "start"] # 入口启动命令 即启动 swoft 服务
# 启动容器 docker-compose up -d swoft # 查看容器是否成功运行 docker ps # 进入容器shell docker exec -it mySwoft bash
前面两种部署 swoft 的方法都须要在宿主机上安装 php 基础环境来使用 composer 安装好本地 swoft 项目的依赖组件,才能与 swoft 镜像的工做目录挂载,启动容器(由于容器的入口命令就是直接启动 swoft,若是咱们挂载本地未安装好依赖的 swoft 项目到镜像工做目录,那容器就会启动失败退出了),下面咱们介绍一种不须要在宿主机上安装 php / composer 的方法。
一、拉取 swoft(拉取就好,不须要安装依赖)
git clone git@github.com:swoft-cloud/swoft.git && cd swoft
# -it 开启标准输入及终端 # --entrypoint 覆盖镜像内默认启动 swoft 服务的设定 # -d 守护模式 # 这样便使得容器在启动时会建立一个 bash 做为前置进程 而不启动 swoft 服务 docker run -it -d -p 80:80 \ -v $(pwd):/var/www/swoft \ --name mySwoft \ --entrypoint="" \ swoft/swoft bash # 启动后进入容器 docker exec -it mySwoft bash # 使用容器内的 composer 安装依赖 此时的工做目录已于宿主机的swoft项目关联 compose intall [--no-dev] # 启动 swoft php bin/swoft start # 此时中止 swoft 也不会致使容器退出 php bin/swoft stop
编辑 docker-compose.yml 文件,开启 stdin_open(等同于docker的 -i), tty(等同于docker的 -t), entrypoint 改成 bash。
version: '3' services: swoft: container_name: mySwoft image: swoft/swoft:latest # build: ./ ports: - "8082:80" # 映射宿主机 8082 端口到 容器 80 volumes: - ./:/var/www/swoft # 将宿主机的当前项目目录挂载到容器的工做目录 /var/www/swoft stdin_open: true # 必定要开启此项 不然容器会因 bash 执行完退出 tty: true # 开启会话终端 privileged: true # entrypoint: ["php", "/var/www/swoft/bin/swoft", "start"] entrypoint: ["bash"] # 改成此命令后 启动容器时默认不会启动 swoft 因此即便框架依赖未安装 也不会影响容器启动
保存 docker-compose.yml 后启动容器
docker-compose up -d swoft
进入容器 shell 使用容器种的 composer 安装框架依赖
# 进入容器shell docker exec -it mySwoft bash # 会默认在 swoft 镜像的工做目录 /var/www/swoft 此目录以和宿主机的swoft项目目录映射在一块儿了 # 用容器内的 composer 安装依赖 composer install [--no-dev] #启动 swoft php bin/swoft start|stop|restart
这样使得宿主机彻底省去了还要事先简单安装下 php / composer 的工做,彻底利用镜像提供的现成的环境~