首頁 > CMS教程 > &#&按 > 如何為WordPress手動構建Docker容器

如何為WordPress手動構建Docker容器

Lisa Kudrow
發布: 2025-02-17 13:03:10
原創
989 人瀏覽過

如何為WordPress手動構建Docker容器

>在我的上一篇文章中,我們介紹了什麼是docker以及如何使用幾個命令啟動和運行。但是,我們還沒有做任何有用的事情。有很多方法可以使用Docker獲得WordPress環境,在本文中,我將向您展示如何手動設置Docker容器與WordPress一起使用。如果您想快速介紹Docker,可以跳回這裡的第一篇文章。

鑰匙要點

可以手動設置Docker,通過為MySQL和WordPress創建容器來與WordPress一起工作。 MySQL容器是使用Docker Hub的MySQL映像創建的,而WordPress容器是由PHP映像構建的。
    > MySQL容器需要首次創建時通過環境變量,為根用戶設置密碼。還可以將其他環境變量傳遞給容器,例如mysql_database,以確保創建帶有該名稱的數據庫。 WordPress容器的PHP映像默認情況下沒有安裝的MySQL擴展名。可以通過通過使用PHP:5.6-apache image的Dockerfile構建容器來解決這一問題,安裝mysqli擴展名並執行Apache2-Foreground。
  • > WordPress容器需要與MySQL容器鏈接到數據庫以進行功能。這是通過運行WordPress容器時使用–link參數的,將MySQL容器的名稱作為第一部分,而別名作為第二部分。
  • 設置mySQL
  • >每個WordPress安裝都需要一個MySQL數據庫。為此,我們前往Docker Hub並找到MySQL圖像。
  • docker團隊已經準備好了MySQL映像供我們使用。在終端上運行任何命令之前,請確保讀取此圖像的文檔。寫作時的最新版本為5.7。但是,最新的標籤名稱為5.6。圖像的最新版本可以適用於任何以前的版本,但一個處於穩定狀態。
  • 使用此圖像設置容器的基本命令是:
  • >

>如果您還沒有本地圖像的副本,Docker將從Docker Hub中將其拉動。到目前為止,我們知道 - 名稱給我們的容器一個名稱,-d確保我們的容器在後台運行。

>

如果您運行Docker PS,您將看到WordPressDB容器未運行。它應該運行。運行Docker登錄WordPressDB,您將看到這樣的消息:

>
docker run --name wordpressdb -d mysql:5.7
登入後複製
登入後複製
登入後複製
登入後複製

為什麼?這是因為當我們第一次構建容器時,我們沒有將root密碼作為參數。因此,讓我們這樣做。首先,我們需要使用Docker RM WordPressDB刪除使用名稱WordPressDB創建的容器。這是因為新容器將使用相同的名稱,並且不能有兩個具有相同名稱的容器。

>讓我們再次創建我們的容器。首次創建容器時,我們需要傳遞環境變量。它應該看起來像這樣:

error: database is uninitialized and MYSQL_ROOT_PASSWORD not set
  Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?
登入後複製
登入後複製
登入後複製
> -e mysql_root_password =密碼是環境變量。當從圖像構建容器時,它讀取此變量並將根用戶的密碼設置為指定的值,在這種情況下,該值是密碼。

如果您現在檢查Docker記錄WordPressDB,則會看到一條很長的消息,但不用擔心,它可以正常工作。同樣,運行Docker PS,您會看到一個具有活性和運行的名稱WordPressDB的容器。

>

>您也可以將其他環境變量傳遞給容器,您可以在MySQL映像文檔上找到完整的列表。這是另一個示例:

docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
登入後複製
登入後複製
登入後複製
>如果您嘗試使用名稱WordPressDB刪除上一個容器,則可能會失敗。那是因為容器仍在後台運行。您可以首先停止運行的容器,然後將其卸下或強制將其刪除:

