加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

如何通过Docker搭建一个swoft开发环境

发布时间:2020-05-25 08:25:12 所属栏目:PHP 来源:互联网
导读:本篇文章给大家分享的内容是关于如何通过Docker搭建一个swoft开发环境 ,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们。Swoft首个基于 Swoole 原生协程的新时代 PHP 高

本篇文章给大家分享的内容是关于如何通过Docker搭建一个swoft开发环境 ,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们。

Swoft
首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈组件化框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield,有类似 Go 语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等,可以用于构建高性能的Web系统、API、中间件、基础服务等等。

前言

Swoft是一个在Swoole之上构建的一个高性能协程 PHP 全栈框架,而SwoolePHPer里面是一个高级技能,所以在相关的环境安装上也给许多人造成了很大的困扰,Swoft更是如此,本文将通过Docker以一种极其简单的方式解决运行环境和开发环境的部署。

Docker

从百科上可以看到,Docker是一个开源的的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口,也可以理解为我们可以将我们的代码和运行环境打包到一个容器中,打包好的容器可以发布到任何流行的Linux机器上,这里指的Linux机器其实并不准确,得益于Docker for Windows项目和Hyper-V的发展,Docker也可以以不错的状态运行在Windows 10系统上,但笔者不建议将Docker for Windows用于生产环境上。

Docker 名词概念

这里对Docker常用的的一些名词进行简单的阐述和解释,以便新手对于下文的理解

  • DockerfileDockerfileDocker镜像的描述文件,通过docker build命令来构建成为镜像
  • 镜像(Image),通过Dockerfile构建得到,包含操作系统及运行环境
  • 容器(Container),容器是运行起来的镜像,可理解为镜像是Docker生命周期中的构建和打包阶段,而容器则是启动和执行阶段
  • 镜像仓库(Repository),用于储存构建好的Docker镜像的仓库,可理解为类似于Git的仓库

安装 Docker

Docker的安装流程并不复杂,本节将介绍LinuxWindows 10系统下的安装流程,而Mac系统上并不建议采用Docker环境来运行或开发Swoft项目,因为在Mac for Docker上共享磁盘的性能极其的差,会导致Swoft在启动阶段耗时极长。

Linux上安装Dockerdocker-compose

Linux上通过yumapt-get来 安装Docker的流程可谓是相当简单
CentOS:yum install docker -y
Ubuntu:apt-get install docker-engine -y
只需要根据系统的区别,在终端执行上面的一行命令即可完成Docker的安装,在安装完成之后我们需要执行一下service docker start命令来启动一下Docker服务。

在安装完Docker之后,我们还需要安装一下docker-compose以便于后续对 Docker 的使用
CentOS:yum install python-pip -y && pip install --upgrade pip && pip install -U docker-compose
Ubuntu:apt-get install python-pip -y && pip install --upgrade pip && pip install -U docker-compose
只需要根据系统的区别,在终端执行上面的一行命令即可完成docker-compose的安装。

Windows 10上安装Dockerdocker-compose

我们直接到 Docker 官网下载对应的安装包https://store.docker.com/edit...,非登录用户我们会看到Please Login to Download,意思是要我们先登录 Docker 账号好再下载,我们直接点击按钮到登录页面完成账号注册或登录即可在上面的链接页面通过点击Get Docker下载,注意这个账号后面我们在使用时也会用到。
下载完安装包后可直接运行安装包进行安装,整个过程可以说是傻瓜式的,持续的下一步即可,注意安装前需先开启系统的Hyper-V,开启流程相对简单可参考其它文章https://segmentfault.com/a/11... ,注意Hyper-V是与VMware是冲突的,两者不能并存,只能择其一,如果你必须要使用虚拟机的话,比如Vagrant之类的工具,亦可在虚拟机内运行一个Linux 系统,然后根据本文关于Linux 系统的安装流程处理,在虚拟机内运行Docker作为开发环境。
最新版的Docker安装包已经包含了docker-compose了,也就无需再做多余的操作。
安装完成后,重启电脑,当你看到任务栏的小鲸鱼(Docker Icon)显示着Docker is running即表示Docker启动成功了。

我们需要右键Docker,点击Sign in / Create Docker ID登录我们刚才注册的Docker ID,以便获得我们可以从 DockerHub 中获取公共镜像的权限。

由于我们是用于开发使用,所以我们还需要授权一下共享目录的权限,右键Docker并点击Settings,设置界面切换到Shared Drives,勾选你项目代码所在的磁盘盘符,并点击右下角的Apply即可完成授权。

Swoft 开发环境

修改官方默认docker-compose.yml文件

我们通过命令git clone https://github.com/swoft-cloud/swoftGithub克隆(clone)Swoft 项目,并使用项目自带的docker-compose.yml文件来实现一个用于开发的环境,docker-compose.ymldocker-compose的编排配置文件, 我们看一下官方默认文件的内容:

version: '3'

services:

    swoft:

        container_name: swoft

        image: swoft/swoft

        ports:

            - "80:80"

        volumes:

            - ./:/var/www/swoft

        stdin_open: true

        tty: true

        command: php /var/www/swoft/bin/swoft start

这是一个相对简单的编排文件,仅仅只有swoft一个服务,也没有关联过多的内容,关于docker-compose.yml的文件格式我们这里不做过多的解释,可自行查找相关的内容进行阅读理解。

简单的解读此文件的内容可以理解为,使用了swoft/swoft官方镜像并设置了容器名称为swoft,绑定容器内的80端口与宿主机的80端口,设置./当前目录与容器内的/var/www/swoft目录为共享目录,开启与容器的交互式终端并于启动编排文件时启动Swoft服务。

我们可以注意到默认编排文件上的command配置了php /var/www/swoft/bin/swoft start,也就是启动 Swoft 服务的命令,但如果仅克隆(clone)项目并执行docker-compose up来尝试启动容器的话,我们会得到一个失败的结果,因为尚未执行composer install来加载Composer的依赖而缺少vendor文件夹和autoload等相关文件,导致无法正确运行Swoft实例,我们再看默认的编排文件设置了stdin_open: truetty: true两个参数,分别对应docker命令上的-i-t两个参数,简单的理解就是-i开启了输入(input)功能,-t开启了一个连接容器里面的交互式终端(terminal),我们可以利用这两个参数,并将编排文件的command行改为command: /bin/bash,使容器启动后不是直接启动Swoft服务,而是由我们手动通过交互式终端(terminal)进入容器内去启动。

下面是一个更改后的docker-compose.yml文件实例:

version: '3'

services:

    swoft:

        container_name: swoft

        image: swoft/swoft

        ports:

            - "80:80"

        volumes:

            - ./:/var/www/swoft

        stdin_open: true

        tty: true

        command: /bin/bash

启动开发环境容器

此时我们在编排文件的所在目录启动一个终端(Shell),然后执行docker-compose up -d-d的意思是以守护模式(Daemon Mode)运行,便于我们在同一个终端(Shell)进入到容器内,命令执行后我们可以看到Starting swoft ... done即表示启动容器成功。
如果在执行启动命令时得到一下错误,则说明宿主机的80端口已经被占用了,更改docker-compose.yml文件内的80:80为其它未被占用的端口即可,注意第一个80指的是宿主机的端口,第二个80指的是容器内的端口,也就是说我们只需要更改第一个即可

ERROR: for swoft Cannot start service swoft: b'driver failed programming external connectivity on endpoint swoft(dab0f4d00620e2f5c07e33084ca5cac6f08cb48018d6b737eadc035e5aa0b597): Bind for 0.0.0.0:80 failed: port is already allocated'

进入开发环境容器

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读