乐趣区

Swoft 系列教程:(1)使用 Docker 安装部署 Swoft

之前有写过一篇 Docker 安装部署 Swoft 的文章,但有些冗余混乱,故重写作为教程的开篇。要不读读看?

Swoft 项目:https://github.com/swoft-clou…Swoft 文档:https://doc.swoft.org/Swoft 镜像:https://hub.docker.com/r/swof…
Swoft 简介
首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield, 有类似 Go 语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等,可以用于构建高性能的 Web 系统、API、中间件、基础服务等等。
即异步非阻塞 IO,EventLoop,事件驱动。cpu_num 个 worker 即可承载高并发请求,提供协程 / 异步 IO 客户端,数据库连接池,对象连接池,任务进程池。优雅的注解声明,IOC/DI 容器,严格遵循 PSR 规范。
Swoft 镜像的主要用途
Swoft 官方提供了基于 Debine 的 Docker 镜像。镜像中已安装配置好运行 Swoft 的所需组件及依赖:PHP 7.0+ / Swoole / Composer / Pecl。虽然不使用镜像从头安装部署以上几项组件也不难,但镜像内置可以开箱即用,免去了这些略繁琐的工作,让我们尽可能快的投入到 Swoft 的开发中去。
此外
Swoft 镜像与开发的配合
如果只是单纯的想快速体验 Swoft,使用 docker run -p 80:80 swoft/swoft 拉取创建容器访问即可。
如何正确的在 Swoft 项目的开发中使用镜像呢?如果是要将镜像好好利用到开发工作中,则需要清楚一下几点。

镜像内置完全安装的 Swoft 框架,但它只是用来快速演示的,并不是要你拿去修改,开发还是要对本地的 Swoft 项目开发。
我们应该做的是将本地的 Swoft 框架 挂载到镜像的工作目录 /var/www/swoft 从而替换掉镜像自带的,这样启动 Swoft 服务 就会启动映射到本地的 Swoft 项目了
镜像的容器启动时默认会启动 Swoft 服务 作为前置进程,这就要求我们在挂载了本地 Swoft 项目时需要保证已完全安装了各项依赖(github 拉取下来的 Swoft 源码 并没有安装库依赖,需要使用 Composer install 一下)

好像咬到尾巴了,为了开发需要挂载本地 Swoft 项目到镜像工作目录,因为容器启动时还会一并启动 Swoft 服务,所以要求挂载的本地 Swoft 项目 必须使用 Composer 安装好依赖,嗯?这不还是得在本地装 PHP + Composer 嘛,镜像不是都提供了嘛,重复劳动了。

修改 Swoft 镜像的 entrypoint 使得 Swoft 容器启动时不同时启动 Swoft 服务,这就不需要要求我们挂载的本地 Swoft 项目必须完全安装好依赖了。
容器创建好后,登入容器 sh,使用镜像内置的 Composer 安装依赖
启动 Swoft 服务

这样就能充分利用镜像内置的环境和工具,快乐的开始 Swoft 的开发了工作了,下面给出具体的实例。
Swoft 镜像的使用
前面夸赞了那么多镜像的便利之处,下面如果不完全把镜像用到极致那就不太好了 O(∩_∩)O 哈哈~
1、首先我们从 github 上拉取最新的 Swoft 源码到本地
cd ~ && git clone git@github.com:swoft-cloud/swoft.git && cd swoft
2、查看 swoft 镜像的 Dockerfile
# 在文件尾设定了 entrypoint 命令为 启动 swoft 服务
ENTRYPOINT [“php”, “/var/www/swoft/bin/swoft”, “start”]
entrypoint 就是我们后面需要改掉的参数
3、直接使用镜像创建容器
docker run \
-p 8081:80 \ #映射宿主机 808
-v $(pwd):/var/www/swoft \# 挂载本地 Swoft 项目到镜像工作目录
-it -d \ #重要 开启 stdin tty 并以 daemon 模式运行
–entrypoint=”” \# 重要 覆盖掉镜像内设定的 entrypoint 参数
–name my_swoft \# 容器命令
–privileges=true \# 赋予权限
swoft/swoft bash
4、使用 docker-compose 更为简洁
#编辑 docker-compose 编排文件
vim docker-compose.yml
#内容修改如下
version: ‘3’

services:
swoft:
image: swoft/swoft:latest
container_name: my_swoft # 给容器自定义个名称便于管理
#build: ./
ports:
– “8081:80” #端口映射
volumes:
– ./:/var/www/swoft # 挂载本地 swoft 项目到镜像工作目录
stdin_open: true #打开标准输出 -i
tty: true # 打开 tty 会话 -t
privileged: true # 给与权限 比如创建文件夹之类的
#entrypoint: [“php”, “/var/www/swoft/bin/swoft”, “start”] # 入口启动命令 即启动 swoft 服务
entrypoint: [“bash”]
创建容器
docker-compose up -d swoft ./
5、登入容器,安装依赖,开启 Swoft 服务使用 3 或 4 创建的 Swoft 容器,便以 bash 作为启动的前置进程,而非启动 Swoft 服务,我们登入容器使用内置的 Composer 安装依赖后,启动 Swoft 服务即可。
docker exec -it my_swoft bash
# 安装框架依赖
composer install
# 启动 / 停止 / 重启 Swoft 服务
php bin/swoft start|stop|restar
6、开启热重载,关闭 daemon,让框架调试信息输出到 stderr 方便开发调试编辑本地的 Swoft 项目 .env 文件
# Application
APP_DEBUG=true
# Server

AUTO_RELOAD=true

# Swoole Settings

DAEMONIZE=0

保存并重新启动 Swoft 服务

小提示:可以使用 PHPStorm IDE 配置 FTP/SFTP 文件改动自动上传的方式,开发起飞~

退出移动版