使用Docker安裝WordPress

既然Docker提供了包括像是MySQL這一類的伺服器映像檔,那麼WordPress這種映像檔當然也會有,只是這個映像檔本身通常不包含MySQL,而且CMS網站最重要的目的是在安裝之後可以透過使用者以管理頁面的方式進行修改,修改後的內容不只需要能即時在網頁上更新,也需要能夠長久保存下來,因此,一些相關的設定就需要透過一篇文章來加以說明。

一般而言,要透過Docker來安裝WordPress需要至少2個不同的容器彼此相互搭配,在此例子中,一個是MySQL容器,而另外一個是WordPress容器,我們可以利用以下兩個指令分別把它們的映像檔下載到我們自己的電腦作業環境中:

docker pull mysql
docker pull wordpress

如果你使用的是樹莓派的話,上述的mysql並沒有對應的image,所以會告訴你無法下載。此時,你要使用的是以下的這個樹莓派專用的image,而且在之後的指令中,如果使用到的是mysql,都要把它換成hypriot/rpi-mysql這個images名稱才行:

docker pull hypriot/rpi-mysql

上述這兩個指令都會下載到最新版本的官方映像檔,它們的使用方法可以到DockerHub上查詢,專屬的網頁上都有詳細的說明。下載完畢之後,如果我們直接使用docker run指令分別啟動這兩個容器的話,在預設的情況下它們彼此是無法連通的,因此,為了讓wordpress這個容器可以連線到mysql以作為它自己的資料庫儲存器,最好的方法是另外建立一個網路,並把這兩個容器連接到相同的網路。在此例中,我們使用docker network指令建立連接用的網路:

docker network create wp-network

環境中所有可以使用的容器網路也可以利用以下的指令查詢:

docker network ls

有了可以連通的網路之後,就可以在啟動容器時以「–network」這個旗標來指定容器所使用的網路,以下是啟動wordpress的指令:

docker run -d -p 8080:80 --network wp-network -v //c/Users/minhuang/docker-test/wp:/var/www/html wordpress

除了指令使用的網路之外,wordpress容器還有許多要加上去的參數,分別是利用「-p」開放主機端可以使用的連接埠,上述的例子中我們開放了8080這個連接埠用來存取這個WordPress網站。接著,我們希望所有網站上的內容在更新之後必需要能夠被保存下來,因此要把它的/var/www/html映射到我們的主機資料夾中,這要以「-v」來完成,當然也可以建立一個Docker的Volume來保存。最後,因為它是一個需要在背景中執行的容器,所以要加上「-d」參數。

在MySQL資料庫的部份,則是執行以下這個指令來開啟mysql這個容器:

docker run -d --network wp-network -p 3307:3306 -v //c/Users/minhuang/docker-test/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345678 mysql

上述指令要指定和wordprss使用相同的網站,這樣彼此才能互通。另外,mysql容器也要指定資料庫要永久儲存的資料夾位置,以及加上一個環境變數MYSQL_ROOT_PASSWORD用來指定root使用者的密碼。在這個指令中,我們把它對外(也就是在Windows主機端中使用時)的連接埠設為3307,這只適用於在Windows要對這個資料庫連線時需要指定的連接埠,但是在Docker的內部網路中,它的連接埠還是3306。

在執行了上述的指令之後,使用docker ps,可以看到以下的結果:

此時當我們在本地端的瀏覽器輸入「localhost:8080」這個網址時,就可以看到著名的WordPress簡易安裝介面,如下所示:

在進入WordPress的安裝步驟之後,即可看到以下的資料庫連接設定畫面:

我們可以先在本地端以msyql客戶端去建立所需要的資料庫以及使用者名稱及密碼,或是使用者直接使用root,密碼則是在啟動mysql容器時給予的密碼。但是,mysql容器的網址是什麼呢? 使用docker network inspect指令即可查找得到,如下的內容在執行docker network inspect wp-network之後所得到的結果:

[
    {
        "Name": "wp-network",
        "Id": "f90a5e66e15701ea169fe5c26facc7bd62bc7df2aff7fab82f1ee50a41562039",
        "Created": "2022-05-31T11:25:43.153184258Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "2d2b90049824e7f1794cdd5bd96c27bdf3c246ffb89879ff90670e8e29cafedd": {
                "Name": "stoic_moore",
                "EndpointID": "baac319739decb360cfe753c699243b853362da238722afd9977363e99f9caa7",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            },
            "e70dae87ddfc350189d7e87c6954efea07b8b7c78e5ce778adef668fe59bd8dc": {
                "Name": "serene_bassi",
                "EndpointID": "39f851375deff03b9e85984e3a18310b9609009a497a792ce50db323923cbba2",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

配合docker ps所查詢到的容器名稱,我們可以瞭解到mysql被分配到的網址是172.19.0.3,我們可以直接利用以下的指令進入正在執行中的mysql容器:

doccker exec -it stoic_moore bash

然後在它的容器中建立WordPress所需要的資料庫資訊,最後,在安裝頁面中把這些資料填入即可:

在按下傳送之後,即可得到以下的畫面:

在按下「執行安裝程式」按鈕之後,沒多久的時間WordPress網站就安裝完成了。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *