摘要:所以呢,為了節(jié)省我們的時間,官方提供了一個鏡像包,里面包含了運行環(huán)境所需要的各項組件我們只需要下載鏡像并新建一個容器,這個容器就提供了框架所需的所有依賴和環(huán)境,將宿主機上的項目掛載到鏡像的工作目錄下,就可以繼續(xù)我們的開發(fā)或生產工作了。
Swoft
首個基于 Swoole 原生協(xié)程的新時代 PHP 高性能協(xié)程全棧框架,內置協(xié)程網(wǎng)絡服務器及常用的協(xié)程客戶端,常駐內存,不依賴傳統(tǒng)的 PHP-FPM,全異步非阻塞 IO 實現(xiàn),以類似于同步客戶端的寫法實現(xiàn)異步客戶端的使用,沒有復雜的異步回調,沒有繁瑣的 yield, 有類似 Go 語言的協(xié)程、靈活的注解、強大的全局依賴注入容器、完善的服務治理、靈活強大的 AOP、標準的 PSR 規(guī)范實現(xiàn)等等,可以用于構建高性能的Web系統(tǒng)、API、中間件、基礎服務等等。
Swoft 的 Docker 鏡像突然白話文
使用 docker 安裝 swoft 其實聽起來比較怪怪的,swoft 是一套 php 框架,依賴 swoole 擴展,說 docker 安裝 swoft,其實是 docker 安裝 swoft 運行所需的組件依賴和環(huán)境。
swoft 框架運行環(huán)境所需的依賴和環(huán)境挨個安裝搭建還是需要一些時間的,比如 php 版本 >= 7.1, swoole 版本 >= 2.1, 而且還要安裝 hiredis 來協(xié)助開啟 swoole 的異步 redis 客戶端,同時要求 swoole 開啟協(xié)程模式等。
所以呢,為了節(jié)省我們的時間,官方提供了一個 docker 鏡像包,里面包含了 swoft 運行環(huán)境所需要的各項組件:
php 7.1+
swoole 2.1+ --enable-async-redis-client --enable-coroutine
composer
pecl
我們只需要下載鏡像并新建一個容器,這個容器就提供了 swoft 框架所需的所有依賴和環(huán)境,將宿主機上的 sowft 項目掛載到 swoft 鏡像的工作目錄 /var/www/swoft 下,就可以繼續(xù)我們的開發(fā)或生產工作了。讓你從 swoft 略繁瑣的依賴和環(huán)境搭建中解放出來,直接進入業(yè)務開發(fā)工作中去。
一開始我沒理解好這個 swoft 鏡像,鏡像里自帶的框架其實是單純的用來體驗的,我一直誤以為要編輯鏡像的 swoft 框架源碼做開發(fā)....
需要特別注意的是,sowft 鏡像的 entrypoint 命令(運行初始化命令)是
ENTRYPOINT ["php", "/var/www/swoft/bin/swoft", "start"]
即 swoft 服務會隨著容器而啟動,這就要求我們如果選擇將宿主機上開發(fā)用的 swoft 項目掛載到容器工作目錄時,需已完全安裝才可以(使用 composer 安裝好各依賴)。同時容器使用 swoft服務 作為前置進程,若我們想停止/啟動來重新載入 swoft服務 時,容器也會跟隨退出,這樣就略有不便了。所以,為了后續(xù)開發(fā)方便,我們應分離 swoft 服務作為容器的前臺進程,使得在容器內 重啟/停止 swoft 服務不影響容器自身運行。當然,如果只是單純的體驗 swoft,直接創(chuàng)建并啟動容器即可,鏡像中已有一套完全安裝的 swoft框架。
在后面我們將給出一個只需要在宿主機上安裝運維所需的 docker/docker-compose/git 即可完全借助 swoft鏡像 去部署開發(fā)或生產環(huán)境的方法(修改鏡像 entrypoint 到 bash 模式,然后進入鏡像后使用 composer 安裝依賴,啟動 swoft,充分利用鏡像資源)Docker 部署 swoft
宿主機仍需安裝基本的 php / composer(或者你把自己本地開發(fā)的項目cp過來,但這樣可能會導致部分組件版本不一致,還是提交業(yè)務代碼 + composer.json + composer.lock 文件,排除 vendor 目錄,在線上服務器再 composer install 一遍最為規(guī)范)
1、在宿主機創(chuàng)建 swoft 項目(宿主機需實安裝基礎的 php 環(huán)境來使用 composer)
composer create-project --prefer-dist swoft/swoft swoft [--dev] && cd swoft 或者 git clone [email protected]:swoft-cloud/swoft.git && cd swoft && composer install && cd swoft
2、拉取 swoft 鏡像 創(chuàng)建 swoft 容器 并將宿主機上安裝好的 swoft 項目掛載到 swoft 容器的工作目錄
// 拉取 swoft 鏡像 // 關聯(lián)本地 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
3、進入 swoft 容器 shell
// 交互模式執(zhí)行 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 所以后期開發(fā)修改宿主機上的項目即可 // 可以使用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 -VDocker Composer 部署 Swoft
宿主機仍需安裝基本的 php / composer(或者你把自己本地開發(fā)的項目cp過來,但這樣可能會導致部分組件版本不一致,還是提交業(yè)務代碼 + composer.json + composer.lock 文件,排除 vendor 目錄,在線上服務器再 composer install 一遍最為規(guī)范)
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 # 給與權限 比如創(chuàng)建文件夾之類的 entrypoint: ["php", "/var/www/swoft/bin/swoft", "start"] # 入口啟動命令 即啟動 swoft 服務
使用方法自然比直接用 docker 方便些,不過依舊是要在宿主機上先創(chuàng)建一個 swoft 項目
1、在宿主機創(chuàng)建 swoft 項目(宿主機需實安裝基礎的 php 環(huán)境來使用 composer)
composer create-project --prefer-dist swoft/swoft swoft [--dev] && cd swoft 或者 git clone [email protected]:swoft-cloud/swoft.git && cd swoft && composer install && cd swoft
2、使用 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 # 給與權限 比如創(chuàng)建文件夾之類的 entrypoint: ["php", "/var/www/swoft/bin/swoft", "start"] # 入口啟動命令 即啟動 swoft 服務
# 啟動容器 docker-compose up -d swoft # 查看容器是否成功運行 docker ps # 進入容器shell docker exec -it mySwoft bash在未安裝 PHP 環(huán)境的宿主機上部署 swoft
前面兩種部署 swoft 的方法都需要在宿主機上安裝 php 基礎環(huán)境來使用 composer 安裝好本地 swoft 項目的依賴組件,才能與 swoft 鏡像的工作目錄掛載,啟動容器(因為容器的入口命令就是直接啟動 swoft,如果我們掛載本地未安裝好依賴的 swoft 項目到鏡像工作目錄,那容器就會啟動失敗退出了),下面我們介紹一種不需要在宿主機上安裝 php / composer 的方法。
1、拉取 swoft(拉取就好,不需要安裝依賴)
git clone [email protected]:swoft-cloud/swoft.git && cd swoft直接使用 docker 鏡像
# -it 開啟標準輸入及終端 # --entrypoint 覆蓋鏡像內默認啟動 swoft 服務的設定 # -d 守護模式 # 這樣便使得容器在啟動時會創(chuàng)建一個 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項目關聯(lián) compose intall [--no-dev] # 啟動 swoft php bin/swoft start # 此時停止 swoft 也不會導致容器退出 php bin/swoft stop使用 docker-compose
編輯 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 執(zhí)行完退出 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 的工作,完全利用鏡像提供的現(xiàn)成的環(huán)境~
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/27625.html
摘要:所以呢,為了節(jié)省我們的時間,官方提供了一個鏡像包,里面包含了運行環(huán)境所需要的各項組件我們只需要下載鏡像并新建一個容器,這個容器就提供了框架所需的所有依賴和環(huán)境,將宿主機上的項目掛載到鏡像的工作目錄下,就可以繼續(xù)我們的開發(fā)或生產工作了。 Swoft 首個基于 Swoole 原生協(xié)程的新時代 PHP 高性能協(xié)程全??蚣?,內置協(xié)程網(wǎng)絡服務器及常用的協(xié)程客戶端,常駐內存,不依賴傳統(tǒng)的 PHP-...
摘要:即異步非阻塞,,事件驅動。優(yōu)雅的注解聲明,容器,嚴格遵循規(guī)范。鏡像的主要用途官方提供了基于的鏡像。鏡像中已安裝配置好運行的所需組件及依賴。修改鏡像的使得容器啟動時不同時啟動服務,這就不需要要求我們掛載的本地項目必須完全安裝好依賴了。 之前有寫過一篇 Docker 安裝部署 Swoft 的文章,但有些冗余混亂,故重寫作為教程的開篇。要不讀讀看? Swoft項目:https://gith...
摘要:即異步非阻塞,,事件驅動。優(yōu)雅的注解聲明,容器,嚴格遵循規(guī)范。鏡像的主要用途官方提供了基于的鏡像。鏡像中已安裝配置好運行的所需組件及依賴。修改鏡像的使得容器啟動時不同時啟動服務,這就不需要要求我們掛載的本地項目必須完全安裝好依賴了。 之前有寫過一篇 Docker 安裝部署 Swoft 的文章,但有些冗余混亂,故重寫作為教程的開篇。要不讀讀看? Swoft項目:https://gith...
摘要:前言是一個在之上構建的一個高性能協(xié)程全??蚣埽诶锩媸且粋€高級技能,所以在相關的環(huán)境安裝上也給許多人造成了很大的困擾,更是如此,本文將通過以一種極其簡單的方式解決運行環(huán)境和開發(fā)環(huán)境的部署。 showImg(https://segmentfault.com/img/bVbeknK?w=512&h=197); 本系列文章將從使用層面介紹 Swoft 框架的使用及業(yè)務開發(fā),面向初中級的 P...
摘要:源碼解讀系列一好難都跑不起來怎么破了解一下唄閱讀框架源碼第一步搞定環(huán)境小伙伴剛接觸的時候會感覺壓力有點大更直觀的說法是難開發(fā)組是不贊成難這個說法的的代碼都是實現(xiàn)的而又是世界上最好的語言的代碼閱讀起來是很輕松的開發(fā)組會用源碼解讀系列博客深 date: 2018-8-01 14:22:17title: swoft| 源碼解讀系列一: 好難! swoft demo 都跑不起來怎么破? doc...
閱讀 1644·2021-10-09 09:44
閱讀 2804·2021-10-08 10:04
閱讀 2475·2021-09-26 09:55
閱讀 3854·2021-09-22 10:02
閱讀 3315·2019-08-29 17:08
閱讀 1075·2019-08-29 15:08
閱讀 2963·2019-08-26 13:52
閱讀 3279·2019-08-26 13:34