2015年3月16日

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

Docker是一個近來快速興起的虛擬化技術,與虛擬機器不同的是,docker以應用程式為中心,將應用程式執行階段所需要的程式碼、函式庫等與OS/硬體層分離。在OS內的核心系統層打造虛擬執行環境。由於他不需要在Container內執行OS,因此不需要等待開機的時間,一個應用程式可以在幾秒之內就啟動並開始提供服務。

這系列的文章將會介紹透過Azure虛擬機器建立一個如下的Tomcat+mySQL環境,由於筆者只是個Linux初學者,因此除了需要能夠達到Load balance web server以及mySQL必須位於另一個host上之外,一切其他都會盡量以較簡單的方式來達成。

topology

事前準備

  • 建立一個虛擬網路DockerVnet,分為兩個子網段Subnet-Web1(10.0.0.0/11)與Subnet-DB(10.32.0.0/11)

建立虛擬機器

建立虛擬機器的步驟比較簡單,Azure的Gallery已經提供了幾個內建docker服務的image可以選擇;我們需要做的就是到Azure Portal建立兩台Web Host加入Subnet-Web以及一台SQL Host加入Subnet-DB

image

  • 建立虛擬機器dockerweb1,確認將他加入虛擬網路中

image

  • 重複以上步驟將dockerweb1、dockerweb2與dockermysql1建立完成
  • 建立完成後,你應該可以在Resource Group中看到所有的機器,下圖中的haproxy為筆者後續建立用來做load balance測試之用,這裡可以先跳過他。

image

設定Tomcat Container

建立虛擬機器完成後,接下來便是設定我們的Container;由於筆者需要的情境是兩台host上各自建立一個container執行tomcat應用程式;此tomcat應用程式需要到mysql上取得資料並顯示。因此在這裡我們需要在dockerweb1與dockerweb2上建立一個container,在container中安裝tomcat與java runtime,安裝我們的應用程式並設定連線資訊指向mysql。

由於特殊需求,我需要將tomcat安裝在CentOS 5.8的image上,因此以下的範例,Container都是用CentOS 5.8的版本;但是實際上當然可以依照需求修改。

  • 首先ssh到dockerweb1上確認docker服務已經安裝與執行

image

  • 接著,我從docker registry中取得CentOS 5.8的image
    • sudo docker pull gpmidi/centos-5.8
  • 完成後確認docker image
    • sudo docker images

image

  • 接著,以此image啟動container,我們會在這個container中安裝tomcat及java環境
    • sudo docker run –it gpmidi/centos-5.8 bash

image

  • 請特別注意這裡紅色框框的地方,這是container id,稍後我們會需要這個container id

image

  • 在container中安裝Java環境,由於這裡的動作都是標準動作,因此這裡就只列出我使用的命令
  • 安裝完成後,切換到tomcat\bin目錄執行sh startup.sh測試安裝結果
  • 確定完成後,執行exit離開此container
  • 回到host環境後,要將剛剛我們針對container設定的改變commit回local repository
    • sudo docker commit -a=”Michael” -m=”TOMCAT” <<Container ID>> <<Repository>>
    • 例如:sudo docker commit -a=”Michael Chi” -m=”Tomcat” 123456 michilab;則以後我們可以直接以michilab這個image來啟動已經設定好tomcat的container
  • 重複以上步驟將dockerweb2也設定完成

設定mySQL Container

  • SSH到mySQL Host (dockermysql1)上,抓取CentOS 5.8的image,啟動此container
  • 在此container安裝mySQL
    • yum install mysql-server mysql php-mysql
  • 安裝完成後,修改網路設定檔
    • vi /etc/sysconfig/network
  • 把host name改為以下
    • HOSTNAME=internal.hostname.DOMAIN.com
  • 啟動mysql伺服器
    • service mysqld start
  • 設定root使用者的帳密

mysql -u root
Set the root user password for all local domains
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new-password');
SET PASSWORD FOR 'root'@'localhost.localdomain' = PASSWORD('new-password');
SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('new-password');
Drop the Any user
DROP USER ''@'localhost';
DROP USER ''@'localhost.localdomain';
Exit MySQL

  • 建立測試用的資料庫

CRETE DATABASE test
Use test
CREATE INSTANCE mysqld98 basedir="/var/mysql98"
CREATE TABLE `memMember` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `fbId` varchar(20) DEFAULT NULL,
  `name` varchar(50) NOT NULL,
  `birthday` datetime DEFAULT NULL,
  `phone` varchar(30) DEFAULT NULL ,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  • 執行exit離開container
  • 回到host commit改變
    • sudo docker commit -a=”Michael” -m=”mySQL” <<container id>> <<repository>>

沒有留言:

Blog Archive

About Me