次の方法で共有


クイック スタート:Docker を使用して SQL Server Linux コンテナー イメージを実行する

適用対象: SQL Server - Linux

このクイックスタートでは、Docker を使用して SQL Server 2017 (14.x) Linux コンテナー イメージ mssql-server-linux をプルして実行します。 その後、sqlcmd と接続して最初のデータベースを作成し、クエリを実行できます。

サポートされているプラットフォームの詳細については、「Linux 上の SQL Server2017 のリリース ノート」を参照してください。

警告

コンテナーを停止して削除すると、コンテナー内の SQL Server データが完全に削除されます。 データの保存に関する詳細については、「コンテナーからバックアップ ファイルを作成してコピーする」または「コンテナー データを永続化する手法を使用する」に関するページをご覧ください。

このクイック スタートでは、SQL Server 2017 (14.x) のコンテナーを作成します。 異なるバージョンの SQL Server 用に Linux コンテナーを作成する場合は、この記事の SQL Server 2019 (15.x) または SQL Server 2022 (16.x) バージョンを参照してください。

このクイックスタートでは、Docker を使用して SQL Server 2019 (15.x) Linux コンテナー イメージ mssql-server-linux をプルして実行します。 その後、sqlcmd と接続して最初のデータベースを作成し、クエリを実行できます。

サポートされているプラットフォームの詳細については、「Linux 上の SQL Server2019 のリリース ノート」を参照してください。

警告

コンテナーを停止して削除すると、コンテナー内の SQL Server データが完全に削除されます。 データの保存に関する詳細については、「コンテナーからバックアップ ファイルを作成してコピーする」または「コンテナー データを永続化する手法を使用する」に関するページをご覧ください。

このクイック スタートでは、SQL Server 2019 (15.x) のコンテナーを作成します。 異なるバージョンの SQL Server 用に Linux コンテナーを作成する場合は、この記事の SQL Server 2017 (14.x) または SQL Server 2022 (16.x) バージョンを参照してください。

このクイックスタートでは、Docker を使用して SQL Server 2022 (16.x) Linux コンテナー イメージ mssql-server-linux をプルして実行します。 その後、sqlcmd と接続して最初のデータベースを作成し、クエリを実行できます。

サポートされているプラットフォームの詳細については、「Linux 上の SQL Server 2022 のリリース ノート」を参照してください。

警告

コンテナーを停止して削除すると、コンテナー内の SQL Server データが完全に削除されます。 データの保存に関する詳細については、「コンテナーからバックアップ ファイルを作成してコピーする」または「コンテナー データを永続化する手法を使用する」に関するページをご覧ください。

このクイック スタートでは、SQL Server 2022 (16.x) のコンテナーを作成します。 異なるバージョンの SQL Server 用に Linux コンテナーを作成する場合は、この記事の SQL Server 2017 (14.x) または SQL Server 2019 (15.x) バージョンを参照してください。

このイメージは、Ubuntu に基づく Linux で実行されている SQL Server で構成されます。 イメージは Linux の Docker エンジン 1.8 以降で使用することができます。

SQL Server 2022 (16.x) CU 14 および SQL Server 2019 (15.x) CU 28 以降、コンテナー イメージに 新しい mssql-tools18 パッケージが含まれています。 以前のディレクトリ /opt/mssql-tools/bin は段階的に廃止されています。Microsoft ODBC 18 ツールの新しいディレクトリは、最新のツール オファリングに合わせた /opt/mssql-tools18/bin です。 変更とセキュリティ強化の詳細については、「ODBC ドライバー 18.0 for SQL Server のリリース」を参照してください。

この記事の例では、docker コマンドを使用します。 ただし、これらのコマンドの多くは Podman でも機能します。 Podman には、Docker エンジンに似たコマンド ライン インターフェイスが用意されています。 Podman の詳細については、こちらをご覧ください。

重要

