雖然我不知道這樣做有什麼特別的用途,但是,透過Docker確實是可以這樣子玩。以下是對於這個問題的描述。

首先,我們有一台Linux機器,跑的是CentOS作業系統,我把它的網址設定為192.168.1.11,然後依照【上一篇文章】的說明,我們在上面安裝了Docker,同時也pull了wordpress和mysql兩個image。但是和上一篇文章只建立一個測試用,重啟動之後會還原的WordPress網站不同的地方在於,我們把mysql的資料庫以及wordpress的個人檔案都map到本地端的目錄上,因此,就算是重新啟動Docker的容器,之前所有做過的修改全部都會被保留下來。

但是,重點來了,在對應目錄出來的時候,我們使用的是「相對路徑」!有趣的地方就在這邊。我在個人目錄minhuang之下建立了wp1以及wp2兩個目錄,分別是/home/minhuang/wp1以及/home/minhuang/wp2。當我在/home/minhuang/wp1之下啟動wordpress和mysql容器,和我在/home/minhuang/wp2之下啟動wordpress和mysql容器,使用同樣的網址以及埠號http://192.168.1.11:32768瀏覽網站,我看到的是兩個不同的網站。

執行mysql容器的方法:

docker run --name wordpressdb -e MYSQL_ROOT_PASSWORD=smile -e MYSQL_DATABASE=wordpress -v "$PWD/mysqldata/":/var/lib/mysql -d mysql:5.7

執行wordpress容器的方法:

docker run -e WORDPRESS_DB_PASSWROD=smile -d --name wordpress --link wordpressdb:mysql -p 192.168.1.11:32768:80 -v "$PWD/":/var/www/html wordpress

意思是說,上述兩個同樣的啟動指令,在不同的目錄下執行時它們拿到的資料庫內容以及WordPress個人化檔案是不一樣的,而且放在各自的目錄中。那麼表示,當我在wp1內和wp2內使用同樣的參數執行同樣的容器,執行到的是不同的網站。而我只要切換目錄,然後使用docker stop 和 docker rm 指令把現有執行中的容器移除,再重新執行一遍,在客戶端以同樣的網址看到的網站,會馬上切換到另外一個去。

以下是執行指令的過程:

cap 2015-08-21 下午2.23.35

在/home/minhuang/wp1執行之後,瀏覽器看到的內容:

cap 2015-08-21 下午2.22.32

在/home/minhuang/wp2執行之後,瀏覽器看到的內容:

cap 2015-08-21 下午2.23.50

當然,你設定的參數不一定要一樣的,你也可以使用不同的網址和埠號讓這些容器同時存在,那麼你就很快地在同一台機器上部署非常多的網站,而且速度很快,不需要一個一個重新安裝,

如果同一個網站要換到另外一台主機,因為我們使用的是官方提供的標準image,所以只要把檔案打包到目標主機,然後執行同樣的指令,你的網站馬上在不同台主機上恢復,非常方便。但是有一點也是要留意的,就是你換了主機的時候(例如我們把wp2的網站從192.168.1.11:32768換到192.168.1.10),資料庫中的IP還是要把它改掉,不然會跑回原來的網址去喔。

進入mysql容器請使用以下的指令:

docker exec -it wordpressdb bash

然後再利用以下的指令進入mysql互動式命令列管理介面,找到wp_options中的網址,把它們改掉就可以了。

root@4303df2542db:/# mysql -uroot -psmile
mysql> use wordpress;
mysql> update wp_options set option_value='http://192.168.1.10' where option_name='home' limit 1;
mysql> update wp_options set option_value='http://192.168.1.10' where option_name='siteurl' limit 1;

(691)

%d 位部落客按了讚: