還記得上一次用Docker搭的那個最簡PHP環境嗎?一個基于 php:8.5-apache 的容器,把源碼目錄掛進去,8080 端口一開,連本地PHP都不裝就能跑代碼。小項目、隨手實驗,足夠輕便,也用得挺開心。
可一旦程序需要存數據,這個單容器方案就露怯了。總不能讓用戶提交的表單隨風而逝吧?于是,數據庫登場,順帶PHP還得裝上能與MySQL系數據庫對話的擴展。原來那份只寫了一個 web 服務的 compose.yml,是時候進化了。
這次我們做的事很直白:在舊配置上貼一個 MariaDB 服務,并把 web 容器的啟動方式從直接拉鏡像,改為本地構建,以便注入 mysqli、pdo、pdo_mysql 三個擴展。整完之后的 yaml 長這樣——
services 底下多出一個 mariadb 成員,用的是 mariadb:10.11 鏡像,順便用環境變量一鍵設好 root 密碼、庫名、用戶和用戶密碼。而 web 那邊,image 字段被換成了 build: . ,讓 Docker 去找當前目錄下的 Dockerfile 干活。Dockerfile 就三行:基于 php:8.5-apache,然后跑一條 docker-php-ext-install 把上面三個擴展安上。簡單粗暴,卻剛好滿足數據庫連接需求。
仔細看的話,文件末尾還多了一段 volumes: mariadb_data: 的聲明。這可不是寫來湊數的。Docker 容器天生就是可替換的,刪掉一個容器,里面所有的數據就跟著灰飛煙滅。數據庫可經不起這么折騰。給 MariaDB 配一個獨立管理的卷,相當于把數據挪到了一個 docker 自己看管的“外部倉庫”里。哪怕把數據庫容器刪掉重建,只要掛的還是同一個卷,表和數據都安穩地呆在那里,開發時的測試數據再也不會莫名消失。
至于 web 容器為什么要切到本地構建,除了裝擴展這個硬需求,還有個順手的好處:開發階段,源碼照樣不往鏡像里塞,直接通過 volumes 掛載。改一行 PHP,容器里秒生效,完全不用重新打鏡像。這種“熱更新”體驗,對于改來改去的日常調試太對胃口了。
至此,單薄的一個容器,變成了 web + 數據庫雙服務協同的小型開發環境。原本需要本地裝一堆依賴才能跑起來的場景,如今一份 compose 文件加幾行 Dockerfile 就能隨時復現,團隊新成員把倉庫 clone 下來,一句 docker compose up 就擁有同樣的運行環境。從實驗玩具到能存數據的開發環境,升級的代價,真的就只是多寫十來行配置而已。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.