sqlcmd は現在、コンテナーの作成時に MSSQL_PID パラメーターをサポートしていません。 このクイック スタートの sqlcmd の手順を使用する場合は、SQL Server の Developer エディションでコンテナーを作成します。 コマンド ライン インターフェイス (CLI) の手順を使用して、任意のライセンスを使用してコンテナーを作成します。 詳細については、「SQL Server Linux コンテナーの配置と接続」を参照してください。

前提条件

  • サポートされている Linux ディストリビューションの Docker エンジン 1.8 以降。 詳細については、「Install Docker」(Docker をインストールする) を参照してください。
  • Docker overlay2 ストレージ ドライバー。 ほとんどのユーザーにとっては、このドライバーが既定です。 このストレージ プロバイダーを利用しておらず、変更する必要がある場合は、overlay2 の構成に関する Docker ドキュメントで、手順と警告を参照してください。

  • Docker ホストに最新の sqlcmd をインストールします。

  • 少なくとも 2 GB のディスク領域。

  • 少なくとも 2 GB の RAM。

  • SQL Server on Linux のシステム要件

SQL Server Linux コンテナー イメージをプルして実行する

次のステップを開始する前に、この記事の冒頭で希望のシェル (bashPowerShell、または cmd) を選択していることをご確認ください。

この記事の bash コマンドには、sudo が使用されています。 sudo を使用して Docker を実行したくない場合は、docker グループを構成して、そのグループにユーザーを追加できます。 詳細については、「Linux でのインストール後の手順」を参照してください。

レジストリからコンテナーをプルする

Microsoft Container Registry から SQL Server 2017 (14.x) Linux コンテナー イメージをプルします。

sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest

このクイック スタートでは、SQL Server 2017 (14.x) のコンテナーを作成します。 異なるバージョンの SQL Server 用に Linux コンテナーを作成する場合は、この記事の SQL Server 2019 (15.x) または SQL Server 2022 (16.x) バージョンを参照してください。

上のコマンドにより、最新の SQL Server 2017 (14.x) Linux コンテナー イメージがプルされます。 特定のイメージをプルしたい場合は、mcr.microsoft.com/mssql/server:2017-GA-ubuntu のように、コロンとタグ名を追加します。 すべての使用可能な画像を表示するには、Microsoft アーティファクト レジストリを参照してください。

コンテナーを実行する

Docker で Linux コンテナー イメージを実行する場合は、Bash シェルまたは管理者特権での PowerShell コマンド プロンプトから次のコマンドを使用することができます。

重要

SA_PASSWORD 環境変数は非推奨です。 代わりに MSSQL_SA_PASSWORD を使用してください

sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2017-latest

PowerShell Core を使用している場合、二重引用符を一重引用符に置換します。

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2017-latest

パスワードは SQL Server のデフォルのパスワード ポリシーに従う必要があります。従わない場合、コンテナーで SQL Server をセットアップできず、動作が停止します。 既定では、パスワードの長さは少なくとも 8 文字で、大文字、小文字、10 進数の数字、記号の 4 種類のうち 3 種類を含んでいる必要があります。 docker logs コマンドを使用してエラー ログを調査することができます。

既定では、このクイックスタートでは SQL Server Developer Edition のコンテナーが作成されます。 コンテナーで実稼働エディションを実行するためのプロセスは若干異なります。 詳細については、「Run production container images」(実稼働のコンテナー イメージを実行する) を参照してください。

次の表は、前の docker run の例のパラメーターについて説明しています。

