>在我的上一篇文章中,我們介紹了什么是docker以及如何使用幾個命令啟動和運行。但是,我們還沒有做任何有用的事情。有很多方法可以使用Docker獲得WordPress環(huán)境,在本文中,我將向您展示如何手動設(shè)置Docker容器與WordPress一起使用。如果您想快速介紹Docker,可以跳回這里的第一篇文章。
鑰匙要點可以手動設(shè)置Docker,通過為MySQL和WordPress創(chuàng)建容器來與WordPress一起工作。 MySQL容器是使用Docker Hub的MySQL映像創(chuàng)建的,而WordPress容器是由PHP映像構(gòu)建的。
- > MySQL容器需要首次創(chuàng)建時通過環(huán)境變量,為根用戶設(shè)置密碼。還可以將其他環(huán)境變量傳遞給容器,例如mysql_database,以確保創(chuàng)建帶有該名稱的數(shù)據(jù)庫。
WordPress容器的PHP映像默認情況下沒有安裝的MySQL擴展名。可以通過通過使用PHP:5.6-apache image的Dockerfile構(gòu)建容器來解決這一問題,安裝mysqli擴展名并執(zhí)行Apache2-Foreground。
- > WordPress容器需要與MySQL容器鏈接到數(shù)據(jù)庫以進行功能。這是通過運行WordPress容器時使用–link參數(shù)的,將MySQL容器的名稱作為第一部分,而別名作為第二部分。
- docker團隊已經(jīng)準備好了MySQL映像供我們使用。在終端上運行任何命令之前,請確保讀取此圖像的文檔。寫作時的最新版本為5.7。但是,最新的標簽名稱為5.6。圖像的最新版本可以適用于任何以前的版本,但一個處于穩(wěn)定狀態(tài)。
- 使用此圖像設(shè)置容器的基本命令是:
>
>如果您還沒有本地圖像的副本,Docker將從Docker Hub中將其拉動。到目前為止,我們知道 - 名稱給我們的容器一個名稱,-d確保我們的容器在后臺運行。
>
如果您運行Docker PS,您將看到WordPressDB容器未運行。它應該運行。運行Docker登錄WordPressDB,您將看到這樣的消息:
>docker run --name wordpressdb -d mysql:5.7
為什么?這是因為當我們第一次構(gòu)建容器時,我們沒有將root密碼作為參數(shù)。因此,讓我們這樣做。首先,我們需要使用Docker RM WordPressDB刪除使用名稱WordPressDB創(chuàng)建的容器。這是因為新容器將使用相同的名稱,并且不能有兩個具有相同名稱的容器。
>讓我們再次創(chuàng)建我們的容器。首次創(chuàng)建容器時,我們需要傳遞環(huán)境變量。它應該看起來像這樣:
error: database is uninitialized and MYSQL_ROOT_PASSWORD not set Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?> -e mysql_root_password =密碼是環(huán)境變量。當從圖像構(gòu)建容器時,它讀取此變量并將根用戶的密碼設(shè)置為指定的值,在這種情況下,該值是密碼。
如果您現(xiàn)在檢查Docker記錄WordPressDB,則會看到一條很長的消息,但不用擔心,它可以正常工作。同樣,運行Docker PS,您會看到一個具有活性和運行的名稱WordPressDB的容器。
>
>您也可以將其他環(huán)境變量傳遞給容器,您可以在MySQL映像文檔上找到完整的列表。這是另一個示例:
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7>如果您嘗試使用名稱WordPressDB刪除上一個容器,則可能會失敗。那是因為容器仍在后臺運行。您可以首先停止運行的容器,然后將其卸下或強制將其刪除:
如果我們使用MySQL_DATABASE,則確保創(chuàng)建了具有該名稱的數(shù)據(jù)庫。這樣,我們確定數(shù)據(jù)庫和根密碼的名稱是什么。您還可以使用密碼和數(shù)據(jù)庫創(chuàng)建另一個用戶。這是對您的快速測試,請查看他們的文檔并嘗試自己執(zhí)行此操作。
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -d mysql:5.7>
如果您想了解更多該容器的構(gòu)建方式,請查看Dockerfile。它使用Debian Wheezy,并使用bash命令構(gòu)建容器。它從存儲庫中拉出,然后啟動mysqld。當您的容器從此圖像中
building時,它首次執(zhí)行構(gòu)建文件的命令。當使用>使用容器時,它將僅執(zhí)行mysqld。 >現(xiàn)在我們擁有一個運行的mySQL容器,我們可以運行一個運行WordPress的容器。
構(gòu)建WordPress容器
>
>沒有-d選項,它不會在后臺運行,而是會向您顯示容器正在輸出的所有內(nèi)容(就像Docker logs [Container_Name]一樣)。從輸出中,您可以看到它已將IP自動分配給該容器。就我而言,是172.17.0.35。如果您使用瀏覽器訪問此地址,則會遇到禁止錯誤。這是為什么?這是因為/var/www/html文件夾中沒有什么(在容器文件系統(tǒng)上),它是空的。
>
那么,我們?nèi)绾螌⑽募湃朐撐募A中?默認情況下,該文件夾停留在容器中,并且是看不見的。但是,不要長時間(別忘了docker rm wordpress)。首先,創(chuàng)建一個文件夾并在其中導航(別忘了刪除舊的WordPress容器)。-v用于映射兩個文件夾。第一部分是OS上的文件夾,第二部分是容器文件系統(tǒng)中的文件夾。在類似Unix的系統(tǒng)上,“ $ PWD”返回命令運行時終端的位置。當您第一次啟動終端時,您將進入主目錄。 Windows上的等效物是CD。有關(guān)PWD的更多信息。
docker run --name wordpressdb -d mysql:5.7> 因此,在我們的示例中,第一部分是“ $ pwd/”,它是本地目錄,第二部分是/var/www/html/。 -v都需要兩者都是完整的路徑。但是,如果我們查看工作目錄,我們可以看到那里不存在文件。創(chuàng)建一個稱為index.php的文件,其中包含以下內(nèi)容:
>
>在您的瀏覽器中再次檢查。這次,您會注意到IP地址已更改,因為我們創(chuàng)建了一個新的容器。每當我們創(chuàng)建一個新容器時,都會更改其IP。如果您在瀏覽器中看到該消息,那么您已經(jīng)完成了所有操作。
>error: database is uninitialized and MYSQL_ROOT_PASSWORD not set Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?>讓我們看看如果將WordPress文件放在那里,會發(fā)生什么。使用Docker Stop WordPress停止容器。從WordPress.org獲取WordPress的最新副本,然后將文件放入項目文件夾中。使用Docker Start WordPress再次啟動容器。另外,請注意,您最初需要使文件可讀。您可以在 *NIX系統(tǒng)上運行CHMOD -R 777 ProjectFolter。如果您重新加載頁面,您的瀏覽器會告訴您:
>
默認情況下,PHP映像沒有安裝MySQL擴展名,但是我們可以修復。這次,我們將通過Dockerfile構(gòu)建一個容器。我們已經(jīng)看到了Dockerfiles的工作原理。它們是由基本圖像構(gòu)建的,進行一些處理,然后在最后執(zhí)行一個命令。
創(chuàng)建一個名為dockerfile的新文件:docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
我們要使用php:5.6-apache Image。
接下來,我們需要像PHP映像一樣執(zhí)行Apache2-Foreground(我們只需要安裝MySQL擴展程序)。
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -d mysql:5.7
使用構(gòu)建文件我們可以構(gòu)建圖像。使用此圖像,我們構(gòu)建了容器。
docker rm -f wordpressdb
-t用于給出存儲庫名稱。這 。告訴Docker Dockerfile在哪里。由于Dockerfile位于工作目錄中。告訴docker它在工作目錄中。
>如果您使用Docker Images檢查圖像,現(xiàn)在您將看到帶有標簽最新圖像的新圖像(因為我們沒有為此圖像指定標簽)?,F(xiàn)在,像我們使用php5.6-apache Image一樣構(gòu)建使用此圖像的容器。
docker run --name wordpressdb -d mysql:5.7>檢查您的瀏覽器中的容器IP,您會看到類似的東西:
>

