logo头像

Edward.K Thinking

(Docker Swarm)Azure Container Service中建立MS SQL Server for linux

繼上一篇的Azure Container Service初體驗之後,就在想要如何去應用ACS(Azure Container Service的簡稱)的功能,有什麼場景是在對於系統開發或是企業應用方面有幫助的方案,突然,想到其中一個方式,就是建立開發測試的資料庫,在開發時期拿來使用,所以,用ACS建立一個臨時要用的資料庫來做測試用,或許也是一個不錯的選擇,其實,也是可以做為微服務中的資料庫區塊

不過,說這樣多,還是先在ACS中建立一個可外部連線的資料庫吧

ACS的Docker Swarm


如果要使用Docker Swarm模式,就必須先了解這張圖架構圖,這張圖是說明了ACS中的Docker Swarm架構,這是非常重要的,在這之中包含了Master & Agent,與網路結構

不過,有一點不解的是這張圖的Master對應到的NAT,但是實際上建置起來後,是對應到Load Balance,也就是說是跟Agent相同,在Agent的Load Balance
80,443 & 8080的Port有被設定對外開放,如果今日你需要的服務對應的Port沒有被開啟,必須要在Loader Balance控制器做開起設定,就如等下做的SQL Server,必須要去開起1433,不然,外部系統是無法連線的到內部Container,如果是在Master,所有Port預設都是沒有被開放,必須自己去做設定
輸入docker info得到的資訊,如下

如果是想要知道Master的Docker Host資訊,輸入docker -H 172.16.0.5 info就可以得知此Host的資訊,以及此Host對應的Agent IP

如前面所講的,因為是要安裝SQL Server,所以,需要再ACS的Loading Balance控制器設定對外與對內Mapping的Port

狀態探查地方加入SQL的1433 Port,通訊協定選擇TCP

再到負戴平衡的地方,加入SQL的規則

設定內的內容會是下面這樣

以上設定完後,後續等安裝完SQL,就可以透過SSMS連線進去

安裝SQL Server for Linux


Swarm中,所具備的VM是屬於Linux作業系統,所以,用一般的SQL Server是無法安裝的,必須使用SQL Server for Linux,因此,必須先去Docker Store下載,因為主要是在於開發使用,在SQL Server for Linux內的一些管理功能可能無法與一般的SQL Server一樣齊全,不過,這倒是影響不大

下載SQL Server for Linux

1
docker pull microsoft/mssql-server-linux

開始安裝SQL Server for Linux,預設登入帳號是SA

1
docker -H 172.16.0.5:2375 run --name linuxSQL -d -p 1433:1433 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=XXXXXX' -d microsoft/mssql-server-linux

當安裝完畢後,輸入docker -H 172.16.0.5:2375 ps -a就可以下面資訊,表示服務有起來了,其中,會看到Port的對應關係是10.0.0.5,表示是位在Agent VM段

1
2
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                     NAMES
2b37e7cdf38d microsoft/mssql-server-linux "/bin/sh -c /opt/m..." 24 hours ago Up 23 hours 10.0.0.5:1433->1433/tcp swarm-agent-615DB80F000001/linuxSQL

docker -H
-H, –host=[unix:///var/run/docker.sock]: tcp://[host:port]來綁定或者 unix://[/path/to/socket] 來使用。在 daemon 模式下綁定的 socket,透過一個或多個 tcp://host:port, unix:///path/to/socket, fd://*

這樣就安裝完畢,看是很簡單,當時要搞定這個,還花了不少時間,最常看到就是Port的資訊是空的,這表示SQL Server並未真正啟動,只是安裝好Container而已,還必須要透過docker run啟動

SSMS連線


設定好Container後,就必須要能進行連線,這邊是透過外部方式連入到ACS內的Container,因為是使用SQL Server,那就用SSMS工具來進行測試吧,要測試前首先要知道ACS對外的FQDN或是IP位置,我們可以去公用IP位址的服務找到Agent對外IP和Host Name

在資料庫伺服器位置,需輸入tcp:IP or tcp:hostname,同時,輸入你剛剛安裝SQL Server的Password,如果Container正常啟動,這樣就可以連入進去了,這裡看到名稱剛好會是Container ID

上一篇