如果我們使用MySQL_DATABASE,則確保創建了具有該名稱的數據庫。這樣,我們確定數據庫和根密碼的名稱是什麼。您還可以使用密碼和數據庫創建另一個用戶。這是對您的快速測試,請查看他們的文檔並嘗試自己執行此操作。
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -d mysql:5.7
登入後複製
登入後複製
登入後複製
>

如果您想了解更多該容器的構建方式,請查看Dockerfile。它使用Debian Wheezy,並使用bash命令構建容器。它從存儲庫中拉出,然後啟動mysqld。當您的容器從此圖像中

building

時,它首次執行構建文件的命令。當使用>使用容器時,它將僅執行mysqld。 >現在我們擁有一個運行的mySQL容器,我們可以運行一個運行WordPress的容器。

構建WordPress容器如何為WordPress手動構建Docker容器 對於此容器,我們將使用PHP圖像。 PHP圖像有三種類型,我們只需要Apache隨附的PHP圖像。

>

>沒有-d選項,它不會在後台運行,而是會向您顯示容器正在輸出的所有內容(就像Docker logs [Container_Name]一樣)。從輸出中,您可以看到它已將IP自動分配給該容器。就我而言,是172.17.0.35。如果您使用瀏覽器訪問此地址,則會遇到禁止錯誤。這是為什麼?這是因為/var/www/html文件夾中沒有什麼(在容器文件系統上),它是空的。

>

那麼,我們如何將文件放入該文件夾中?默認情況下,該文件夾停留在容器中,並且是看不見的。但是,不要長時間(別忘了docker rm wordpress)。首先,創建一個文件夾並在其中導航(別忘了刪除舊的WordPress容器)。

-v用於映射兩個文件夾。第一部分是OS上的文件夾,第二部分是容器文件系統中的文件夾。在類似Unix的系統上,“ $ PWD”返回命令運行時終端的位置。當您第一次啟動終端時,您將進入主目錄。 Windows上的等效物是CD。有關PWD的更多信息。
docker run --name wordpressdb -d mysql:5.7
登入後複製
登入後複製
登入後複製
登入後複製
> 因此,在我們的示例中,第一部分是“ $ pwd/”,它是本地目錄,第二部分是/var/www/html/。 -v都需要兩者都是完整的路徑。但是,如果我們查看工作目錄,我們可以看到那裡不存在文件。創建一個稱為index.php的文件,其中包含以下內容:

>

>在您的瀏覽器中再次檢查。這次,您會注意到IP地址已更改,因為我們創建了一個新的容器。每當我們創建一個新容器時,都會更改其IP。如果您在瀏覽器中看到該消息,那麼您已經完成了所有操作。

>
error: database is uninitialized and MYSQL_ROOT_PASSWORD not set
  Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?
登入後複製
登入後複製
登入後複製
>讓我們看看如果將WordPress文件放在那裡,會發生什麼。使用Docker Stop WordPress停止容器。從WordPress.org獲取WordPress的最新副本,然後將文件放入項目文件夾中。使用Docker Start WordPress再次啟動容器。另外,請注意,您最初需要使文件可讀。您可以在 *NIX系統上運行CHMOD -R 777 ProjectFolter。如果您重新加載頁面,您的瀏覽器會告訴您:

>

默認情況下,PHP映像沒有安裝MySQL擴展名,但是我們可以修復。這次,我們將通過Dockerfile構建一個容器。我們已經看到了Dockerfiles的工作原理。它們是由基本圖像構建的,進行一些處理,然後在最後執行一個命令。

創建一個名為dockerfile的新文件:
docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
登入後複製
登入後複製
登入後複製

我們要使用php:5.6-apache Image。

然後,我們將安裝mysqli擴展名。

接下來,我們需要像PHP映像一樣執行Apache2-Foreground(我們只需要安裝MySQL擴展程序)。

docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -d mysql:5.7
登入後複製
登入後複製
登入後複製

使用構建文件我們可以構建圖像。使用此圖像,我們構建了容器。

docker rm -f wordpressdb
登入後複製
登入後複製

-t用於給出存儲庫名稱。這 。告訴Docker Dockerfile在哪裡。由於Dockerfile位於工作目錄中。告訴docker它在工作目錄中。