>我們?nèi)绾螌ordPress與數(shù)據(jù)庫鏈接?首先,我們需要將WordPress容器與數(shù)據(jù)庫容器(WordPressDB)鏈接。這可以通過鏈接兩個容器來完成。有關(guān)鏈接的更多信息,請參見此處。
新參數(shù)是 - 鏈接。第一部分WordPressDB是我們要鏈接的容器的名稱,第二部分MySQL是別名。 Docker修改了WordPress容器的主機,并將WordPressDB的IP設(shè)置為MySQL。因此,當我們在WordPress配置上填寫數(shù)據(jù)庫的信息時,我們將將主機設(shè)置為“ mysql”。
error: database is uninitialized and MYSQL_ROOT_PASSWORD not set Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?現(xiàn)在,使用容器的IP(新IP)轉(zhuǎn)到瀏覽器。填寫數(shù)據(jù)庫的信息,然后登錄到管理員面板。如果您嘗試安裝一個新主題(將嘗試在文件系統(tǒng)上進行更改),您將看到類似的內(nèi)容:
為什么?這是因為運行Apache的用戶在文件系統(tǒng)上沒有寫入訪問。這是事情變得有些困難的地方。我們需要構(gòu)建一個新版本的phpwithmysql映像。轉(zhuǎn)到您的Dockerfile并將其修改為這樣:
>
>我們尚未創(chuàng)建entrypoint.sh文件,但是我們很快就會這樣做。復制Copies entrypoint.sh到容器內(nèi)部 /內(nèi)部。 CHMOD 777 /entrypoint.sh使該文件可執(zhí)行。最后,入門點執(zhí)行該文件。現(xiàn)在,在與DockerFile同一目錄中創(chuàng)建Entrypoint.sh文件。
另外,請刪除舊的wp-config.php文件。 上面的某些步驟似乎很神秘且復雜。這就是為什么有許多不同框架和語言的官方圖像的原因。每個框架或語言的工作方式都有不同的規(guī)格。默認情況下,Docker不允許應用程序在文件系統(tǒng)上寫入。這是一件好事還是好事?我認為這是一件好事。我們可以創(chuàng)建僅保存文件的第三個容器。那里的應用程序可以寫文件。這樣,我們將擁有一個更模塊化的體系結(jié)構(gòu)。但是對于那些無法更改的框架(例如WordPress),有解決方法。 >我們要做的最后一件事是解決停止WordPress容器并重新開始時發(fā)生的問題。問題是WordPress將最后一個IP保存為其“家”和“站點” URL。停止WordPress容器并重新啟動。這次將有一個新的IP。如果您在瀏覽器中嘗試使用,則會看到圖像,CSS和JavaScript文件未正確包含。該解決方案很簡單,只需通過添加以下行來修改wp-config.php
在本系列的下一篇文章中,向您展示了如何使用官方WordPress映像,我們還將學習如何使用Docker構(gòu)成使事情變得更加容易的。 >如果有更簡單的方法,為什么要寫這篇文章呢?從本質(zhì)上講,這是為了更好地了解Docker的工作原理,要做到這一點,您必須對基本的復雜性弄臟手。這更多是個人規(guī)則,因此,當我明天使用Docker時,我會更多地了解它的工作原理以及如何根據(jù)我的需求進行調(diào)整。希望您現(xiàn)在也對Docker在幕后工作的工作有了更深入的了解。請繼續(xù)關(guān)注本系列中的第三篇文章,我們將與Docker和WordPress一起玩更多樂趣。
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
這是官方WordPress映像的簡化解決方法,但將確保我們對容器文件系統(tǒng)進行寫入訪問。我們現(xiàn)在可以構(gòu)建新圖像:
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -d mysql:5.7
>確保卸下舊容器并創(chuàng)建新容器:
docker rm -f wordpressdb
docker run --name wordpress php:5.6-apache
現(xiàn)在,檢查瀏覽器中的WordPress容器的IP。這次,您可以安裝主題和插件,并在容器文件系統(tǒng)上進行更改。最終調(diào)整
docker run --name wordpressdb -d mysql:5.7
請注意,如果您在wp-config.php文件中定義了這些值,則在一般設(shè)置中以后無法更改它們。
在本文中,我們介紹了如何為WordPress構(gòu)建容器。我們以一種相當神秘的方式做到了這一點,長長的命令可能很難記住。應該有一種更簡單的方法,并且有! Docker團隊構(gòu)建了一個WordPress映像,您可以在幾分鐘內(nèi)輕松設(shè)置該圖像。畢竟,誰想記住每個設(shè)置WordPress的命令?
>常見問題(常見問題解答)有關(guān)WordPress構(gòu)建Docker容器的問題
>如何確保我的WordPress的Docker容器是安全的?為了確保您的容器安全,請始終使用最新版本的Docker和WordPress。定期更新您的Docker圖像和容器,以包括最新的安全補丁。另外,使用Docker Secrets管理密碼等敏感數(shù)據(jù)。避免運行Docker容器作為根,以最大程度地減少容器的損害。最后,使用Docker安全掃描工具來識別和修復圖像中的漏洞。我如何優(yōu)化docker容器的性能,用于WordPress?
備份您WordPress站點在Docker容器中運行,您可以使用“ Docker CP”命令將文件從容器復制到主機計算機。您也可以使用Docker量來持久數(shù)據(jù)。如果您使用的是mySQL數(shù)據(jù)庫,則可以使用“ mySqlDump”命令來創(chuàng)建數(shù)據(jù)庫的備份。
>>如何縮放在Docker容器中運行的WordPress站點?提供了一些用于擴展應用程序的工具。您可以使用Docker組合來定義和運行多容器應用程序,并通過增加容器實例的數(shù)量來擴展它們。您還可以使用Docker Swarm或Kubernetes,它們是可以在多個主機上管理和擴展容器的編排工具。
如何自動化Docker Containser中的WordPress網(wǎng)站的部署?您可以使用CI/CD工具(例如Jenkins,Travis CI或GitHub操作)自動在Docker容器中部署WordPress網(wǎng)站。這些工具可以構(gòu)建您的Docker映像,運行測試并將容器部署到Docker主機或Kubernetes群集。
>如何管理Docker容器中的多個WordPress站點?
>在Docker容器中管理多個WordPress站點,您可以使用Docker組合將每個站點定義為單獨的服務。您還可以使用Docker網(wǎng)絡來隔離每個站點的網(wǎng)絡流量。如果您使用的是nginx之類的反向代理,則可以將其配置為基于域名的流量將流量路由到適當?shù)娜萜鳌?h3> 如何更新在docker容器中運行的WordPress站點?>
>要更新在Docker容器中運行的WordPress站點,您可以從Docker Hub中摘取最新的WordPress映像,停止運行的容器,并使用更新的圖像啟動新的。請記住在更新之前要備份數(shù)據(jù)。>如何監(jiān)視在Docker容器中運行的WordPress站點? docker提供了幾種用于監(jiān)視容器的工具。您可以使用“ Docker Stats”命令來監(jiān)視容器的資源使用情況。您還可以使用Prometheus和Grafana之類的工具從容器中收集和可視化指標。>我如何將現(xiàn)有的WordPress網(wǎng)站遷移到Docker容器?以上是如何為WordPress手動構(gòu)建Docker容器的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機

