2016年11月21日 星期一

Docker for Windows - Microsoft SQL Server on Linux 與 Visual Studio Code 操作

是的,在今年三月的時候微軟就已經宣佈要讓 SQL Server 放在 Linux 系統裡,而在前陣子的 Microsoft Connect(); 2016 大會裡發表了 Microsoft SQL Server for Linux v.Next,雖然離真正可以商業應用的階段可能還要一段時間,但是我想不久的將來微軟應該就可以完成這個目標,畢竟目前 Linux 系統的市佔率是節節升高,微軟以及使用微軟技術的工程師們必須正視這樣的轉變,也必須進早熟悉和因應。

數位時代 配圖

這一篇文章將會簡單的介紹如何以 Docker 的方式讓 MS SQL Server for Linux 運行在 Docker for Windows 上。

 


SQL Server on Linux: overview | Connect(); // 2016 | Channel 9

在開始進行前,先看一段影片吧

https://channel9.msdn.com/Events/Connect/2016/101

image

這一段影片裡就已經有展示了在 Linux Ubuntu 作業系統裡,使用 Docker 的方式建立並執行一個 MS SQL Server Container,並且以 Node.js 的程式與這個運行在 Docker 裡的 MS SQL Sever 做連接。

 

搜尋 Docker Hub

開啟 PowerShell 然後執行指令「docker search mssql-server」,搜尋 Docker Hub 的結果就咧出了幾個相關 mssql-server 的 images

image

在 image 名稱有 windows 後綴的,那幾個都是只能運行在 Windows Container 上,無法運行在 Linux base 的 Docker 環境裡,另外還有幾個不是微軟官方所發佈的 image 檔案,就不在這次的討論範圍裡,我們要用的是「microsoft/mssql-server-linux

 

先來看看 microsoft/mssql-server-linux 在 Docker Hub 上的說明頁面

https://hub.docker.com/r/microsoft/mssql-server-linux/

image

在說明頁面裡有簡單的使用說明,使用這個 image 有一些限制,所以要多加注意

Running this image requires 3.25 GB of RAM available for the container. If you are running the container on Docker for Mac or Docker for Windows, please adjust the amount of RAM available to Docker to 4 GB.

 

SQL Server v.Next—SQL Server on Linux | Microsoft

另外 SQL Server v.Next 有個專門的產品網頁,大家可以前往瞭解

https://www.microsoft.com/en-us/sql-server/sql-server-vnext-including-Linux

image

在下方的 Download SQL Server v.Next 區塊可以下載到各種作業系統版本的 SQL Server v.Next

image

選擇「Pull and run SQL Server on a Linux container on Docker」將會前往說明文件頁面

 

Run the SQL Server Docker image on Linux, Mac, or Windows - SQL Server vNext CTP1 | Microsoft Docs

https://docs.microsoft.com/zh-tw/sql/linux/sql-server-linux-setup-docker

image

