国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Swoft 新手向教程 - 通過 Docker 搭建一個開發環境

tinysun1234 / 743人閱讀

摘要:前言是一個在之上構建的一個高性能協程全棧框架,而在里面是一個高級技能,所以在相關的環境安裝上也給許多人造成了很大的困擾,更是如此,本文將通過以一種極其簡單的方式解決運行環境和開發環境的部署。

本系列文章將從使用層面介紹 Swoft 框架的使用及業務開發,面向初中級的 PHPer

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
        entrypoint: ["php", "/var/www/swoft/bin/swoft", "start"]

這是一個相對簡單的編排文件,僅僅只有 swoft 一個服務,也沒有關聯過多的內容,關于 docker-compose.yml 的文件格式我們這里不做過多的解釋,可自行查找相關的內容進行閱讀理解。
簡單的解讀此文件的內容可以理解為,使用了swoft/swoft官方鏡像并設置了容器名稱為swoft,綁定容器內的80端口與宿主機的80端口,設置./當前目錄與容器內的/var/www/swoft目錄為共享目錄,開啟與容器的交互式終端并于啟動編排文件時啟動Swoft服務。
我們可以注意到默認編排文件上的 entrypoint 配置了 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) ,我們可以利用這兩個參數,并將編排文件的 entrypoint 行改為 entrypoint: ["sh"] ,使容器啟動后不是直接啟動 Swoft 服務,而是由我們手動通過 交互式終端(terminal) 進入容器內去啟動。(注意Swoft官方已將入口從 command 改為了 entrypoint,本文已做對應的更新)
下面是一個更改后的 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
        entrypoint: ["sh"]
啟動開發環境容器

