SQL Server Docker コンテナーをデプロイして接続するDeploy and connect to SQL Server Docker containers

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) - Linux適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) - Linux

この記事では、SQL Server Docker コンテナーをデプロイして接続する方法について説明します。This article explains how to deploy and connect to SQL server docker containers.

その他の展開シナリオは次のとおりです。For other deployment scenarios, see:

注意

この記事では特に mssql-server-linux イメージを使用することに焦点を当てます。This article specifically focuses on using the mssql-server-linux image. Windows イメージについては言及しませんが、msmssql-server-windows Docker Hub ページで詳細を確認できます。The Windows image is not covered, but you can learn more about it on the mssql-server-windows Docker Hub page.

重要

運用環境のユース ケースで SQL Server コンテナーを実行する前に、SQL Server コンテナーのサポート ポリシーを読み、サポートされる構成で実行していることを確認してください。Before choosing to run a SQL Server container for production use cases, please review our support policy for SQL Server Containers to ensure that you are running on a supported configuration.

この 6 分間のビデオでは、コンテナーでの SQL Server の実行について説明します。This 6-minute video provides an introduction into running SQL Server on containers:

コンテナー イメージのプルと実行Pull and run the container image

SQL Server 2017 および SQL Server 2019 用の Docker コンテナー イメージをプルして実行するには、次のクイックスタートの前提条件と手順に従います。To pull and run the Docker container images for SQL Server 2017 and SQL Server 2019, follow the prerequisites and steps in the following quickstart:

この構成記事では、以下のセクションで追加の使用シナリオを示します。This configuration article provides additional usage scenarios in the following sections.

接続とクエリConnect and query

コンテナーの外部またはコンテナーの内部から、コンテナー内の SQL Server に接続してクエリを実行できます。You can connect and query SQL Server in a container from either outside the container or from within the container. 次のセクションでは、両方のシナリオについて説明します。The following sections explain both scenarios.

コンテナーの外部のツールTools outside the container

SQL 接続をサポートする外部の Linux、Windows、macOS ツールから、Docker マシン上の SQL Server インスタンスに接続することができます。You can connect to the SQL Server instance on your Docker machine from any external Linux, Windows, or macOS tool that supports SQL connections. いくつかの一般的なツールを次に示します。Some common tools include:

次の例では、sqlcmd を使用して、Docker コンテナー内で実行されている SQL Server に接続します。The following example uses sqlcmd to connect to SQL Server running in a Docker container. 接続文字列内の IP アドレスは、コンテナーを実行しているホスト マシンの IP アドレスです。The IP address in the connection string is the IP address of the host machine that is running the container.

sqlcmd -S 10.3.2.4 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4 -U SA -P "<YourPassword>"

既定の 1433 ではないホスト ポートをマップした場合は、そのポートを接続文字列に追加します。If you mapped a host port that was not the default 1433, add that port to the connection string. たとえば、docker run コマンド内で -p 1400:1433 を指定した場合は、ポート 1400 を明示的に指定して接続します。For example, if you specified -p 1400:1433 in your docker run command, then connect by explicitly specify port 1400.

sqlcmd -S 10.3.2.4,1400 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1400 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1400 -U SA -P "<YourPassword>"

コンテナーの内部のツールTools inside the container

SQL Server 2017 以降では、SQL Server のコマンドライン ツールがコンテナー イメージに含まれています。Starting with SQL Server 2017, the SQL Server command-line tools are included in the container image. 対話型のコマンド プロンプトを使用してイメージにアタッチすると、ツールをローカルで実行できます。If you attach to the image with an interactive command-prompt, you can run the tools locally.

  1. 実行中のコンテナー内で対話型の Bash シェルを開始するには、docker exec -it コマンドを使用します。Use the docker exec -it command to start an interactive bash shell inside your running container. 次の例では、e69e056c702d はコンテナー ID です。In the following example e69e056c702d is the container ID.

    docker exec -it e69e056c702d "bash"
    

    ヒント

    常にコンテナー ID 全体を指定する必要はありません。You don't always have to specify the entire container ID. 一意に識別するのに十分な文字を指定するだけでかまいません。You only have to specify enough characters to uniquely identify it. したがって、この例では、完全な ID ではなく e6 または e69 を使用すれば十分な可能性があります。So in this example, it might be enough to use e6 or e69 rather than the full ID. コンテナー ID を確認するには、docker ps -a コマンドを実行します。To find out the container ID, run the command docker ps -a.

  2. コンテナー内では sqlcmd とローカル接続してください。Once inside the container, connect locally with sqlcmd. 既定では sqlcmd はパスにないため、完全なパスを指定する必要があります。Sqlcmd is not in the path by default, so you have to specify the full path.

    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourPassword>'
    
  3. sqlcmd が終了したら、「exit」と入力します。When finished with sqlcmd, type exit.

  4. 対話型コマンド プロンプトでの操作が完了したら、「exit」と入力します。When finished with the interactive command-prompt, type exit. コンテナーは、対話型の Bash シェルを終了した後も引き続き実行されます。Your container continues to run after you exit the interactive bash shell.

コンテナーのバージョンを確認するCheck the container version

実行中の docker コンテナー内の SQL Server のバージョンを知りたい場合は、次のコマンドを実行して表示します。If you want to know the version of SQL Server in a running docker container, run the following command to display it. <Container ID or name> はターゲット コンテナーの ID または名前で置き換えます。Replace <Container ID or name> with the target container ID or name. <YourStrong!Passw0rd> は SA ログインの SQL Server パスワードで置き換えます。Replace <YourStrong!Passw0rd> with the SQL Server password for the SA login.

sudo docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourStrong!Passw0rd>' \
-Q 'SELECT @@VERSION'
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd `
-S localhost -U SA -P "<YourStrong!Passw0rd>" `
-Q "SELECT @@VERSION"
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd ^
-S localhost -U SA -P "<YourStrong!Passw0rd>" ^
-Q "SELECT @@VERSION"

ターゲットの docker コンテナー イメージの SQL Server バージョンとビルド番号を特定することもできます。You can also identify the SQL Server version and build number for a target docker container image. 次のコマンドでは、mcr.microsoft.com/mssql/server:2017-latest イメージの SQL Server バージョンとビルド情報が表示されます。The following command displays the SQL Server version and build information for the mcr.microsoft.com/mssql/server:2017-latest image. これは、環境変数 PAL_PROGRAM_INFO=1 を使用して新しいコンテナーを実行することで行われます。It does this by running a new container with an environment variable PAL_PROGRAM_INFO=1. 結果のコンテナーはすぐに終了し、docker rm コマンドによって削除されます。The resulting container instantly exits, and the docker rm command removes it.

sudo docker run -e PAL_PROGRAM_INFO=1 --name sqlver \
-ti mcr.microsoft.com/mssql/server:2019-latest && \
sudo docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver `
-ti mcr.microsoft.com/mssql/server:2019-latest; `
docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver ^
-ti mcr.microsoft.com/mssql/server:2019-latest && ^
docker rm sqlver

上記のコマンドでは、次の出力のようなバージョン情報が表示されます。The previous commands display version information similar to the following output:

sqlservr
  Version 15.0.4063.15
  Build ID 8a3bb4cca325e1d0b3071b3a193f6a1d74b440fbd95d2fb18881651a5b9ec8e8
  Build Type release
  Git Version 0335c462
  Built at Fri Aug 28 04:50:27 GMT 2020

PAL
  Build ID cc5ceea1b3d294f7d0166f99932f98c7eacfaaa81bcd7cf23c6a89f785829b63
  Build Type release
  Git Version ae9d66dff
  Built at Fri Aug 28 04:46:48 GMT 2020

Packages
  system.security                         6.2.9200.10,unset,
  system.certificates                     6.2.9200.10,unset,
  secforwarderxplat                       15.0.4063.15
  sqlservr                                15.0.4063.15
  system.common                           10.0.17134.1246.202005133
  system.netfx                            4.7.2.461814
  system                                  6.2.9200.10,unset,
  sqlagent                                15.0.4063.15

特定の SQL Server コンテナー イメージを実行するRun a specific SQL Server container image

注意

SQL Server 2019 CU3 以降では、Ubuntu 18.04 がサポートされています。Starting with SQL Server 2019 CU3, Ubuntu 18.04 is supported. mssql/server で使用可能なタグの一覧は、https://mcr.microsoft.com/v2/mssql/server/tags/list でご確認ください。You can retrieve a list of all available tags for mssql/server at https://mcr.microsoft.com/v2/mssql/server/tags/list.

最新の SQL Server コンテナー イメージを使用したくないシナリオもあります。There are scenarios where you might not want to use the latest SQL Server container image. 特定の SQL Server コンテナー イメージを実行するには、次の手順を使用します。To run a specific SQL Server container image, use the following steps:

  1. 使用するリリースの Docker タグを特定します。Identify the Docker tag for the release you want to use. 利用可能なタグを表示するには、mssql-server-linux Docker Hub ページを参照してください。To view the available tags, see the mssql-server-linux Docker hub page.

  2. タグを使用して SQL Server コンテナー イメージをプルします。Pull the SQL Server container image with the tag. たとえば、2019-CU7-ubuntu-18.04 イメージをプルするには、次のコマンドの <image_tag>2019-CU7-ubuntu-18.04 に置き換えます。For example, to pull the 2019-CU7-ubuntu-18.04 image, replace <image_tag> in the following command with 2019-CU7-ubuntu-18.04.

    docker pull mcr.microsoft.com/mssql/server:<image_tag>
    
  3. そのイメージを使用して新しいコンテナーを実行するには、docker run コマンド内でタグ名を指定します。To run a new container with that image, specify the tag name in the docker run command. 次のコマンド内の <image_tag> を、実行するバージョンに置き換えます。In the following command, replace <image_tag> with the version you want to run.

    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    

