Docker 部署 WordPress 全流程
在開始 WordPress 鏡像拉取與部署操作前,先明確其核心價(jià)值與 Docker 部署的優(yōu)勢(shì)——幫你更清晰理解每一步操作的實(shí)際意義,避免機(jī)械執(zhí)行命令。
關(guān)于 WordPress:核心功能與價(jià)值
WordPress 是全球最流行的開源內(nèi)容管理系統(tǒng)(CMS),基于 PHP + MySQL 架構(gòu),核心價(jià)值體現(xiàn)在三大場(chǎng)景:
- 快速建站:無需復(fù)雜開發(fā),通過模板和插件即可搭建博客、企業(yè)官網(wǎng)、電商平臺(tái)、知識(shí)庫等各類網(wǎng)站,零基礎(chǔ)也能上手;
- 高度可擴(kuò)展:支持 5 萬+ 免費(fèi)插件(如 SEO 優(yōu)化、表單提交、支付集成)和 1 萬+ 模板,可按需擴(kuò)展功能和外觀,無需修改核心代碼;
- 輕量易維護(hù):占用服務(wù)器資源少,后臺(tái)管理界面直觀,日常更新、備份、內(nèi)容編輯操作簡(jiǎn)單,適合個(gè)人和中小企業(yè)使用。
截至目前,全球超過 43% 的網(wǎng)站使用 WordPress 構(gòu)建,從個(gè)人博客到大型媒體平臺(tái)(如《紐約時(shí)報(bào)》部分欄目)均有應(yīng)用,是入門建站和快速迭代業(yè)務(wù)的首選工具。
為什么用 Docker 部署 WordPress?核心優(yōu)勢(shì)
傳統(tǒng)部署 WordPress(通過 yum/apt 安裝 PHP、MySQL、Apache 等組件)常面臨環(huán)境配置繁瑣、版本沖突、數(shù)據(jù)遷移困難、多站點(diǎn)隔離差等問題(例如:手動(dòng)配置 PHP 擴(kuò)展時(shí)遺漏依賴導(dǎo)致安裝失敗;多站點(diǎn)共用服務(wù)器時(shí),一個(gè)站點(diǎn)故障影響所有站點(diǎn))。而 Docker 部署能徹底解決這些痛點(diǎn),核心優(yōu)勢(shì)如下:
- 環(huán)境一鍵就緒:WordPress 鏡像已打包所有運(yùn)行依賴(PHP 解釋器、Apache/Nginx 服務(wù)器、核心代碼),配合 MySQL 鏡像,無需單獨(dú)配置運(yùn)行環(huán)境,拉取鏡像即可啟動(dòng),新手也能 10 分鐘完成部署;
- 數(shù)據(jù)與環(huán)境隔離:WordPress 程序文件、用戶數(shù)據(jù)、數(shù)據(jù)庫數(shù)據(jù)通過容器卷掛載到宿主機(jī),與主機(jī)環(huán)境完全隔離,避免誤操作刪除數(shù)據(jù),同時(shí)多站點(diǎn)部署時(shí)可通過獨(dú)立容器隔離,互不干擾;
- 遷移與備份便捷:遷移網(wǎng)站時(shí),只需復(fù)制宿主機(jī)掛載目錄和鏡像,在新服務(wù)器啟動(dòng)容器即可恢復(fù),無需重新配置環(huán)境;備份時(shí)直接打包掛載目錄,比傳統(tǒng)備份數(shù)據(jù)庫+程序文件更高效;
- 版本靈活切換:支持拉取不同 PHP 版本(8.1-8.4)、不同運(yùn)行模式(Apache/FPM/Alpine)的 WordPress 鏡像,切換版本只需更換鏡像標(biāo)簽,測(cè)試新版本時(shí)不影響現(xiàn)有站點(diǎn);
- 資源占用可控:Docker 容器可限制 CPU、內(nèi)存使用,WordPress 容器默認(rèn)占用內(nèi)存僅幾十 MB,比傳統(tǒng)部署節(jié)省 30% 以上資源,適合低配服務(wù)器或多服務(wù)混布場(chǎng)景。
?? 準(zhǔn)備工作
若你的系統(tǒng)尚未安裝 Docker 和 Docker Compose,請(qǐng)先通過軒轅鏡像提供的一鍵腳本完成安裝(支持主流 Linux 發(fā)行版)。
Linux Docker & Docker Compose 一鍵安裝
該腳本會(huì)自動(dòng)安裝最新穩(wěn)定版 Docker、Docker Compose,并配置軒轅鏡像加速源(解決官方鏡像拉取慢的問題),無需手動(dòng)修改配置文件。
bash <(wget -qO- https://xuanyuan.cloud/docker.sh)
驗(yàn)證安裝成功
執(zhí)行以下命令,若能顯示 Docker 版本信息,說明安裝完成:
docker --version && docker compose --version
1、查看 WordPress 鏡像
你可以在 軒轅鏡像平臺(tái) 查看 WordPress 鏡像的詳細(xì)信息(包括支持的標(biāo)簽、鏡像大小、更新記錄等):
?? https://xuanyuan.cloud/r/library/wordpress
鏡像支持多種 PHP 版本(8.1-8.4)和運(yùn)行模式(Apache/FPM/Alpine),推薦新手使用默認(rèn)標(biāo)簽(PHP 8.3 + Apache,標(biāo)簽為 latest),兼容性最好、配置最簡(jiǎn)單。
2、下載 WordPress 鏡像
以下提供 4 種鏡像拉取方式,優(yōu)先推薦「免登錄拉取」(無需配置賬戶,新手友好),所有方式拉取的鏡像內(nèi)容完全一致。
2.1 登錄驗(yàn)證拉取(需軒轅鏡像賬戶)
若已注冊(cè)軒轅鏡像賬戶,可通過以下命令拉取:
docker pull docker.xuanyuan.run/library/wordpress:latest
2.2 拉取后重命名(簡(jiǎn)化后續(xù)命令)
若覺得鏡像名稱過長(zhǎng),可拉取后重命名為官方標(biāo)準(zhǔn)名稱,方便后續(xù)使用:
# 拉取軒轅鏡像
docker pull docker.xuanyuan.run/library/wordpress:latest \
# 重命名為官方名稱
&& docker tag docker.xuanyuan.run/library/wordpress:latest library/wordpress:latest \
# 刪除原標(biāo)簽,節(jié)省存儲(chǔ)空間
&& docker rmi docker.xuanyuan.run/library/wordpress:latest
2.3 免登錄拉取(推薦,新手首選)
無需注冊(cè)賬戶,直接通過免登錄地址拉取,步驟更簡(jiǎn)潔:
# 基礎(chǔ)拉取命令
docker pull xxx.xuanyuan.run/library/wordpress:latest
# 帶重命名的完整命令(推薦)
docker pull xxx.xuanyuan.run/library/wordpress:latest \
&& docker tag xxx.xuanyuan.run/library/wordpress:latest library/wordpress:latest \
&& docker rmi xxx.xuanyuan.run/library/wordpress:latest
2.4 官方直連拉取(需配置鏡像加速)
若已通過軒轅鏡像一鍵腳本配置了加速器,可直接使用官方命令拉取(底層仍通過軒轅鏡像加速):
docker pull library/wordpress:latest
2.5 驗(yàn)證鏡像拉取成功
執(zhí)行以下命令,若輸出包含 library/wordpress:latest,說明拉取成功:
docker images
示例輸出:
REPOSITORY TAG IMAGE ID CREATED SIZE
library/wordpress latest 7f2f1b48991f 1 week ago 630MB
3、部署 WordPress
WordPress 依賴 MySQL 數(shù)據(jù)庫(存儲(chǔ)文章、用戶、配置等數(shù)據(jù)),以下提供 3 種部署方案,可根據(jù)使用場(chǎng)景選擇。
3.1 快速部署(適合測(cè)試/臨時(shí)使用)
無需手動(dòng)配置數(shù)據(jù)庫,通過 --link 關(guān)聯(lián) MySQL 容器,一鍵啟動(dòng) WordPress,適合快速體驗(yàn)功能。
第一步:?jiǎn)?dòng) MySQL 容器(提供數(shù)據(jù)庫服務(wù))
docker run -d \
--name wp-mysql \
-e MYSQL_ROOT_PASSWORD=wp@123456 \ # MySQL root 密碼(自定義,建議復(fù)雜密碼)
-e MYSQL_DATABASE=wordpress \ # 自動(dòng)創(chuàng)建 WordPress 數(shù)據(jù)庫
-e MYSQL_USER=wpuser \ # WordPress 數(shù)據(jù)庫用戶
-e MYSQL_PASSWORD=wpuser@123 \ # WordPress 數(shù)據(jù)庫密碼
library/mysql:8.0 # 使用 MySQL 8.0 鏡像(兼容性最好)
第二步:?jiǎn)?dòng) WordPress 容器(關(guān)聯(lián) MySQL)
docker run -d \
--name wp-test \
--link wp-mysql:db \ # 關(guān)聯(lián) MySQL 容器,容器內(nèi)可通過「db」訪問數(shù)據(jù)庫
-p 80:80 \ # 宿主機(jī) 80 端口映射到容器 80 端口(WordPress 默認(rèn)端口)
-e WORDPRESS_DB_HOST=db \ # 數(shù)據(jù)庫地址(對(duì)應(yīng) --link 的別名)
-e WORDPRESS_DB_USER=wpuser \ # 數(shù)據(jù)庫用戶(與 MySQL 容器配置一致)
-e WORDPRESS_DB_PASSWORD=wpuser@123 \ # 數(shù)據(jù)庫密碼(與 MySQL 容器配置一致)
-e WORDPRESS_DB_NAME=wordpress \ # 數(shù)據(jù)庫名稱(與 MySQL 容器配置一致)
library/wordpress:latest
驗(yàn)證方式
瀏覽器訪問 http://服務(wù)器IP,若顯示 WordPress 安裝向?qū)ы撁妫f明部署成功。
3.2 掛載目錄部署(推薦,適合生產(chǎn)使用)
通過掛載宿主機(jī)目錄,實(shí)現(xiàn)「數(shù)據(jù)持久化」(容器刪除后數(shù)據(jù)不丟失)、「文件獨(dú)立管理」(可直接在宿主機(jī)修改主題/插件),步驟如下:
第一步:創(chuàng)建宿主機(jī)目錄(存儲(chǔ)數(shù)據(jù)和配置)
# 一次性創(chuàng)建 4 個(gè)目錄,分別存儲(chǔ)網(wǎng)頁文件、插件/主題、日志、配置
mkdir -p /data/wordpress/{html,wp-content,logs,conf}
第二步:?jiǎn)?dòng) MySQL 容器(掛載數(shù)據(jù)目錄)
docker run -d \
--name wp-mysql \
-e MYSQL_ROOT_PASSWORD=wp@123456 \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wpuser \
-e MYSQL_PASSWORD=wpuser@123 \
-v /data/wordpress/mysql:/var/lib/mysql \ # 掛載 MySQL 數(shù)據(jù)目錄(持久化數(shù)據(jù))
--restart always \ # 容器退出后自動(dòng)重啟(保障服務(wù)可用性)
library/mysql:8.0
第三步:?jiǎn)?dòng) WordPress 容器(掛載目錄)
docker run -d \
--name wp-prod \
--link wp-mysql:db \
-p 80:80 \
-e WORDPRESS_DB_HOST=db \
-e WORDPRESS_DB_USER=wpuser \
-e WORDPRESS_DB_PASSWORD=wpuser@123 \
-e WORDPRESS_DB_NAME=wordpress \
-e TZ=Asia/Shanghai \ # 設(shè)置時(shí)區(qū)(避免時(shí)間顯示錯(cuò)誤)
-v /data/wordpress/html:/var/www/html \ # 掛載網(wǎng)頁根目錄
-v /data/wordpress/wp-content:/var/www/html/wp-content \ # 掛載插件/主題目錄
-v /data/wordpress/logs:/var/log/apache2 \ # 掛載 Apache 日志目錄
-v /data/wordpress/conf:/etc/apache2/conf-enabled \ # 掛載 Apache 配置目錄
--restart always \
library/wordpress:latest
目錄映射說明(重要)
| 宿主機(jī)目錄 | 容器內(nèi)目錄 | 用途 |
|---|---|---|
/data/wordpress/html |
/var/www/html |
存儲(chǔ) WordPress 核心程序文件 |
/data/wordpress/wp-content |
/var/www/html/wp-content |
存儲(chǔ)插件、主題、上傳的圖片/文件 |
/data/wordpress/logs |
/var/log/apache2 |
存儲(chǔ) Apache 訪問日志、錯(cuò)誤日志 |
/data/wordpress/conf |
/etc/apache2/conf-enabled |
存儲(chǔ) Apache 自定義配置(如 HTTPS 配置) |
第四步:完成 WordPress 安裝
瀏覽器訪問 http://服務(wù)器IP,按向?qū)瓿梢韵虏襟E:
- 選擇語言(推薦「簡(jiǎn)體中文」);
- 填寫站點(diǎn)標(biāo)題、管理員用戶名、密碼、郵箱;
- 點(diǎn)擊「安裝 WordPress」,完成后跳轉(zhuǎn)到登錄頁面;
- 輸入管理員賬號(hào)密碼,進(jìn)入后臺(tái)管理界面。
3.3 Docker Compose 部署(適合企業(yè)級(jí)場(chǎng)景)
通過 docker-compose.yml 文件統(tǒng)一管理 WordPress 和 MySQL 容器,支持一鍵啟動(dòng)/停止/備份,適合長(zhǎng)期維護(hù)和多服務(wù)管理。
第一步:創(chuàng)建 docker-compose.yml 文件
在任意目錄(如 /data/wordpress)創(chuàng)建文件,內(nèi)容如下:
version: '3' # 指定 Compose 語法版本
services:
# MySQL 服務(wù)配置
db:
image: library/mysql:8.0
container_name: wp-mysql
environment:
MYSQL_ROOT_PASSWORD: wp@123456 # 自定義 root 密碼
MYSQL_DATABASE: wordpress # 自動(dòng)創(chuàng)建數(shù)據(jù)庫
MYSQL_USER: wpuser # 數(shù)據(jù)庫用戶
MYSQL_PASSWORD: wpuser@123 # 數(shù)據(jù)庫密碼
volumes:
- ./mysql:/var/lib/mysql # 掛載 MySQL 數(shù)據(jù)目錄
restart: always # 自動(dòng)重啟
networks:
- wp-network # 加入自定義網(wǎng)絡(luò)(隔離其他服務(wù))
# WordPress 服務(wù)配置
wordpress:
image: library/wordpress:latest
container_name: wp-service
depends_on:
- db # 先啟動(dòng) db 服務(wù)再啟動(dòng) WordPress
environment:
WORDPRESS_DB_HOST: db # 數(shù)據(jù)庫地址(對(duì)應(yīng) db 服務(wù)名)
WORDPRESS_DB_USER: wpuser # 數(shù)據(jù)庫用戶(與 db 配置一致)
WORDPRESS_DB_PASSWORD: wpuser@123 # 數(shù)據(jù)庫密碼(與 db 配置一致)
WORDPRESS_DB_NAME: wordpress # 數(shù)據(jù)庫名稱(與 db 配置一致)
TZ: Asia/Shanghai # 時(shí)區(qū)配置
ports:
- "80:80" # 端口映射
- "443:443" # 預(yù)留 HTTPS 端口
volumes:
- ./html:/var/www/html # 掛載網(wǎng)頁目錄
- ./wp-content:/var/www/html/wp-content # 掛載插件/主題目錄
- ./logs:/var/log/apache2 # 掛載日志目錄
- ./conf:/etc/apache2/conf-enabled # 掛載配置目錄
restart: always
networks:
- wp-network
# 自定義網(wǎng)絡(luò)(隔離容器)
networks:
wp-network:
第二步:?jiǎn)?dòng)服務(wù)
在 docker-compose.yml 所在目錄執(zhí)行以下命令,一鍵啟動(dòng)所有服務(wù):
docker compose up -d
常用命令(運(yùn)維必備)
- 停止服務(wù):
docker compose down(不會(huì)刪除掛載數(shù)據(jù)) - 查看服務(wù)狀態(tài):
docker compose ps - 查看日志:
docker compose logs -f wordpress(實(shí)時(shí)查看 WordPress 日志) - 重啟服務(wù):
docker compose restart
4、結(jié)果驗(yàn)證
通過以下 3 種方式確認(rèn) WordPress 服務(wù)正常運(yùn)行:
4.1 瀏覽器驗(yàn)證(最直觀)
- 訪問
http://服務(wù)器IP,能看到 WordPress 前臺(tái)頁面或登錄頁面; - 訪問
http://服務(wù)器IP/wp-admin,能正常登錄后臺(tái)管理界面,說明服務(wù)正常。
4.2 容器狀態(tài)驗(yàn)證
執(zhí)行以下命令,若 STATUS 列均顯示 Up,說明容器運(yùn)行正常:
docker ps
示例輸出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 library/wordpress:latest "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp wp-service
f6e5d4c3b2a1 library/mysql:8.0 "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 3306/tcp, 33060/tcp wp-mysql
4.3 日志驗(yàn)證
查看 WordPress 容器日志,無報(bào)錯(cuò)信息即表示啟動(dòng)正常:
# 若用 docker run 啟動(dòng),容器名為 wp-prod
docker logs wp-prod
# 若用 docker compose 啟動(dòng),容器名為 wp-service
docker logs wp-service
正常日志示例(包含 Apache/2.4.56 (Debian) configured -- resuming normal operations):
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message
[Mon Oct 09 10:00:00.000000 2024] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.56 (Debian) PHP/8.3.10 configured -- resuming normal operations
[Mon Oct 09 10:00:00.000000 2024] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
5、常見問題排查
5.1 訪問不到 WordPress 安裝頁面?
排查方向:
- 端口沖突:執(zhí)行
netstat -tuln | grep 80,查看 80 端口是否被其他服務(wù)(如 Nginx、Apache)占用,若占用則更換宿主機(jī)端口(如-p 8080:80); - 安全組/防火墻:
- 云服務(wù)器:檢查安全組是否放行 80 端口;
- 本地服務(wù)器:執(zhí)行
sudo ufw allow 80/tcp(Ubuntu)或sudo firewall-cmd --add-port=80/tcp --permanent && sudo firewall-cmd --reload(CentOS)開放端口;
- 容器未啟動(dòng):執(zhí)行
docker ps -a查看容器狀態(tài),若STATUS為Exited,執(zhí)行docker logs 容器名查看報(bào)錯(cuò)原因(如數(shù)據(jù)庫連接失敗)。
5.2 數(shù)據(jù)庫連接失敗?
排查方向:
- 環(huán)境變量配置錯(cuò)誤:確認(rèn) WordPress 容器的
WORDPRESS_DB_HOST、WORDPRESS_DB_USER、WORDPRESS_DB_PASSWORD、WORDPRESS_DB_NAME與 MySQL 容器配置一致; - MySQL 容器未啟動(dòng):執(zhí)行
docker start wp-mysql啟動(dòng) MySQL 容器,等待 30 秒后再重啟 WordPress 容器; - MySQL 權(quán)限問題:若使用 MySQL 8.0,需確認(rèn)用戶權(quán)限已授權(quán)遠(yuǎn)程訪問(可進(jìn)入 MySQL 容器執(zhí)行
mysql -u root -p,然后運(yùn)行GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%'; FLUSH PRIVILEGES;); - 網(wǎng)絡(luò)隔離:若用 Docker Compose,確認(rèn)兩個(gè)容器在同一網(wǎng)絡(luò)(如
wp-network),可通過docker network inspect wp-network查看容器是否在網(wǎng)絡(luò)內(nèi)。
5.3 插件/主題安裝失敗(提示權(quán)限不足)?
解決方法:
- 給宿主機(jī)掛載目錄設(shè)置權(quán)限:
chmod -R 755 /data/wordpress/wp-content
chown -R www-data:www-data /data/wordpress/wp-content
- 若仍失敗,在 WordPress 后臺(tái)「外觀→主題」或「插件→安裝插件」頁面,選擇「上傳插件/主題」(通過本地文件上傳,繞開權(quán)限限制)。
5.4 容器重啟后數(shù)據(jù)丟失?
原因:
未掛載數(shù)據(jù)目錄,容器刪除后數(shù)據(jù)隨容器一起刪除。
解決方法:
- 停止并刪除現(xiàn)有容器:
docker stop wp-prod wp-mysql && docker rm wp-prod wp-mysql
- 按照「3.2 掛載目錄部署」或「3.3 Docker Compose 部署」重新啟動(dòng)容器(確保掛載了
/data/wordpress/mysql和/data/wordpress/wp-content目錄); - 若已丟失數(shù)據(jù),可通過 MySQL 備份文件恢復(fù)(若之前有備份)。
5.5 如何啟用 HTTPS?
步驟:
- 準(zhǔn)備 SSL 證書(如 Let's Encrypt 免費(fèi)證書),獲取
fullchain.pem(證書鏈)和privkey.pem(私鑰); - 在宿主機(jī)創(chuàng)建證書目錄:
mkdir -p /data/wordpress/certs,將證書文件放入該目錄; - 啟動(dòng)容器時(shí)添加證書掛載參數(shù)(以掛載目錄部署為例):
-v /data/wordpress/certs:/etc/apache2/certs \ # 掛載證書目錄
- 創(chuàng)建 Apache HTTPS 配置文件
/data/wordpress/conf/ssl.conf,內(nèi)容如下:
<VirtualHost *:443>
ServerName 你的域名(如 example.com)
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/apache2/certs/fullchain.pem
SSLCertificateKeyFile /etc/apache2/certs/privkey.pem
ErrorLog /var/log/apache2/ssl-error.log
CustomLog /var/log/apache2/ssl-access.log combined
</VirtualHost>
- 重啟 WordPress 容器:
docker restart wp-prod; - 訪問
https://你的域名,驗(yàn)證 HTTPS 是否生效。
結(jié)尾
至此,你已掌握基于軒轅鏡像的 WordPress 鏡像拉取與 Docker 部署全流程——從環(huán)境準(zhǔn)備、鏡像下載,到不同場(chǎng)景的部署方案,再到常見問題排查,每個(gè)步驟都配備了可直接復(fù)制的命令和清晰說明。
對(duì)于初學(xué)者,建議先從「快速部署」熟悉流程,再嘗試「掛載目錄部署」理解數(shù)據(jù)持久化的重要性,最后根據(jù)業(yè)務(wù)需求進(jìn)階到「Docker Compose」管理(適合長(zhǎng)期維護(hù))。在實(shí)際使用中,若遇到文檔未覆蓋的問題,可通過 docker logs 容器名 查看日志定位原因,或參考 WordPress 官方文檔、軒轅鏡像平臺(tái)幫助中心補(bǔ)充學(xué)習(xí)。
隨著實(shí)踐深入,你還可以基于本文基礎(chǔ),進(jìn)一步探索 WordPress 的備份策略、插件優(yōu)化、性能調(diào)優(yōu)(如開啟緩存插件、配置 CDN)等功能,讓 WordPress 站點(diǎn)更穩(wěn)定、更高效地支撐你的業(yè)務(wù)需求。

WordPress 是全球最流行的開源內(nèi)容管理系統(tǒng)(CMS),基于 PHP + MySQL 架構(gòu),截至目前,全球超過 43% 的網(wǎng)站使用 WordPress 構(gòu)建,從個(gè)人博客到大型媒體平臺(tái)(如《紐約時(shí)報(bào)》部分欄目)均有應(yīng)用,是入門建站和快速迭代業(yè)務(wù)的首選工具。
浙公網(wǎng)安備 33010602011771號(hào)