パラメーター 説明
-e "ACCEPT_EULA=Y" ACCEPT_EULA 変数を任意の値に設定し、使用許諾契約書の承諾を確定します。 SQL Server イメージの設定が必要です。
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" パスワード ポリシーを満たす、8 文字以上の独自の強力なパスワードを指定します。 SQL Server イメージの設定が必要です。
-e "MSSQL_COLLATION=<SQL_Server_collation>" 既定 SQL_Latin1_General_CP1_CI_AS ではなく、カスタム SQL Server照合順序を指定します。
-p 1433:1433 ホスト環境の TCP ポート (最初の値) とコンテナーの TCP ポート (2 番目の値) をマップします。 この例では、SQL Server がコンテナー内の TCP 1433 上でリッスンしており、このコンテナーのポートがホスト上のポート 1433 に対して公開されています。
--name sql1 ランダムに生成された名前ではなく、コンテナーのカスタム名を指定します。 複数のコンテナーを実行する場合は、この同じ名前を再利用することはできません。
--hostname sql1 コンテナーのホスト名を明示的に設定するために使用します。 ホスト名を指定しない場合、既定ではコンテナー ID が使用されます。これは、ランダムに生成されたシステム GUID です。
-d コンテナーをバックグラウンド (デーモン) で実行します。
mcr.microsoft.com/mssql/server:2017-latest SQL Server Linux コンテナー イメージです。

コンテナのリストの表示

  1. Docker コンテナーを表示するには、docker ps コマンドを使用します。

    sudo docker ps -a
    
    docker ps -a
    
    docker ps -a
    

    次の例のような出力が表示されます。

    CONTAINER ID   IMAGE                                        COMMAND                    CREATED         STATUS         PORTS                                       NAMES
    d4a1999ef83e   mcr.microsoft.com/mssql/server:2017-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. STATUS 列に Up の状態が表示されている場合、SQL Server はコンテナーで実行されており、 PORTS 列に指定されたポートでリッスンしています。 SQL Server コンテナーの STATUS 列に Exited と表示されている場合、「SQL Server Docker コンテナーのトラブルシューティングを行う」を参照してください。 SQL Server のエラー ログに SQL Server is now ready for client connections. This is an informational message; no user action is required というメッセージが表示されたら、サーバーは接続の準備ができています。 次のコマンドを使用して、コンテナー内の SQL Server のエラー ログを確認できます。

    sudo docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
    

    前述したように、--hostname パラメーターはコンテナーの内部名をカスタム値に変更します。 この値は、次の Transact-SQL クエリで返される名前です。

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

    ターゲット コンテナーを特定しやすくするため、--hostname--name を同じ値に設定することをお勧めします。

  3. 最後のステップとして、実稼働環境で SA パスワードを変更します。これは、MSSQL_SA_PASSWORDps -eax 出力に表示され、同じ名前の環境変数に保存されるためです。

SQL Server Linux コンテナー イメージをプルして実行する

次のステップを開始する前に、この記事の冒頭で希望のシェル (bashPowerShell、または cmd) を選択していることをご確認ください。

この記事の bash コマンドには、sudo が使用されています。 sudo を使用して Docker を実行したくない場合は、docker グループを構成して、そのグループにユーザーを追加できます。 詳細については、「Linux でのインストール後の手順」を参照してください。

レジストリからコンテナーをプルする

Microsoft Container Registry から SQL Server 2019 (15.x) Linux コンテナー イメージをプルします。

docker pull mcr.microsoft.com/mssql/server:2019-latest
docker pull mcr.microsoft.com/mssql/server:2019-latest
docker pull mcr.microsoft.com/mssql/server:2019-latest

このクイック スタートでは、SQL Server 2019 (15.x) のコンテナーを作成します。 異なるバージョンの SQL Server 用に Linux コンテナーを作成する場合は、この記事の SQL Server 2017 (14.x) または SQL Server 2022 (16.x) バージョンを参照してください。

上のコマンドにより、最新の SQL Server 2019 (15.x) Linux コンテナー イメージがプルされます。 特定のイメージをプルしたい場合は、mcr.microsoft.com/mssql/server:2019-GA-ubuntu のように、コロンとタグ名を追加します。 すべての使用可能な画像を表示するには、Microsoft アーティファクト レジストリを参照してください。

コンテナーを実行する

Docker で Linux コンテナー イメージを実行する場合は、Bash シェルまたは管理者特権での PowerShell コマンド プロンプトから次のコマンドを使用することができます。

重要

SA_PASSWORD 環境変数は非推奨です。 代わりに MSSQL_SA_PASSWORD を使用してください

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2019-latest

PowerShell Core を使用している場合、二重引用符を一重引用符に置換します。

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2019-latest

パスワードは SQL Server のデフォルのパスワード ポリシーに従う必要があります。従わない場合、コンテナーで SQL Server をセットアップできず、動作が停止します。 既定では、パスワードの長さは少なくとも 8 文字で、大文字、小文字、10 進数の数字、記号の 4 種類のうち 3 種類を含んでいる必要があります。 docker logs コマンドを使用してエラー ログを調査することができます。

既定では、このクイックスタートでは SQL Server Developer Edition のコンテナーが作成されます。 コンテナーで実稼働エディションを実行するためのプロセスは若干異なります。 詳細については、「Run production container images」(実稼働のコンテナー イメージを実行する) を参照してください。

次の表は、前の docker run の例のパラメーターについて説明しています。

パラメーター 説明
-e "ACCEPT_EULA=Y" ACCEPT_EULA 変数を任意の値に設定し、使用許諾契約書の承諾を確定します。 SQL Server イメージの設定が必要です。
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" パスワード ポリシーを満たす、8 文字以上の独自の強力なパスワードを指定します。 SQL Server イメージの設定が必要です。
-e "MSSQL_COLLATION=<SQL_Server_collation>" 既定 SQL_Latin1_General_CP1_CI_AS ではなく、カスタム SQL Server照合順序を指定します。
-p 1433:1433 ホスト環境の TCP ポート (最初の値) とコンテナーの TCP ポート (2 番目の値) をマップします。 この例では、SQL Server がコンテナー内の TCP 1433 上でリッスンしており、このコンテナーのポートがホスト上のポート 1433 に対して公開されています。
--name sql1 ランダムに生成された名前ではなく、コンテナーのカスタム名を指定します。 複数のコンテナーを実行する場合は、この同じ名前を再利用することはできません。
--hostname sql1 コンテナーのホスト名を明示的に設定するために使用します。 ホスト名を指定しない場合、既定ではコンテナー ID が使用されます。これは、ランダムに生成されたシステム GUID です。
-d コンテナーをバックグラウンド (デーモン) で実行します。
mcr.microsoft.com/mssql/server:2019-latest SQL Server Linux コンテナー イメージです。

コンテナのリストの表示

  1. Docker コンテナーを表示するには、docker ps コマンドを使用します。

    docker ps -a
    
    docker ps -a
    
    docker ps -a
    

    次の例のような出力が表示されます。

    CONTAINER ID   IMAGE                                        COMMAND                    CREATED         STATUS         PORTS                                       NAMES
    d4a1999ef83e   mcr.microsoft.com/mssql/server:2019-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. STATUS 列に Up の状態が表示されている場合、SQL Server はコンテナーで実行されており、 PORTS 列に指定されたポートでリッスンしています。 SQL Server コンテナーの STATUS 列に Exited と表示されている場合、「SQL Server Docker コンテナーのトラブルシューティングを行う」を参照してください。 SQL Server のエラー ログに SQL Server is now ready for client connections. This is an informational message; no user action is required というメッセージが表示されたら、サーバーは接続の準備ができています。 次のコマンドを使用して、コンテナー内の SQL Server のエラー ログを確認できます。

    docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
    

    前述したように、--hostname パラメーターはコンテナーの内部名をカスタム値に変更します。 この値は、次の Transact-SQL クエリで返される名前です。

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

    ターゲット コンテナーを特定しやすくするため、--hostname--name を同じ値に設定することをお勧めします。

  3. 最後のステップとして、実稼働環境で SA パスワードを変更します。これは、MSSQL_SA_PASSWORDps -eax 出力に表示され、同じ名前の環境変数に保存されるためです。

SQL Server Linux コンテナー イメージをプルして実行する

次のステップを開始する前に、この記事の冒頭で希望のシェル (bashPowerShell、または cmd) を選択していることをご確認ください。

この記事の bash コマンドには、sudo が使用されています。 sudo を使用して Docker を実行したくない場合は、docker グループを構成して、そのグループにユーザーを追加できます。 詳細については、「Linux でのインストール後の手順」を参照してください。