Requirements for Docker

  • Docker Engine 1.8+ on any supported Linux distribution or Docker for Mac/Windows.
  • Minimum of 4 GB of disk space
  • Minimum of 4 GB of RAM

    磁碟空間要至少有 4 GB,記憶體至少要有 4 GB

     

    調整 Docker for Windows 使用的記憶體大小

    因為要執行 MS SQL Server for Linux 至少要有 4 GB RAM,所以要調整 Docker for Windows 的設定值,一開始安裝 Docker for Windows 都不會去改變 CPU 數與記憶體使用大小,所以滑鼠右鍵點擊右下角在工作區的 Docker 圖示,然後點選 Settings,接著選擇「Advanced」然後將記憶體調整為使用 4096 MB或更多,調整完畢後要記得點選右下方的「Apply」,接著 Docker 就會重新啟動

    image

     

    下載並啟動 Docker image

    在 PowerShell 裡輸入「docker pull microsoft/mssql-server-linux」,因為這個 image 檔案有點大,所以拉下來的時間會稍微久一些

    image

    啟動拉下來的 image,輸入

    docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -d microsoft/mssql-server-linux
    上面的指令裡的「
    <YourStrong!Passw0rd>」是要輸入 SA 登入的密碼
    注意:密碼長度須為 8 以上,要包含大寫字母、小寫字母、數字、特殊符號
    image
     

    以 SSMS 連接並登入資料庫

    開啟 SSMS 並且在連接資料庫的項目裡將伺服器名稱輸入 localhost,而帳號為 sa,密碼則是剛才建立並執行 container 所輸入的密碼

    image

    image

    SQL Server on Linux 的版本號為 14.0.1.246

    https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-release-notes

    image

    預設沒有更改資料庫預設位置的話,預設是會放在「C:\var\opt\mssql\data」裡

    image

     

    如果要更改資料庫預設位置,則啟動 container 時的指令要改用以下的內容

    docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v <host directory>:/var/opt/mssql -d microsoft/mssql-server-linux

     

    使用 Visual Studio Code 的擴充功能管理 SQL Server

    如果是在 Linux 作業系統裡安裝 SQL Sever for Linux,以純指令碼的方式也是可以管理,但總是不太方便,所以在 GUi 環境裡可以安裝 Visual Studio Code,然後再安裝擴充功能「vscode-mssql」就可以在 Visual Studio Code 有著如同 SSMS ( SQL Server Management Studio ) 的操作功能與體驗,感謝 Dino WangCheng-Ju Wu 的資訊提供。

    mssql - Visual Studio Marketplace
    https://marketplace.visualstudio.com/items?itemName=ms-mssql.mssql

    image

    要安裝紅線框起來的那個喔

    image

     

    連接 SQL Server on Linux

    在 vscode 裡使用快速鍵 CTRL +SHIFT + P,接著輸入 SQL 之後就可以看到 MS SQL: Connect 的指令

    image

     

    第一次連接,選擇 Create Connection Profile

    image

    中間有些過程就省略不截圖說明,因為都照著步驟說明一步一步填寫需要的連接資訊

    image

    在編輯區裡輸入就會有 Intellisense 帶出相關指令

    image

    我事先有先建立好 Northwind 資料庫,所以要切換到 Northwind 裡

    image

    image

     

    輸入 T-SQL 指令也會有 Intellisense 帶出 Table, Column 等名稱和指令

    image

    當輸入完一個 T-SQL 查詢指令後,要執行這段指令則是要案下快速鍵「CTRL +SHIFT + E」就會顯示查詢後的結果

    image

    這個 extension 有提供匯出的功能,匯出 csv 與 json

    image

    以下是將資料匯出為 json 後並開啟匯出的 json 內容

    image

    好了,就這樣吧。

    如果想要至到更多,例如:建立資料庫、建立 Table、Insert Update Delete 等,就請查看以下的文件內容。

    Use the mssql extension for Visual Studio Code
    https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-develop-use-vscode

     


     

    延伸閱讀與參考連結

    SQL Server on Linux Documentation | Microsoft Docs
    https://docs.microsoft.com/en-us/sql/linux/

    SQL Server - Getting Started
    https://www.microsoft.com/en-us/sql-server/developer-get-started/

    Use the mssql extension for Visual Studio Code
    https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-develop-use-vscode

    mssql - Visual Studio Marketplace
    https://marketplace.visualstudio.com/items?itemName=ms-mssql.mssql

    Linux 上的 SQL Server—預覽 | Microsoft
    https://www.microsoft.com/zh-tw/server-cloud/sql-server-on-linux.aspx

     

    以上

    6 則留言:

    1. 抱歉,能否說個題外話
      LINUX平台上的DOCKER、KVM、Vmware........已經都有練習過
      對於虛擬化在linux上有初步瞭解
      一直以來都想要關注windows on Docker,也就是windows container
      訂閱幾個技術Blog,總算看到有人想要討論這一塊
      不知道windows container這一塊要從何處下手?
      除了安裝windows 2016以外,還有無其他方式可在linux上執行windows container?
      相關操作是否跟Docker指令一致?
      煩請KT桑開導一下,
      感謝萬分

      回覆刪除
      回覆
      1. Hello, 你好
        Windows container 也會是之後幾篇文章的內容,所以敬請期待
        另外先說明的是 Windows Container 目前的版本是無法在 linux 上面執行的
        Linux Container 目前只能在 Docker for Windows 上面執行,無法在 Windows 的「容器」裡執行
        Windows Container 目前只能在 Windows「容器」裡執行,無法運作在 Linux 基礎的 Docker 裡
        就我目前所接觸的操作指令,兩種系統的 Docker API 指令是一致的,這也是微軟一開始所保證的

        刪除
      2. 感謝KT桑熱心的回覆
        正是因為看到版主已經宣告後續會陸續介紹Windows container
        心裡迫不及待的想要請教版主相關問題

        所以,依照微軟目前方式,除非微軟的產品已經移轉到Linux平台上
        (SQL server、.net......),才「可能」有方式能實現Docker on Linux
        其他原生的exe檔案,只能使用wine、KVM.....等虛擬化的HOST安裝windows作業系統

        個人追番太過心急,還是靜待版主陸續釋出作品(敲碗...、樓主好人)
        再次感謝版主提供訊息

        刪除
      3. 對了,在 Windows 10 專業版或 Windows Server 2016 才能安裝使用 Docker for Windows 與 Windows 容器
        兩者可以一起裝在一個作業系統環境裡,但是兩者不能同時啟用,一次只能啟動一種
        不過在 Production 環境裡,Linux Container 當然還是要放在 Linux 作業系統裡的 Docker
        而 Windows Container 就放在 Windows Server 2016 的容器環境

        刪除
    2. 你好,
      曾幾何時,我都是ASP.NET webform的愛好者 (1.1 ~ 4.0時代), 當時跟你一樣我都會寫一下ASP.NET文章

      但幾年工作上開始轉向dataware house 和網頁frontend (bootstrap等等),ASP.NET MVC5是有工作上用過,但只是一個得6個月的短期專案. 而且轉變到.NET Core實在追不上進度,感覺如當年VB6轉移到.NET一樣,實在迫不得已把ASP.NET放下.

      近日看到你的文章,原來現在VM已經發展到沒有GuestOS, 單單container加dependency就可以,驚覺自己實在要好好追趕知識。
      所以想問一下網主,平日你都會看什麼網誌的?國外和台灣都想知道一下,讓我可以跟隨你的步伐。

      回覆刪除
      回覆
      1. 你好
        Docker 這種容器化技術與 VM 是有所分別的,雖然都是虛擬化的技術,但不能算是 VM
        Docker 這部分我也是初學入門而已,相關技術的正體中文內容可以搜尋 Docker Taipei
        https://www.facebook.com/groups/docker.taipei/

        刪除

    提醒

    千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。