博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swoft 系列教程:(1)使用 Docker 安装部署 Swoft
阅读量:6581 次
发布时间:2019-06-24

本文共 2899 字,大约阅读时间需要 9 分钟。

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

Swoft项目:

Swoft文档:
Swoft镜像:

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 文件

# ApplicationAPP_DEBUG=true# Server...AUTO_RELOAD=true...# Swoole Settings...DAEMONIZE=0...

保存并重新启动 Swoft服务

clipboard.png

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

转载地址:http://lnino.baihongyu.com/

你可能感兴趣的文章
最优化问题中黄金分割法的代码
查看>>
在JS中使用Ajax
查看>>
Jolt大奖获奖图书
查看>>
ubuntu 16.04 安装PhpMyAdmin
查看>>
安卓开启多个服务
查看>>
设置分录行按钮监听事件
查看>>
C Primer Plus 第5章 运算符、表达式和语句 5.2基本运算符
查看>>
java并发库之Executors常用的创建ExecutorService的几个方法说明
查看>>
23种设计模式(1):单例模式
查看>>
socket 编程入门教程(五)UDP原理:4、“有连接”的UDP
查看>>
Jquery获取iframe中的元素
查看>>
Laravel 学习笔记5.3之 Query Builder 源码解析(下)
查看>>
Struts2简单入门实例
查看>>
2012CSDN年度博客之星评选http://vote.blog.csdn.net/item/blogstar/xyz_lmn
查看>>
BZOJ 4037 [HAOI2015]数字串拆分 ——动态规划
查看>>
SpringBoot实战总汇--详解
查看>>
2018年7月1日笔记
查看>>
尝试使用iReport4.7(基于Ubuntu Desktop 12.04 LTS)
查看>>
动态规划:金矿模型
查看>>
子元素应该margin-top为何会影响父元素【转】
查看>>