レジストリからコンテナーをプルする

Microsoft Container Registry から SQL Server 2022 (16.x) Linux コンテナー イメージをプルします。

docker pull mcr.microsoft.com/mssql/server:2022-latest
docker pull mcr.microsoft.com/mssql/server:2022-latest
docker pull mcr.microsoft.com/mssql/server:2022-latest

このクイック スタートでは、SQL Server 2022 (16.x) のコンテナーを作成します。 異なるバージョンの SQL Server 用に Linux コンテナーを作成する場合は、この記事の SQL Server 2017 (14.x) または SQL Server 2019 (15.x) バージョンを参照してください。

上のコマンドにより、最新の SQL Server 2022 (16.x) Linux コンテナー イメージがプルされます。 特定のイメージをプルしたい場合は、mcr.microsoft.com/mssql/server:2022-GA-ubuntu のように、コロンとタグ名を追加します。 すべての使用可能な画像を表示するには、Microsoft アーティファクト レジストリを参照してください。

コンテナーを実行する

Docker で Linux コンテナー イメージを実行する場合は、Bash シェルまたは管理者特権での PowerShell コマンド プロンプトから次のコマンドを使用することができます。

重要

SA_PASSWORD 環境変数は非推奨です。 代わりに MSSQL_SA_PASSWORD を使用してください

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2022-latest

PowerShell Core を使用している場合、二重引用符を一重引用符に置換します。

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
   -p 1433:1433 --name sql1 --hostname sql1 `
   -d `
   mcr.microsoft.com/mssql/server:2022-latest

パスワードは SQL Server のデフォルのパスワード ポリシーに従う必要があります。従わない場合、コンテナーで SQL Server をセットアップできず、動作が停止します。 既定では、パスワードの長さは少なくとも 8 文字で、大文字、小文字、10 進数の数字、記号の 4 種類のうち 3 種類を含んでいる必要があります。 docker logs コマンドを使用してエラー ログを調査することができます。

既定では、このクイックスタートでは SQL Server Developer Edition のコンテナーが作成されます。 コンテナーで実稼働エディションを実行するためのプロセスは若干異なります。 詳細については、「Run production container images」(実稼働のコンテナー イメージを実行する) を参照してください。

次の表は、前の docker run の例のパラメーターについて説明しています。

パラメーター 説明
-e "ACCEPT_EULA=Y" ACCEPT_EULA 変数を任意の値に設定し、使用許諾契約書の承諾を確定します。 SQL Server イメージの設定が必要です。
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" パスワード ポリシーを満たす、8 文字以上の独自の強力なパスワードを指定します。 SQL Server イメージの設定が必要です。
-e "MSSQL_COLLATION=<SQL_Server_collation>" 既定 SQL_Latin1_General_CP1_CI_AS ではなく、カスタム SQL Server照合順序を指定します。
-p 1433:1433 ホスト環境の TCP ポート (最初の値) とコンテナーの TCP ポート (2 番目の値) をマップします。 この例では、SQL Server がコンテナー内の TCP 1433 上でリッスンしており、このコンテナーのポートがホスト上のポート 1433 に対して公開されています。
--name sql1 ランダムに生成された名前ではなく、コンテナーのカスタム名を指定します。 複数のコンテナーを実行する場合は、この同じ名前を再利用することはできません。
--hostname sql1 コンテナーのホスト名を明示的に設定するために使用します。 ホスト名を指定しない場合、既定ではコンテナー ID が使用されます。これは、ランダムに生成されたシステム GUID です。
-d コンテナーをバックグラウンド (デーモン) で実行します。
mcr.microsoft.com/mssql/server:2022-latest SQL Server Linux コンテナー イメージです。

システム管理者のパスワードを変更する