これらの手順は、既存のコンテナーをダウングレードするためにも使用できます。These steps can also be used to downgrade an existing container. たとえば、実行中のコンテナーをロールバックまたはダウングレードして、トラブルシューティングやテストを行うことができます。For example, you might want to rollback or downgrade a running container for troubleshooting or testing. 実行中のコンテナーをダウングレードするには、データ フォルダーの永続化手法を使用する必要があります。To downgrade a running container, you must be using a persistence technique for the data folder. アップグレードのセクションで説明したのと同じ手順に従いますが、新しいコンテナーを実行するときに、古いバージョンのタグ名を指定します。Follow the same steps outlined in the upgrade section, but specify the tag name of the older version when you run the new container.

RHEL ベースのコンテナー イメージを実行するRun RHEL-based container images

SQL Server Linux コンテナー イメージに関するドキュメントは、Ubuntu ベースのコンテナーを指しています。The documentation for SQL Server Linux container images points to Ubuntu-based containers. SQL Server 2019 以降では、Red Hat Enterprise Linux (RHEL) に基づくコンテナーを使用できます。Beginning with SQL Server 2019, you can use containers based on Red Hat Enterprise Linux (RHEL). RHEL のイメージの例は、mcr.microsoft.com/mssql/rhel/server:2019-CU1-rhel-8 のようになります。An example of the image for RHEL will look like mcr.microsoft.com/mssql/rhel/server:2019-CU1-rhel-8.

たとえば、次のコマンドでは、RHEL 8 を使用する SQL Server 2019 コンテナー用 Cumulative Update 1 をプルします。For example, the following command pulls the Cumulative Update 1 for SQL Server 2019 container that uses RHEL 8:

sudo docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU1-rhel-8
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU1-rhel-8
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU1-rhel-8

実稼働のコンテナー イメージを実行するRun production container images

前のセクションのクイックスタートでは、Docker Hub から SQL Server の無償の Developer エディションが実行されます。The quickstart in the previous section runs the free Developer edition of SQL Server from Docker Hub. Enterprise Edition、Standard Edition、Web Edition などの実稼働のコンテナー イメージを実行する場合でも、ほとんどの情報が適用されます。Most of the information still applies if you want to run production container images, such as Enterprise, Standard, or Web editions. しかし、違う点もいくつかあります。それをここで概説します。However, there are a few differences that are outlined here.

  • 有効なライセンスを持っている場合にのみ、運用環境内で SQL Server を使用できます。You can only use SQL Server in a production environment if you have a valid license. 無償の SQL Server Express 運用ライセンスはこちらで入手できます。You can obtain a free SQL Server Express production license here. SQL Server Standard Edition と Enterprise Edition のライセンスは、Microsoft ボリューム ライセンスを通じて入手できます。SQL Server Standard and Enterprise Edition licenses are available through Microsoft Volume Licensing.

  • Developer コンテナー イメージは、実稼働エディションを実行するように構成することもできます。The Developer container image can be configured to run the production editions as well. 実稼働エディションを実行するには、次の手順に従います。Use the following steps to run production editions:

要件を確認し、クイックスタートの手順を実行します。Review the requirements and run procedures in the quickstart. MSSQL_PID 環境変数を使用して、実稼働エディションを指定する必要があります。You must specify your production edition with the MSSQL_PID environment variable. 次の例は、Enterprise Edition 用の最新の SQL Server 2017 コンテナー イメージを実行する方法を示しています。The following example shows how to run the latest SQL Server 2017 container image for the Enterprise Edition:

docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<YourStrong!Passw0rd>' \
-e 'MSSQL_PID=Enterprise' -p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2019-latest
docker run --name sqlenterprise `
-e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong!Passw0rd>" `
-e "MSSQL_PID=Enterprise" -p 1433:1433 `
-d "mcr.microsoft.com/mssql/server:2019-latest"
docker run --name sqlenterprise `
-e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong!Passw0rd>" ^
-e "MSSQL_PID=Enterprise" -p 1433:1433 ^
-d "mcr.microsoft.com/mssql/server:2019-latest"

重要