Video Face Swap
使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)

WordPress導致服務器CPU使用率飆升的主要原因包括插件問題、數(shù)據(jù)庫查詢效率低、主題代碼質(zhì)量差或流量激增。1.首先通過top、htop或控制面板工具確認是否為WordPress引起的高負載;2.進入故障排查模式逐步啟用插件排查性能瓶頸,使用QueryMonitor分析插件執(zhí)行情況并刪除或替換低效插件;3.安裝緩存插件、清理冗余數(shù)據(jù)、分析慢查詢?nèi)罩疽詢?yōu)化數(shù)據(jù)庫;4.檢查主題是否存在過度加載內(nèi)容、復雜查詢或缺乏緩存機制等問題,建議用標準主題測試對比并優(yōu)化代碼邏輯。按照上述步驟逐一排查可定位并解

MinifyingJavaScript文件可通過刪除空白、注釋和無用代碼來提升WordPress網(wǎng)站加載速度。1.使用支持合并壓縮的緩存插件如W3TotalCache,在“Minify”選項中啟用并選擇壓縮模式;2.使用專用壓縮插件如FastVelocityMinify,提供更精細控制;3.手動壓縮JS文件并通過FTP上傳,適用于熟悉開發(fā)工具的用戶。注意部分主題或插件腳本可能與壓縮功能沖突,啟用后需徹底測試網(wǎng)站功能。