SA アカウントは、セットアップ時に作成される SQL Server インスタンスのシステム管理者です。 SQL Server のコンテナーを作成した後、そのコンテナーで echo $MSSQL_SA_PASSWORD を実行すると、指定した環境変数 MSSQL_SA_PASSWORD が検索できるようになります。 セキュリティ上の理由から、運用環境で SA パスワードを変更する必要があります。

  1. SA ユーザーに使用する強力なパスワードを選択します。

  2. docker exec を使用して sqlcmd を実行し、Transact-SQL でパスワードを変更します。 次の例では、古いパスワードと新しいパスワードはユーザー入力から読み込まれます。

    docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd \
    -S localhost -U SA \
     -P "$(read -sp "Enter current SA password: "; echo "${REPLY}")" \
     -Q "ALTER LOGIN SA WITH PASSWORD=\"$(read -sp "Enter new SA password: "; echo "${REPLY}")\""
    
    docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong@Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
    
    docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong@Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
    

    sqlcmd の最新バージョンは、既定でセキュリティで保護されています。 接続の暗号化の詳細については、Windows 用「sqlcmd ユーティリティ 」および Linux および macOS 用「sqlcmdを使用した接続」をご覧ください。 接続が成功しない場合は、-No オプションを sqlcmd に追加して、暗号化が必須ではなくオプションであることを指定できます。

ベスト プラクティスとして sa アカウントを無効にする

重要

これらの資格情報は後のステップで必要になります。 ここで入力したユーザー ID とパスワードを必ず書き留めておいてください。

インストール後に初めて sa アカウントを使用してSQL Serverインスタンスに接続する場合は、次の手順に従い、セキュリティのベスト プラクティスとしてすぐに sa ログインを無効にすることが重要です。

  1. 新しいログインを作成し、sysadmin サーバー ロールのメンバーにします。

  2. 作成した新しいログインを使用してSQL Serverインスタンスに接続します。

  3. セキュリティのベスト プラクティスで推奨されているように、sa アカウントを無効にします。

コンテナのリストの表示

  1. Docker コンテナーを表示するには、docker ps コマンドを使用します。

    docker ps -a
    
    docker ps -a
    
    docker ps -a
    

    次の例のような出力が表示されます。

    CONTAINER ID   IMAGE                                        COMMAND                    CREATED         STATUS         PORTS                                       NAMES
    d4a1999ef83e   mcr.microsoft.com/mssql/server:2022-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. STATUS 列に Up の状態が表示されている場合、SQL Server はコンテナーで実行されており、 PORTS 列に指定されたポートでリッスンしています。 SQL Server コンテナーの STATUS 列に Exited と表示されている場合、「SQL Server Docker コンテナーのトラブルシューティングを行う」を参照してください。 SQL Server のエラー ログに SQL Server is now ready for client connections. This is an informational message; no user action is required というメッセージが表示されたら、サーバーは接続の準備ができています。 次のコマンドを使用して、コンテナー内の SQL Server のエラー ログを確認できます。

    docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
    

    前述したように、--hostname パラメーターはコンテナーの内部名をカスタム値に変更します。 この値は、次の Transact-SQL クエリで返される名前です。

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

    ターゲット コンテナーを特定しやすくするため、--hostname--name を同じ値に設定することをお勧めします。

SQL Server への接続

