使用 Docker 搭建 PHP 開發環境

Macken發表於2016-09-06

Docker是十分優秀的軟體容器化平臺。它提供的容器技術將各種軟體和它們所依賴的執行環境打包成標準的可移植的container(容器)/image(映象),進而釋出到不同的平臺上執行,並且能保證專案開發和生產環境的一致性。

Why Docker ?

作為Web開發者,在Docker流行之前,要搭建開發環境通常有兩種選擇:一種是使用wamp、xampp、mamp等整合開發環境安裝包,另外一種就是使用普通虛擬機器來安裝linux伺服器,然後通過下載一鍵安裝包(如:lnmp)或者逐個安裝做需要的軟體。前者雖然簡單,但太不靈活,想要安裝額外的軟體或者版本會很麻煩或者乾脆不知道如何下手;後者除了費時費力,佔用本機資源過多,可能會導致系統執行緩慢,而且如果你忘了及時生成快照,一旦失誤,追悔莫及。

幸好,Docker來了!它簡單易用,靈活多變,方便迅捷,掃除了以上種種弊端。如果你想稍微詳細的認識下這位虛擬化界的明星,傳送門(快速理解Docker)。

安裝Docker

平時開發的環境一般都是Mac或者Windows,Linux暫時沒有研究,所以接下來只針對前兩者寫下步驟,這兩個平臺,官方都推薦了兩種安裝方式:app和toolbox。注:app方式對系統版本和配置會有一定要求,Mac版本會自動為你安裝好VM(虛擬機器),但Windows版本需要你安裝微軟虛擬化產品Hyper-V,而toolbox方式則需要你額外安裝virtualbox來作為docker的VM。

App

Toolbox

以上方式本質上都會在你的系統中安裝docker-engine、docker-machine、docker-compose和VM。因為docker高度依賴linux核心提供的cgroup,namespace 等特性和介面,所以mac和windows平臺需要使用docker-machine和虛擬機器在後臺建立執行一個linux核心。

我之前的的安裝方式就是直接在 Mac 上使用brew,但目前看來這種方式已經不再推薦,強烈推薦使用原生的app方式!

Compose你的應用

docker-compose是用於定義和執行復雜Docker應用的工具。你可以在docker-compose.yml檔案中定義一個多容器的應用,然後使用一條命令來啟動,然後所有預先定義好的操作都會被自動完成。

為了不重複造輪子,直接使用github上的第三方包。當然你也可以親自構建每一個你所需要的容器映象,然後用docker-compose.yml將所有容器組織起來執行,但這需要你具備一定的linux基礎和docker的執行機制和相關語法。

本人正在學習laradock這個基於Docker的開發環境包,然後根據自己的需要刪除了一些我認為不常用的部分、修改了部分配置以及增加了Elasticsearch容器,最終新開了自己的倉庫DevDock。當然,也推薦使用laradock。

我的倉庫目前支援的容器組合:
nginx, php-fpm, mysql, redis, memcached, elasticsearch, workspace.
注:workspace和php-fpm一般會被其他容器所依賴,所以會自動執行,啟動時不必指定。

  • 進入到你的應用的上級目錄:

    git clone https://github.com/RystLee/DevDock.git
  • 修改hosts
    如果直接安裝啟動,是可以通過127.0.0.1,就能直接訪問nginx的,但一般而言為了方便記憶,我們會去修改hosts檔案,增加一條:

    127.0.0.1 laravel.dev
  • 修改你的nginx中的站點配置檔案:
    在DevDock目錄下找到nginx,修改sites目錄下的站點配置檔案,通過修改本地的hosts來自定義域名,並在nginx容器中的sites資料夾下,修改相應的域名對映。

    server_name  laravel.dev
  • 安裝啟動應用

    cd DevDock
    docker-compose up -d nginx mysql ... # 後面跟上你想使用的容器即可

然後,耐心地等待開發環境自動搭建完成即可,如果中途出現錯誤,一般是因為GFW,網路會不太通暢,重新執行一兩次就好,完成之後,開啟瀏覽器,訪問:http://laravel.dev即可

關於該開發環境包詳細使用,請直接檢視github倉庫的說明文件即可。

本文連結: https://macken.me/article/create-php-dev-e...

宣告
在轉載或修改本文後釋出的文章中註明原文來源資訊的前提下,允許進行轉載該篇文章或經修改後釋出且不用告知本文作者。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章