2015年3月16日

在Azure上透過Docker建立Tomcat+mySQL環境 (2)

上一篇文章中我們將host container所需要的環境建置完成,並且也設定了container image;接著我們要將tomcat網站與mySQL連接起來,並且設定Load balancer來Load balance tomcat網站的流量。

Load Balance的部分,一開始我們會透過Azure本身的Load Balance Set來達成。由於tomcat預設使用8080 port,因此在Load Balance Set的設定上,我們會把Public 80 port對應到Privte 80 port;然後透過docker本身,將host的80 port與container的8080做mapping。

image

設定LBSet

  • 登入http://manage.windowsazure.com
  • 打開虛擬機器 –> dockerweb1 –> Endpoints
  • 新增一個Load Balanced端點,設定Public Port為80,Private Port為80

image

  • 切換到dockerweb2的端點設定,新增一個端點並加入剛剛建立的LBSet中

設定Tomcat應用程式

  • SSH到dockerweb1
  • 建立一個新的folder /home/azureuser/webapps;稍後我們會將這個folder與tomcat container中的webapps目錄作對應,如此一來,當我們在host修改這個目錄下的檔案,也會直接反映在container中的相對應的folder中。可以把這個方式想像成是在container裡面設定一個map folder到host中,方便管理。
  • 透過以下的指令執行tomcat container(這邊叫做michilab);其中:
    • -v用來指定folder對應;
    • -p用來指定將host的80 port對應到container的8080 port;
    • -d表示這個container將以背景模式執行

sudo docker run -p 80:8080 -d -v /home/azureuser/webapps/:/tmp/apache-tomcat-7.0.59/webapps michilab /bin/sh /tmp/apache-tomcat-7.0.59/bin/catalina.sh run

  • 接著,把我的測試用tomcat程式下載到host上的/home/azureuser/webapps中,並確定已經修改web.xml中的連線資訊指向mySQL Server;其中10.32.0.4:3306是dockermysql1的IP及host port

image

  • 在dockerweb2執行上述指令

設定mySQL

mySQL預設使用3306 port,這裡我會將host 3306與container 3306做對應;因此tomcat可以透過host IP:3306來與mySQL溝通

  • ssh到mySQL host將測試用的資料庫以及資料建置完成
  • 透過以下指令加入一個新的使用者,並允許遠端連線

INSERT INTO user(host,user,password) VALUES('%','apuser',password('mypassword'));
GRANT ALL ON *.* TO 'apuser'@'%' identified by 'mypassword'';
FLUSH PRIVILEGES;

  • 離開container並commit以上的改變,然後執行以下的命令啟動mySQL container
    • Sudo docker run -t –i –p 3306:3306 michilab bash
  • 在container中執行以下指令啟動mySQL service
    • service mysqld start

如此以來所有的準備都完成了,接著打開瀏覽器瀏覽Cloud Service的網址,應該就可以看到結果了。

在這個Lab中,我們為了簡單,在每一個host上只啟動一個container;這樣的好處是可以直接利用Azure LBSet來做Load balance;後續我們會透過HAProxy建置一個簡單的proxy,來load balance多個container在一個host上的情況。

沒有留言:

Blog Archive

About Me