次の手順では、SQL Server コマンドライン ツールの sqlcmd ユーティリティをコンテナー内で使用し、SQL Server に接続します。

  1. 実行中のコンテナー内で対話型の Bash シェルを開始するには、docker exec -it コマンドを使用します。 次の例の sql1 は、コンテナーを作成したときに --name パラメーターによって指定された名前です。

    docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
  1. コンテナー内では、完全なパスで sqlcmd とローカル接続します。

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

    sqlcmd の最新バージョンは、既定でセキュリティで保護されています。 接続の暗号化の詳細については、Windows 用「sqlcmd ユーティリティ 」および Linux および macOS 用「sqlcmdを使用した接続」をご覧ください。 接続が成功しない場合は、 -No オプションを sqlcmd に追加して、暗号化が必須ではなくオプションであることを指定できます。

    コマンド ラインでパスワードを省略すると、入力を求められます。 次に例を示します。

    /opt/mssql-tools/bin/sqlcmd -S localhost -U <userid>
    
  1. コンテナー内では、完全なパスで sqlcmd とローカル接続します。

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

    sqlcmd の最新バージョンは、既定でセキュリティで保護されています。 接続の暗号化の詳細については、Windows 用「sqlcmd ユーティリティ 」および Linux および macOS 用「sqlcmdを使用した接続」をご覧ください。 接続が成功しない場合は、 -No オプションを sqlcmd に追加して、暗号化が必須ではなくオプションであることを指定できます。

    コマンド ラインでパスワードを省略すると、入力を求められます。 次に例を示します。

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>
    
  1. コンテナー内では、完全なパスで sqlcmd とローカル接続します。

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

    sqlcmd の最新バージョンは、既定でセキュリティで保護されています。 接続の暗号化の詳細については、Windows 用「sqlcmd ユーティリティ 」および Linux および macOS 用「sqlcmdを使用した接続」をご覧ください。 接続が成功しない場合は、 -No オプションを sqlcmd に追加して、暗号化が必須ではなくオプションであることを指定できます。

    コマンド ラインでパスワードを省略すると、入力を求められます。 次に例を示します。

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>
    
  1. 成功すると、sqlcmd コマンド プロンプト 1> が表示されます。

データの作成とクエリ

後続のセクションでは sqlcmd と Transact-SQL to を使用し、新しいデータベースを作成し、データを追加し、クエリを実行します。

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

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

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

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

    SELECT Name from sys.databases;
    
  3. 上の 2 つのコマンドは、すぐには実行されません。 新しい行に「GO」と入力し、上のコマンドを実行します。

    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 Server インスタンスに接続することもできます。 外部ツールは、ホスト マシンの IP アドレスを使用します。

次の手順ではコンテナーの外で sqlcmd を使用して、コンテナーで実行されている SQL Server に接続します。 この手順は、コンテナーの外に SQL Server コマンド ライン ツールがインストール済みであることを前提としています。 他のツールを使用する場合にも同じ原則が適用されますが、接続するプロセスはツールごとに固有です。

  1. ifconfig または ip addr を使用して、コンテナーのホスト コンピューターの IP アドレスを検索します。

  2. この例では、sqlcmd ツールをクライアント マシン上にインストールします。 詳細については、「 sqlcmd ユーティリティ 」または 「 SQL Server コマンドライン ツール sqlcmd と bcp on Linux のインストール」を参照してください。

  3. コンテナーのポート 1433 にマップされた IP アドレスとポートを指定して sqlcmd を実行します。 この例の場合、ポートはホスト マシンと同じく、ポート 1433 です。 ホスト マシン上でマップされた別のポートを指定した場合は、ここにそれを使用します。 ファイアウォールで適切な受信ポートを開き、接続を許可する必要もあります。

    sqlcmd の最新バージョンは、既定でセキュリティで保護されています。 接続が成功せず、バージョン 18 以降を使用している場合は、-No オプションを sqlcmd に追加して、暗号化が必須ではなくオプションであることを指定できます。

    sudo sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
    
  4. Transact-SQL コマンドを実行します。 終わったら、QUIT と入力します。

SQL Server に接続するその他の一般的なツールは次のとおりです。

コンテナーの削除

このチュートリアルで使用した SQL Server のコンテナーを削除する場合は、次のコマンドを実行します。

docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1

Docker のデモ

Docker の SQL Server Linux コンテナー イメージの使用を終了したら、、開発とテストの改善のためにどのように Docker を使用できるかを知りたくなるかもしれません。 次のビデオは、継続的インテグレーションと展開シナリオでどのように Docker を使用できるかを説明しています。

SQL ドキュメントへの投稿

SQL コンテンツを自分で編集できることはご存じですか。 これにより、ドキュメントが改善されるだけでなく、ページの共同作成者としてもクレジットされます。

詳細については、「SQL Server のドキュメントに投稿する方法」を参照してください。