>如果您使用Docker Images檢查圖像,現在您將看到帶有標籤最新圖像的新圖像(因為我們沒有為此圖像指定標籤)。現在,像我們使用php5.6-apache Image一樣構建使用此圖像的容器。

docker run --name wordpressdb -d mysql:5.7
登入後複製
登入後複製
登入後複製
登入後複製
>檢查您的瀏覽器中的容器IP,您會看到類似的東西:

>

如何為WordPress手動構建Docker容器如果您走了這麼遠,那麼您已經做對了。現在,我們必須將WordPress與數據庫鏈接。這遠離著名的5分鐘WordPress安裝和更複雜的安裝,但是從長遠來看,您會看到Docker的好處。

>我們如何將WordPress與數據庫鏈接?首先,我們需要將WordPress容器與數據庫容器(WordPressDB)鏈接。這可以通過鏈接兩個容器來完成。有關鏈接的更多信息,請參見此處。

新參數是 - 鏈接。第一部分WordPressDB是我們要鏈接的容器的名稱,第二部分MySQL是別名。 Docker修改了WordPress容器的主機,並將WordPressDB的IP設置為MySQL。因此,當我們在WordPress配置上填寫數據庫的信息時,我們將將主機設置為“ mysql”。
error: database is uninitialized and MYSQL_ROOT_PASSWORD not set
  Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?
登入後複製
登入後複製
登入後複製
現在,使用容器的IP(新IP)轉到瀏覽器。填寫數據庫的信息,然後登錄到管理員面板。如果您嘗試安裝一個新主題(將嘗試在文件系統上進行更改),您將看到類似的內容:

為什麼?這是因為運行Apache的用戶在文件系統上沒有寫入訪問。這是事情變得有些困難的地方。我們需要構建一個新版本的phpwithmysql映像。轉到您的Dockerfile並將其修改為這樣:

> 如何為WordPress手動構建Docker容器

>我們尚未創建entrypoint.sh文件,但是我們很快就會這樣做。複製Copies entrypoint.sh到容器內部 /內部。 CHMOD 777 /entrypoint.sh使該文件可執行。最後,入門點執行該文件。現在,在與DockerFile同一目錄中創建Entrypoint.sh文件。

docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
登入後複製
登入後複製
登入後複製
這是官方WordPress映像的簡化解決方法,但將確保我們對容器文件系統進行寫入訪問。我們現在可以構建新圖像:

docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress -d mysql:5.7
登入後複製
登入後複製
登入後複製
>確保卸下舊容器並創建新容器:>

docker rm -f wordpressdb
登入後複製
登入後複製

另外,請刪除舊的wp-config.php文件。

>
docker run --name wordpress php:5.6-apache
登入後複製
現在,檢查瀏覽器中的WordPress容器的IP。這次,您可以安裝主題和插件,並在容器文件系統上進行更改。

上面的某些步驟似乎很神秘且複雜。這就是為什麼有許多不同框架和語言的官方圖像的原因。每個框架或語言的工作方式都有不同的規格。默認情況下,Docker不允許應用程序在文件系統上寫入。這是一件好事還是好事?我認為這是一件好事。我們可以創建僅保存文件的第三個容器。那裡的應用程序可以寫文件。這樣,我們將擁有一個更模塊化的體系結構。但是對於那些無法更改的框架(例如WordPress),有解決方法。

>

最終調整

>我們要做的最後一件事是解決停止WordPress容器並重新開始時發生的問題。問題是WordPress將最後一個IP保存為其“家”和“站點” URL。停止WordPress容器並重新啟動。這次將有一個新的IP。如果您在瀏覽器中嘗試使用,則會看到圖像,CSS和JavaScript文件未正確包含。該解決方案很簡單,只需通過添加以下行來修改wp-config.php

docker run --name wordpressdb -d mysql:5.7
登入後複製
登入後複製
登入後複製
登入後複製
請注意,如果您在wp-config.php文件中定義了這些值,則在一般設置中以後無法更改它們。

結論

