簡介
接下來我將介紹一個使用 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,共享檔案一定要設定在你專案所在的目錄或碟符下。
如我這裡所有的容器專案都放在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 擴充套件已安裝可直接使用,使用方法如下圖,在這裡需要先啟動容器哦。
然後選擇 PHP
生成配置,這裡需要注意要將 port
的埠改為 9001,因為在 php debug 擴充套件的配置中我是配置的 9001 埠。
將配置儲存後就可以選擇斷點然後使用 F5 進行除錯了。
另還有一個小工具 jq
,用於在終端解析 json 字串,如下圖。
注意事項:本專案預設一次只能開啟一個專案例項,開啟多個會有埠衝突。如果需要一次開啟多個專案例項則需要修改一下埠對映,專案埠對映在 .devcontainer/devcontainer.json
檔案的 appPort
配置項中修改,格式為 <主機埠>:<容器埠>
,只需將主機埠跟換為不衝突的埠即可。
注意事項
在 Windows 下的 Docker 的共享檔案有小概率會出現問題,遇到的症狀是使用 VSCode 開啟專案進入容器後可以看到專案的目錄結構但是無法開啟檔案。解決辦法是在 Docker 容器設定中將共享的目錄或碟符刪除然後重啟 Docker 容器,重啟後再重新設定一下共享目錄或碟符即可。
還有一個問題需要注意在 Windows 下的 Docker 中,專案掛載在容器中的檔案許可權是 777 且使用者是 root,在這個環境下專案不會遇到檔案許可權問題,但是專案到了 Linux 的 Docker 或者是 Windows + wsl2 + Docker 的環境中就可能會出現許可權問題,因為在這兩個環境中掛載的檔案許可權是 755 使用者是我們指定的所屬使用者,如果沒有指定則預設也是 root,不過上面專案的許可權已處理好不用擔心。
本作品採用《CC 協議》,轉載必須註明作者和本文連結