防止評論垃圾信息最有效的方式是通過程序化手段自動識別并攔截。1.使用驗證碼機制(如GooglereCAPTCHA或hCaptcha)可有效區(qū)分人類與機器人,尤其適合公眾網(wǎng)站;2.設(shè)置隱藏字段(Honeypot技術(shù)),利用機器人自動填寫特性識別垃圾評論,不影響用戶體驗;3.檢查評論內(nèi)容關(guān)鍵詞黑名單,通過敏感詞匹配過濾垃圾信息,需注意避免誤判;4.判斷評論頻率與來源IP,限制單位時間內(nèi)的提交次數(shù)并建立黑名單;5.使用第三方反垃圾服務(如Akismet、Cloudflare)提升識別準確性??筛鶕?jù)網(wǎng)站

在開發(fā)Gutenberg塊時,正確enqueue資產(chǎn)的方法包括:1.使用register_block_type指定editor_script、editor_style和style的路徑;2.在functions.php或插件中通過wp_register_script和wp_register_style注冊資源,并設(shè)置正確的依賴和版本;3.配置構(gòu)建工具輸出合適的模塊格式,并確保路徑一致;4.通過add_theme_support或enqueue_block_assets控制前端樣式的加載邏輯,確保

要添加自定義用戶字段需根據(jù)平臺選擇擴展方式并注意數(shù)據(jù)驗證與權(quán)限控制。常見做法包括:1.利用數(shù)據(jù)庫額外表或鍵值對結(jié)構(gòu)存儲信息;2.在前端加入輸入框并與后端集成;3.對敏感數(shù)據(jù)進行格式校驗和訪問權(quán)限限制;4.更新接口及模板以支持新字段展示與編輯,同時兼顧移動端適配和用戶體驗。