在本文中,我們介紹瞭如何為WordPress構建容器。我們以一種相當神秘的方式做到了這一點,長長的命令可能很難記住。應該有一種更簡單的方法,並且有! Docker團隊構建了一個WordPress映像,您可以在幾分鐘內輕鬆設置該圖像。畢竟,誰想記住每個設置WordPress的命令?

在本系列的下一篇文章中,向您展示瞭如何使用官方WordPress映像,我們還將學習如何使用Docker構成使事情變得更加容易的。

>

>如果有更簡單的方法,為什麼要寫這篇文章呢?從本質上講,這是為了更好地了解Docker的工作原理,要做到這一點,您必須對基本的複雜性弄髒手。這更多是個人規則,因此,當我明天使用Docker時,我會更多地了解它的工作原理以及如何根據我的需求進行調整。希望您現在也對Docker在幕後工作的工作有了更深入的了解。請繼續關注本系列中的第三篇文章,我們將與Docker和WordPress一起玩更多樂趣。

> 到目前為止,您對Docker有何看法?您會在下一個項目中考慮嗎?在下面的評論中讓我知道。

>常見問題(常見問題解答)有關WordPress構建Docker容器的問題

>如何確保我的WordPress的Docker容器是安全的?為了確保您的容器安全,請始終使用最新版本的Docker和WordPress。定期更新您的Docker圖像和容器,以包括最新的安全補丁。另外,使用Docker Secrets管理密碼等敏感數據。避免運行Docker容器作為根,以最大程度地減少容器的損害。最後,使用Docker安全掃描工具來識別和修復圖像中的漏洞。

我如何優化docker容器的性能,用於WordPress?

如何將docker容器的問題排除到WordPress? 🎜> Docker提供了多種故障排除的工具。使用“ Docker Logs”命令查看運行容器的日誌。如果您的容器崩潰,請使用“ Docker Inspect”命令獲取有關容器的更多信息。您還可以使用“ Docker Stats”命令來監視您的容器的資源使用情況。如果您面臨網絡問題,請使用“ Docker Network Inspect”命令來檢查您的Docker網絡。

>如何備份在Docker容器中運行的WordPress網站?

備份您WordPress站點在Docker容器中運行,您可以使用“ Docker CP”命令將文件從容器複製到主機計算機。您也可以使用Docker量來持久數據。如果您使用的是mySQL數據庫,則可以使用“ mySqlDump”命令來創建數據庫的備份。

>

>如何縮放在Docker容器中運行的WordPress站點?提供了一些用於擴展應用程序的工具。您可以使用Docker組合來定義和運行多容器應用程序,並通過增加容器實例的數量來擴展它們。您還可以使用Docker Swarm或Kubernetes,它們是可以在多個主機上管理和擴展容器的編排工具。

如何自動化Docker Containser中的WordPress網站的部署?您可以使用CI/CD工具(例如Jenkins,Travis CI或GitHub操作)自動在Docker容器中部署WordPress網站。這些工具可以構建您的Docker映像,運行測試並將容器部署到Docker主機或Kubernetes群集。

>如何管理Docker容器中的多個WordPress站點?

>

在Docker容器中管理多個WordPress站點,您可以使用Docker組合將每個站點定義為單獨的服務。您還可以使用Docker網絡來隔離每個站點的網絡流量。如果您使用的是nginx之類的反向代理,則可以將其配置為基於域名的流量將流量路由到適當的容器。

如何更新在docker容器中運行的WordPress站點?

>

>要更新在Docker容器中運行的WordPress站點,您可以從Docker Hub中摘取最新的WordPress映像,停止運行的容器,並使用更新的圖像啟動新的。請記住在更新之前要備份數據。

>如何監視在Docker容器中運行的WordPress站點?

docker提供了幾種用於監視容器的工具。您可以使用“ Docker Stats”命令來監視容器的資源使用情況。您還可以使用Prometheus和Grafana之類的工具從容器中收集和可視化指標。

>我如何將現有的WordPress網站遷移到Docker容器? >

以上是如何為WordPress手動構建Docker容器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板