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 以降。 詳細については、「Install Docker」(Docker をインストールする) を参照してください。 SQL Edge のイメージは Ubuntu 18.04 が基になっているため、Ubuntu 18.04 の Docker ホストを使用することをお勧めします。
  • Docker overlay2 ストレージ ドライバー。 ほとんどのユーザーでは、これが既定値です。 このストレージ プロバイダーを利用しておらず、変更する必要がある場合は、overlay2 の構成に関する Docker ドキュメントで、手順と注意点を参照してください。
  • 10 GB 以上のディスク領域。
  • 1 GB 以上の RAM。
  • Azure SQL Edge のハードウェア要件

Note

この記事の bash コマンドには、sudo が使用されています。 sudo を使用して Docker を実行したくない場合は、Docker グループを構成して、そのグループにユーザーを追加できます。 詳細については、「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 シェルから次のコマンドを使います。

    • Developer エディションとして実行される 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
      
    • Premium エディションとして実行される 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 データベース エンジンの既定のパスワード ポリシーに従う必要があります。従わない場合、コンテナーで SQL データベース エンジンを設定できず、動作が停止します。 既定では、パスワードの長さは少なくとも 8 文字で、大文字、小文字、十進数字、記号の 4 種類のうち 3 種類を含んでいる必要があります。 docker ログ コマンドを実行することでエラー ログを調査することができます。

    次の表は、前の docker run の例のパラメーターに関する説明です。

    パラメーター 説明
    -e "ACCEPT_EULA=Y" ACCEPT_EULA 変数を任意の値に設定し、使用許諾契約書の承諾を確定します。 SQL Edge イメージに必要な設定です。
    -e "MSSQL_SA_PASSWORD=yourStrong(!)Password" Azure SQL Edge のパスワード要件を満たす 8 文字以上の独自の強力なパスワードを指定します。 SQL Edge イメージに必要な設定です。
    -p 1433:1433 ホスト環境の TCP ポート (最初の値) とコンテナーの TCP ポート (2 番目の値) をマップします。 この例では、コンテナー内では 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_PASSWORDps -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 に接続する

次の手順では SQL Edge に接続するためにコンテナー内で Azure SQL Edge コマンド ライン ツールである sqlcmd を使用します。

  1. 実行中のコンテナー内で対話型の Bash シェルを開始するには、docker exec -it コマンドを使用します。 次の例の 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 to を使用し、新しいデータベースを作成し、データを追加し、クエリを実行します。

新しいデータベースの作成

次の手順では、TestDB という名前の新しいデータベースを作成します。

  1. sqlcmd のコマンド プロンプトに次の Transact-SQL コマンドを貼り付け、テスト データベースを作成します。

    CREATE DATABASE TestDB;
    GO
    
  2. 次の行に、サーバー上のすべてのデータベースの名前を返すクエリを記述します。

    SELECT name from sys.databases;
    GO
    

データの挿入

次に、新しいテーブル Inventory を作成し、2 つの新しい行を挿入します。

  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 のコマンド プロンプトで、数量が 152 より大きいInventory テーブルから行を返すクエリを入力します。

    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 データが削除されます。 データを保持する必要がある場合は、コンテナーからバックアップ ファイルを作成してコピーするか、コンテナー データを永続化する手法を使用します。

次の手順