Y を環境変数 ACCEPT_EULA に渡し、エディション値を MSSQL_PID に渡すことによって、使用する予定の SQL Server のエディションとバージョンに対して有効な既存のライセンスがあることを示しています。By passing the value Y to the environment variable ACCEPT_EULA and an edition value to MSSQL_PID, you are expressing that you have a valid and existing license for the edition and version of SQL Server that you intend to use. また、Docker コンテナー イメージ内で実行されている SQL Server ソフトウェアの使用は SQL Server ライセンスの条項によって管理されることに同意します。You also agree that your use of SQL Server software running in a Docker container image will be governed by the terms of your SQL Server license.

注意

MSSQL_PID に使用できる値の完全な一覧については、「Linux 上の SQL Server の設定を環境変数で構成する」を参照してください。For a full list of possible values for MSSQL_PID, see Configure SQL Server settings with environment variables on Linux.

複数の SQL Server コンテナーを実行するRun multiple SQL Server containers

Docker には、同じホスト マシン上で複数の SQL Server コンテナーを実行する方法が用意されています。Docker provides a way to run multiple SQL Server containers on the same host machine. このアプローチは、同じホスト上に複数の SQL Server インスタンスを必要とするシナリオで使用します。Use this approach for scenarios that require multiple instances of SQL Server on the same host. 各コンテナーは、異なるポート上で公開される必要があります。Each container must expose itself on a different port.

次の例では、2 つの SQL Server 2017 コンテナーを作成して、ホスト マシン上のポート 14011402 にマップします。The following example creates two SQL Server 2017 containers and maps them to ports 1401 and 1402 on the host machine.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest

次の例では、2 つの SQL Server 2019 コンテナーを作成して、ホスト マシン上のポート 14011402 にマップします。The following example creates two SQL Server 2019 containers and maps them to ports 1401 and 1402 on the host machine.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest

これで、SQL Server の 2 つのインスタンスが別々のコンテナー内で実行されるようになりました。Now there are two instances of SQL Server running in separate containers. クライアントは、Docker ホストの IP アドレスとコンテナーのポート番号を使用して、各 SQL Server インスタンスに接続できます。Clients can connect to each SQL Server instance by using the IP address of the Docker host and the port number for the container.

sqlcmd -S 10.3.2.4,1401 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1402 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1402 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1402 -U SA -P "<YourPassword>"

コンテナー内の SQL Server をアップグレードするUpgrade SQL Server in containers

Docker を使用してコンテナー イメージをアップグレードするには、まず、アップグレードするリリースのタグを特定します。To upgrade the container image with Docker, first identify the tag for the release for your upgrade. docker pull コマンドを使用して、このバージョンをレジストリからプルします。Pull this version from the registry with the docker pull command:

docker pull mcr.microsoft.com/mssql/server:<image_tag>

これにより、作成した新しいコンテナーの SQL Server イメージが更新されますが、実行中のコンテナー内で SQL Server は更新されません。This updates the SQL Server image for any new containers you create, but it does not update SQL Server in any running containers. これを行うには、最新の SQL Server コンテナー イメージを使用して新しいコンテナーを作成し、その新しいコンテナーにデータを移行する必要があります。To do this, you must create a new container with the latest SQL Server container image and migrate your data to that new container.

  1. 既存の SQL Server コンテナーに対してデータの保持手法の 1 つを使用していることを確認します。Make sure you are using one of the data persistence techniques for your existing SQL Server container. これにより、同じデータを使用して新しいコンテナーを開始できます。This enables you to start a new container with the same data.

  2. docker stop コマンドを使用して SQL Server コンテナーを停止します。Stop the SQL Server container with the docker stop command.

  3. docker run を使用して新しい SQL Server コンテナーを作成し、マップされたホスト ディレクトリまたはデータ ボリューム コンテナーを指定します。Create a new SQL Server container with docker run and specify either a mapped host directory or a data volume container. SQL Server のアップグレードには、必ず特定のタグを使用してください。Make sure to use the specific tag for your SQL Server upgrade. 新しいコンテナーでは、新しいバージョンの SQL Server が既存の SQL Server データと共に使用されるようになります。The new container now uses a new version of SQL Server with your existing SQL Server data.

    重要

    現時点では、アップグレードは RC1、RC2、GA の間でのみサポートされます。Upgrade is only supported between RC1, RC2, and GA at this time.

  4. 新しいコンテナー内のデータベースとデータを確認します。Verify your databases and data in the new container.

  5. 必要に応じて、docker rm を使用して古いコンテナーを削除します。Optionally, remove the old container with docker rm.

次のステップNext steps

  • クイックスタートに従って、Docker 上で SQL Server 2017 のコンテナー イメージを開始するGet started with SQL Server 2017 container images on Docker by going through the quickstart
  • クイックスタートに従って、Docker 上で SQL Server 2019 のコンテナー イメージを開始するGet started with SQL Server 2019 container images on Docker by going through the quickstart