VSCode + Docker 的 PHP 開發環境

yongxue發表於2020-08-12

簡介

接下來我將介紹一個使用 VSCode + Docker 搭建的 PHP 開發環境,該環境可以根據每個專案的需求構建相應版本的環境。

準備環境

在搭建開發環境前需要安裝以下軟體。

  • 最新穩定版的 Docker。
  • 最新穩定版的 Visual Studio Code
  • Visual Studio Code 的外掛 Remote - Containers(在外掛欄搜尋 ms-vscode-remote.remote-containers 即可)。

Docker 下載戳這裡 Docker
Visual Studio Code 下載戳這裡 Visual Studio Code

由於我的系統是 Windows 10 專業版,所以我這裡的 Docker 安裝的是 Docker Desktop for Windows。

注意:在 Windows 系統下安裝的 Docker Desktop for Windows 需要注意設定記憶體和共享檔案,記憶體儘量不要低於 4G,共享檔案一定要設定在你專案所在的目錄或碟符下。
VSCode + Docker 的 PHP 開發環境
如我這裡所有的容器專案都放在 D:\docker 目錄下,包括資料庫。

接下來我們開始搭建 PHP 的開發環境了,先將構建環境的指令碼克隆下來 github.com/xueyong-q/docker-nginx-... 不過在構建 PHP 的環境前我們先把資料庫也構建一下,資料庫構建指令碼 github.com/xueyong-q/docker-databa...

構建資料庫環境

1) 首先將 github.com/xueyong-q/docker-databa... 資料庫構建指令碼專案克隆下來到你 Docker 設定的共享目錄或碟符下。
2) 然後在該專案下複製 .env.example 檔案為 .env 配置檔案,再設定以下配置。

MYSQL_USER           # 新建MySQL使用者名稱稱
MYSQL_PASSWORD       # 新建MySQL使用者密碼
MYSQL_ROOT_PASSWORD  # MySQL root 使用者密碼
MYSQL_CONTAINER_NAME # MySQL例項名稱
REDIS_CONTAINER_NAME # REDIS例項名稱

3) 接下來在終端 cd 到這個資料庫專案的目錄下執行 docker network create database_app 命令新增網路。
4) 新增好網路後就可以執行 docker-compose up 構建啟動容器了。
5) 容器啟動完成後就可以通過 localhost:8888 地址來使用 phpMyAdmin 管理資料庫了(在 phpMyAdmin 登入頁面的伺服器登入項應該使用上面配置的“MySQL例項名稱”),或者可以在主機中安裝資料庫客戶端使用 localhost:3306 來訪問資料,使用 localhost:6379 來訪問 Redis。

如果其它容器中需要訪問資料庫或 Redis 可以將容器新增到上面新增的 database_app 網路中,然後使用資料庫或 Redis 容器例項名稱 + 埠號來訪問對應的服務。

需要更換資料庫的版本可以修改 docker-compose.yml 檔案中的 image 配置項,該配置項是配置你需要拉取的映象名稱,可以到 hub.docker.com 查詢你需要的映象名稱。

提醒:首次構建好資料後,後面重新啟動 Docker 容器後資料庫的容器會自動啟動。

構建PHP環境

構建PHP環境也是首先將 github.com/xueyong-q/docker-nginx-... 專案克隆下來,然後使用 VSCode 開啟本專案。
開啟專案
然後選擇在容器中重新開啟。
開啟容器

待容器構建成功後就可以通過 localhost 來訪問專案了,使用 localhost/index.php 訪問 phpinfo。

注意:在構建本專案時會依賴上面資料庫專案的 database_app 網路,如果該網路名稱已改變則本專案的網路配置也需要修改,在 .devcontainer/devcontainer.json 檔案的 runArgs 配置項中修改即可。

Nginx 的配置則在 .devcontainer/nginx/conf.d 目錄中,日誌在 .devcontainer/nginx/log 目錄中。

容器的構建 Dockerfile 在 .devcontainer/php/ 目錄中,如果需要修改 PHP 的版本則可以修改該目錄下 Dockerfile 檔案中的 FROM 的映象名稱即可。

本專案預設安裝以下應用和版本。

應用 版本
PHP 7.3
Nginx 1.18
Node 14.x
Yarn 1.22

另 PHP 的 Debug 擴充套件已安裝可直接使用,使用方法如下圖,在這裡需要先啟動容器哦。
VSCode + Docker 的 PHP 開發環境
然後選擇 PHP
VSCode + Docker 的 PHP 開發環境
生成配置,這裡需要注意要將 port 的埠改為 9001,因為在 php debug 擴充套件的配置中我是配置的 9001 埠。
VSCode + Docker 的 PHP 開發環境
將配置儲存後就可以選擇斷點然後使用 F5 進行除錯了。

另還有一個小工具 jq,用於在終端解析 json 字串,如下圖。
VSCode + Docker 的 PHP 開發環境

注意事項:本專案預設一次只能開啟一個專案例項,開啟多個會有埠衝突。如果需要一次開啟多個專案例項則需要修改一下埠對映,專案埠對映在 .devcontainer/devcontainer.json 檔案的 appPort 配置項中修改,格式為 <主機埠>:<容器埠>,只需將主機埠跟換為不衝突的埠即可。

注意事項

在 Windows 下的 Docker 的共享檔案有小概率會出現問題,遇到的症狀是使用 VSCode 開啟專案進入容器後可以看到專案的目錄結構但是無法開啟檔案。解決辦法是在 Docker 容器設定中將共享的目錄或碟符刪除然後重啟 Docker 容器,重啟後再重新設定一下共享目錄或碟符即可。

還有一個問題需要注意在 Windows 下的 Docker 中,專案掛載在容器中的檔案許可權是 777 且使用者是 root,在這個環境下專案不會遇到檔案許可權問題,但是專案到了 Linux 的 Docker 或者是 Windows + wsl2 + Docker 的環境中就可能會出現許可權問題,因為在這兩個環境中掛載的檔案許可權是 755 使用者是我們指定的所屬使用者,如果沒有指定則預設也是 root,不過上面專案的許可權已處理好不用擔心。

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

相關文章