此時我們在編排文件的所在目錄啟動一個 終端(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"
進入開發環境容器

通過執行 docker ps 命令可以查看啟動的容器信息,下面為示例信息:

CONTAINER ID  IMAGE               COMMAND                 CREATED             STATUS             PORTS               NAMES
f22173763374  swoft/swoft:latest  "docker-php-entrypoin"  About a minute ago  Up About a minute  0.0.0.0:80->80/tcp  swoft

得知 容器ID(Container ID)f22173763374容器名稱(Container Name)swoft,我們可以執行 docker exec -it f22173763374 bashdocker exec -it swoft bash 通過 交互式終端(terminal) 進入到容器內。

如執行時報錯 the input device is not a TTY. If you are using mintty, try prefixing the command with "winpty",可在 docker exec 命令前面增加 winpty 命令解決,即 winpty docker exec -it swoft bash

運行以及開發調試 安裝 Composer 依賴及生成自動加載(Autoload)文件

通過 docker exec 命令進入容器后,我們留意到光標左側的內容變為 root@f22173763374: 即為已進入容器內,其中 f22173763374 為對應的 容器ID(Container ID)
由于 Swoft 官方鏡像 swoft/swoft 配置的工作目錄為 /var/www/swoft,而 docker-compose.yml 又將項目當前目錄關聯了容器 /var/www/swoft 目錄,即通過 docker exec 進入的目錄已經為 /var/www/swoft 目錄,即項目目錄,所以我們可以直接執行 composer install 命令來加載 Composer 的依賴并生成 自動加載(Autoload) 文件。
考慮到國內的網絡環境,我們在執行 composer install 命令前可以先執行 composer config -g repo.packagist composer https://packagist.phpcomposer.com 命令配置 Composer 中國鏡像源 加速安裝速度(由于近期Packagist中國鏡像源一直處于不可用狀態,建議轉至Laravel-China中國源,即 config -g repo.packagist composer https://packagist.laravel-china.org)。

啟動 Swoft 服務

安裝完 Composer 依賴后,便可以執行 php bin/swoft start 啟動服務了,當你看到

root@f22173763374:/var/www/swoft# php bin/swoft start
                         Server Information
********************************************************************
* HTTP | host: 0.0.0.0, port: 80, type: 1, worker: 1, mode: 3
* TCP  | host: 0.0.0.0, port: 8099, type: 1, worker: 1 (Enabled)
********************************************************************
Server has been started. (master PID: 15, manager PID: 16)
You can use CTRL + C to stop run.

即意味著你的 Swoft 以及啟動成功了,我們可以打開瀏覽器訪問一下 http://127.0.0.1:80,當你看到下圖即大功告成了!

如果你綁定宿主機的端口不是80,則改成對應的即可;
如果訪問看到的是 Redis connection failure host=127.0.0.1 port=6379 則說明缺少 Redis 服務,最簡單直接的就是直接在當前容器內安裝 Redis Server,直接執行 apt install -y redis-server && service redis-server start 即可完成安裝以及啟動操作了;

修改代碼并使代碼生效

SwoftPHP-FPM 模式下的開發會有一點差異,在PHP-FPM模式下直接改變代碼內容,再訪問對應的代碼便能得到變更后的內容,是因為PHP-FPM模式下每一次請求都會重新加載PHP代碼,而 Swoft持久化運行的,也就意味著代碼在服務啟動之后,接受的請求都無需重新加載,這個模式的變化可以使得 Swoft 的大量代碼可被重復使用,而無需重新加載和重新實例化,大大提升性能的其中一點原因之一。
這樣的變更對開發會造成一定程度的影響,也就是說在 Swoft 下,你需要 重啟 Worker重啟服務 才能使變更的代碼生效,但是得益于 Swoft熱重載 功能,可以自動檢查代碼變更并自動 重啟 Worker,我們只需通過項目根目錄下的 .env 文件更改 AUTO_RELOAD 項為 true 即可,如項目根目錄下沒有 .env 文件,可直接復制 .env.example 文件為 .env 并作出對應的更改即可,有一點需要注意的是僅在改變 app 目錄下的代碼才會被 熱重載 功能重載,改變其它代碼不會被重載,這是由于不同代碼是處于不同的生命周期導致的,僅 WorkerStart 之后加載的代碼才能被重載,關于這部分的內容我們將在后續涉及到 Swoft 的生命周期 時再做進一步的講解。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29119.html

相關文章

  • 使用 Docker / Docker Compose 部署 Swoft 應用

    摘要:所以呢,為了節省我們的時間,官方提供了一個鏡像包,里面包含了運行環境所需要的各項組件我們只需要下載鏡像并新建一個容器,這個容器就提供了框架所需的所有依賴和環境,將宿主機上的項目掛載到鏡像的工作目錄下,就可以繼續我們的開發或生產工作了。 Swoft 首個基于 Swoole 原生協程的新時代 PHP 高性能協程全棧框架,內置協程網絡服務器及常用的協程客戶端,常駐內存,不依賴傳統的 PHP-...

    gplane 評論0 收藏0
  • 使用 Docker / Docker Compose 部署 Swoft 應用

    摘要:所以呢,為了節省我們的時間,官方提供了一個鏡像包,里面包含了運行環境所需要的各項組件我們只需要下載鏡像并新建一個容器,這個容器就提供了框架所需的所有依賴和環境,將宿主機上的項目掛載到鏡像的工作目錄下,就可以繼續我們的開發或生產工作了。 Swoft 首個基于 Swoole 原生協程的新時代 PHP 高性能協程全棧框架,內置協程網絡服務器及常用的協程客戶端,常駐內存,不依賴傳統的 PHP-...

    chaos_G 評論0 收藏0
  • Swoft 系列教程:(1)使用 Docker 安裝部署 Swoft

    摘要:即異步非阻塞,,事件驅動。優雅的注解聲明,容器,嚴格遵循規范。鏡像的主要用途官方提供了基于的鏡像。鏡像中已安裝配置好運行的所需組件及依賴。修改鏡像的使得容器啟動時不同時啟動服務,這就不需要要求我們掛載的本地項目必須完全安裝好依賴了。 之前有寫過一篇 Docker 安裝部署 Swoft 的文章,但有些冗余混亂,故重寫作為教程的開篇。要不讀讀看? Swoft項目:https://gith...

    宋華 評論0 收藏0
  • Swoft 系列教程:(1)使用 Docker 安裝部署 Swoft

    摘要:即異步非阻塞,,事件驅動。優雅的注解聲明,容器,嚴格遵循規范。鏡像的主要用途官方提供了基于的鏡像。鏡像中已安裝配置好運行的所需組件及依賴。修改鏡像的使得容器啟動時不同時啟動服務,這就不需要要求我們掛載的本地項目必須完全安裝好依賴了。 之前有寫過一篇 Docker 安裝部署 Swoft 的文章,但有些冗余混亂,故重寫作為教程的開篇。要不讀讀看? Swoft項目:https://gith...

    psychola 評論0 收藏0
  • Swoft| Swoft官網全站 HTTP2 實踐

    摘要:官網全站實踐正式來襲也迎來自己的一個里程碑數正式突破官網作為項目組服務開發者們的重要渠道也迎來了自己的一次重大更新重構升級到全站實現本篇先介紹官網全站實踐先來一張官網效果圖鎮樓靜態資源由托管開啟業務代碼交由執行設置使用協議要實現非常簡單 date: 2018-3-8 13:50:03title: Swoft| Swoft官網全站 HTTP2 實踐 Swoft1.0正式來襲, Swoft...

    stdying 評論0 收藏0

發表評論

0條評論

tinysun1234

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<