使用 Docker 部署 Azure SQL Edge

重要

Azure SQL Edge 不再支援 ARM64 平台。

在本快速入門中,您將使用 Docker 提取與執行 Azure SQL Edge 容器映像。 然後與 sqlcmd連線來建立您的第一個資料庫並執行查詢。

此映像由 Ubuntu 18.04 為基礎的 SQL Edge 組成。 您可以在 Linux 上將其與 Docker 引擎 1.8 以上版本搭配使用。

在生產工作負載的下列平台上不支援 Azure SQL Edge 容器:

  • Windows
  • macOS
  • Azure IoT Edge for Linux on Windows (EFLOW)

必要條件

  • 任何支援的 Linux 發行版本上的 Docker 引擎 1.8 以上版本。 如需詳細資訊,請參閱安裝 Docker。 由於 SQL Edge 映像是以 Ubuntu 18.04 為基礎,因此建議您使用 Ubuntu 18.04 Docker 主機。
  • Docker overlay2 儲存體驅動程式。 這是大部分使用者的預設值。 如果發現您未使用此儲存體提供者且需要進行變更,請參閱用於設定 overlay2 的 Docker 文件 (英文) 中指示和警告。
  • 至少 10 GB 的磁碟空間。
  • 至少 1 GB 的 RAM。
  • Azure SQL Edge 的硬體需求

注意

本文中的 Bash 命令會使用 sudo。 如果您不想使用 sudo 來執行 Docker,您可以設定 Docker 群組,並將使用者新增至該群組。 如需詳細資訊,請參閱 Post-installation steps for Linux (適用於 Linux 的安裝後步驟)。

提取及執行容器映像

  1. 從 Microsoft Container Registry 提取 Azure SQL Edge 容器映像。

    sudo docker pull mcr.microsoft.com/azure-sql-edge:latest
    

    先前的命令會提取最新的 SQL Edge 容器映像。 若要查看所有可用的映像,請參閱 azure-sql-edge Docker Hub 頁面 (英文)。

  2. 若要使用 Docker 執行容器映像,您可以使用下列來自 bash 殼層的命令:

    • 啟動作為開發人員版本執行的 Azure SQL Edge 執行個體:

      sudo docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=1' -e 'MSSQL_SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 --name azuresqledge -d mcr.microsoft.com/azure-sql-edge
      
    • 啟動作為進階版本執行的 Azure SQL Edge 執行個體:

      sudo docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=1' -e 'MSSQL_SA_PASSWORD=yourStrong(!)Password' -e 'MSSQL_PID=Premium' -p 1433:1433 --name azuresqledge -d mcr.microsoft.com/azure-sql-edge
      

    重要

    密碼應遵循 Microsoft SQL Database 引擎預設密碼原則,否則容器將無法設定 SQL Database 引擎並停止運作。 根據預設,密碼長度必須至少有 8 個字元,並包含下列四種字元組合中其中三種組合的字元:大寫字母、小寫字母、以 10 為底數的數字以及符號。 執行 docker logs 命令即可查看錯誤記錄。

    下表提供了前述 docker run 範例的參數描述:

    參數 描述
    -e "ACCEPT_EULA=Y" ACCEPT_EULA 變數設為任意值可確認您接受終端使用者授權合約。 SQL Edge 映像的必要設定。
    -e "MSSQL_SA_PASSWORD=yourStrong(!)Password" 指定您自己的強式密碼,該密碼長度至少需為 8 個字元且符合 Azure SQL Edge 密碼需求。 SQL Edge 映像的必要設定。
    -p 1433:1433 將主機環境上的 TCP 連接埠 (第一個值) 對應至容器中的 TCP 連接埠 (第二個值)。 在本範例中,SQL Edge 正在接聽容器中的 TCP 1433 且對主機上的連接埠 1433 公開。
    --name azuresqledge 為容器指定自訂名稱,而不使用隨機產生的名稱。 若您執行數個容器,便無法重複使用此相同名稱。
    -d 在背景執行容器 (精靈)

    如需所有 Azure SQL Edge 環境變數的完整清單,請參閱使用環境變數設定 Azure SQL Edge。您也可以使用 mssql.conf 檔案來設定 SQL Edge 容器。

  3. 若要檢視 Docker 容器,請使用 docker ps 命令。

    sudo docker ps -a
    
  4. STATUS 資料行顯示的狀態為 Up,表示 SQL Edge 正在容器中執行且正在接聽於 PORTS 資料行中指定的連接埠。 若 SQL Edge 容器的 STATUS 資料行顯示 Exited,請參閱 Azure SQL Edge 文件的「疑難排解」章節。

    -h (主機名稱) 參數也相當實用,但為求簡明因此未在本教學課程中使用。 此參數可將容器的內部名稱變更為自訂值。 這是您在下列 Transact-SQL 查詢中傳回的名稱:

    SELECT @@SERVERNAME,
        SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
        SERVERPROPERTY('MachineName'),
        SERVERPROPERTY('ServerName');
    

    建議您將 -h--name 設為相同的值,這會讓識別目標容器更輕鬆。

  5. 因為 MSSQL_SA_PASSWORD 會顯示在 ps -eax 輸出,且儲存在相同名稱的環境變數中,所以最後一個步驟是變更您的 SA 密碼。 請參閱下列步驟。