在WordPress中添加自定義重寫規(guī)則的關(guān)鍵在于使用add_rewrite_rule函數(shù)并確保規(guī)則正確生效。1.使用add_rewrite_rule注冊規(guī)則,格式為add_rewrite_rule($regex,$redirect,$after),其中$regex是正則表達式匹配URL,$redirect指定實際查詢,$after控制規(guī)則位置;2.需通過add_filter添加自定義查詢變量;3.修改后必須刷新固定鏈接設(shè)置;4.建議將規(guī)則放在'top'以避免沖突;5.可借助插件查看當前規(guī)則便于

robots.txt對WordPress網(wǎng)站的SEO至關(guān)重要,能引導搜索引擎抓取行為,避免重復內(nèi)容并提升效率。1.屏蔽如/wp-admin/、/wp-includes/等系統(tǒng)路徑,但避免誤封/uploads/目錄;2.添加Sitemap路徑如Sitemap:https://yourdomain.com/sitemap.xml以幫助搜索引擎快速發(fā)現(xiàn)站點地圖;3.限制/page/和帶參數(shù)的URL以減少爬蟲浪費,但需注意勿封重要歸檔頁;4.避免常見錯誤如誤封全站、緩存插件影響更新及忽略移動端與子域名配

1.使用性能分析插件可快速定位問題,如QueryMonitor可查看數(shù)據(jù)庫查詢次數(shù)與PHP錯誤,BlackboxProfiler生成函數(shù)執(zhí)行報告,NewRelic提供服務器級分析;2.分析PHP執(zhí)行性能需檢查耗時函數(shù)、調(diào)試工具使用及內(nèi)存分配情況,如Xdebug生成火焰圖輔助優(yōu)化;3.監(jiān)控數(shù)據(jù)庫查詢效率可通過慢查詢?nèi)罩九c索引檢查,QueryMonitor能列出所有SQL并按時間排序;4.結(jié)合GooglePageSpeedInsights、GTmetrix與WebPageTest等外部工具評估前端加