變更 SA 密碼

SA 帳戶是在安裝期間建立的 Azure SQL Edge 執行個體系統管理員。 在您建立 SQL Edge 容器之後,在容器中執行 echo $MSSQL_SA_PASSWORD,即可探索您指定的 MSSQL_SA_PASSWORD 環境變數。 基於安全性考量,請變更您的 SA 密碼。

  1. 選擇要為 SA 使用者使用的強式密碼。

  2. 使用 docker exec 來執行 sqlcmd,以使用 Transact-SQL 變更密碼。 在下列範例中,將舊密碼 <YourStrong!Passw0rd> 和新密碼 <YourNewStrong!Passw0rd> 取代為您自己的密碼值。

    sudo docker exec -it azuresqledge /opt/mssql-tools/bin/sqlcmd \
       -S localhost -U SA -P "<YourStrong@Passw0rd>" \
       -Q 'ALTER LOGIN SA WITH PASSWORD="<YourNewStrong@Passw0rd>"'
    

連線到 Azure SQL Edge

下列步驟會在容器中使用 Azure SQL Edge 命令列工具 sqlcmd 以連線至 SQL Edge。

  1. 使用 docker exec -it 命令在您執行的容器中啟動互動式 Bash 殼層。 下列範例中的 azuresqledge 是您在建立容器時由 --name 參數指定的名稱。

    sudo docker exec -it azuresqledge "bash"
    
  2. 進入容器後,以 sqlcmd 進行本機連線。 預設路徑並不包含 sqlcmd,因此您必須指定完整路徑。

    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong@Passw0rd>"
    

    提示

    您可以在命令列中省略密碼,不要在提示時輸入密碼。

  3. 如果成功,您應該會收到 sqlcmd 命令提示字元:1>

建立及查詢資料

下列各節將逐步引導使用 sqlcmd 和 Transact-SQL 來建立新資料庫、新增資料及執行查詢。

建立新資料庫

下列步驟會建立名為 TestDB 的新資料庫。

  1. sqlcmd 命令提示字元,貼上下列 Transact-SQL 命令以建立測試資料庫:

    CREATE DATABASE TestDB;
    GO
    
  2. 在下一行,撰寫查詢以傳回您伺服器上所有資料庫的名稱:

    SELECT name from sys.databases;
    GO
    

插入資料

接下來,建立新的資料表 Inventory,然後插入兩個新的資料列。

  1. sqlcmd 命令提示字元,將內容切換至 TestDB 資料庫:

    USE TestDB;
    
  2. 建立名為 Inventory 的新資料表:

    CREATE TABLE Inventory (
        id INT,
        name NVARCHAR(50),
        quantity INT
    );
    
  3. 將資料插入新的資料表:

    INSERT INTO Inventory
    VALUES (1, 'banana', 150);
    
    INSERT INTO Inventory
    VALUES (2, 'orange', 154);
    
  4. 鍵入 GO 以執行上述命令:

    GO
    

選取資料

現在,執行查詢以從 Inventory 資料表傳回資料。

  1. sqlcmd 命令提示字元,輸入查詢以從 Inventory 資料表傳回 quantity (數量) 大於 152 的資料列:

    SELECT * FROM Inventory WHERE quantity > 152;
    
  2. 執行命令︰

    GO
    

結束 sqlcmd 命令提示字元

  1. 若要結束您的 sqlcmd 工作階段,請鍵入 QUIT

    QUIT
    
  2. 若要結束容器中的互動式命令提示字元,請鍵入 exit。 結束互動式 Bash 殼層後,容器會繼續執行。

從容器外部連線

您也可以從支援 SQL 連線的任何外部 Linux、Windows 或 macOS 工具連線到 Docker 機器上的 SQL Edge 執行個體。 如需從外部連線到 SQL Edge 容器的詳細資訊,請參閱連線並查詢 Azure SQL Edge

移除容器

若要移除本教學課程中使用的 SQL Edge 容器,請執行下列命令:

sudo docker stop azuresqledge
sudo docker rm azuresqledge

警告

停止及移除容器會永久刪除容器中的所有 SQL Edge 資料。 如須保留資料,請建立備份檔案並將其複製到容器外,或使用容器資料持續性技術

下一步