Развертывание контейнеров Docker в SQL Server и подключение к ним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

В этой статье описано, как развертывать контейнеры Docker в SQL Server и подключаться к ним.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 не рассматривается, но сведения о нем вы можете найти на странице mssql-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

Для извлечения и запуска образов контейнеров Docker для SQL Server 2017 и SQL Server 2019 необходимо выполнить предварительные требования и действия, описываемые в следующем кратком руководстве: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 Server на компьютере Docker можно с помощью любого внешнего инструмента в macOS, Windows или Linux, поддерживающего подключения SQL.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 для подключения к SQL Server в контейнере Docker.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. Например, если вы указали -p 1400:1433 в команде docker run, для подключения необходимо явно указать порт 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 включены в образ контейнера.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. Выполните команду docker exec -it, чтобы запустить интерактивную оболочку bash внутри запущенного контейнера.Use the docker exec -it command to start an interactive bash shell inside your running container. В следующем примере e69e056c702d — это идентификатор контейнера.In the following example e69e056c702d is the container ID.

    docker exec -it e69e056c702d "bash"
    

    Совет

    Указывать идентификатор контейнера полностью во всех случаях не требуется.You don't always have to specify the entire container ID. Достаточно указать количество символов, необходимое для его уникальной идентификации.You only have to specify enough characters to uniquely identify it. Соответственно, вместо полного идентификатора в этом примере может использоваться форма e6 или e69.So in this example, it might be enough to use e6 or e69 rather than the full 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

Чтобы просмотреть версию SQL Server в запущенном контейнере Docker, выполните следующую команду.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> на идентификатор или имя целевого контейнера.Replace <Container ID or name> with the target container ID or name. Замените <YourStrong!Passw0rd> на пароль 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"

Также можно определить версию и номер сборки SQL Server для целевого образа контейнера Docker.You can also identify the SQL Server version and build number for a target docker container image. Приведенная ниже команда выводит сведения о версии и номере сборки SQL Server для образа mcr.microsoft.com/mssql/server:2017-latest.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 ServerRun a specific SQL Server container image

Примечание

Начиная с SQL Server 2019 с накопительным пакетом обновления 3 (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.

Запуск образов контейнеров на основе RHELRun RHEL-based container images

Документация по образам контейнеров с Linux для SQL Server содержит информацию о контейнерах на основе 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.

Например, следующая команда извлекает последнюю версию контейнера с накопительным обновлением 1 для SQL Server 2019, в которой используется RHEL 8: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

В кратком руководстве в предыдущем разделе используется бесплатный выпуск SQL Server Developer из центра Docker Hub.The quickstart in the previous section runs the free Developer edition of SQL Server from Docker Hub. Основная часть приведенных здесь сведений также применима для использования рабочих образов контейнеров, таких как выпуски Enterprise, Standard или Web.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 и Enterprise доступны в рамках программы корпоративного лицензирования Майкрософт.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. В следующем примере показано, как запустить последнюю версию образа контейнера с SQL Server 2017 для выпуска Enterprise: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. Кроме того, вы соглашаетесь с тем, что использование программного обеспечения SQL Server, выполняющегося в образе контейнера Docker, будет регламентироваться условиями вашей лицензии 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 см. в статье Настройка параметров SQL Server с помощью переменных среды в Linux.For a full list of possible values for MSSQL_PID, see Configure SQL Server settings with environment variables on Linux.

Запуск нескольких контейнеров SQL ServerRun 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.

В следующем примере создаются два контейнера SQL Server 2017, которые сопоставляются с портами 1401 и 1402 на хост-компьютере.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

В следующем примере создаются два контейнера SQL Server 2019, которые сопоставляются с портами 1401 и 1402 на главном компьютере.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 будут выполняться в разных контейнерах.Now there are two instances of SQL Server running in separate containers. Клиенты могут подключаться к каждому из этих экземпляров SQL Server, указав IP-адрес узла Docker и номер порта для контейнера.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 будет обновлен только во вновь создаваемых контейнерах. В работающих контейнерах обновление не производится.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 применяется один из методов обеспечения сохраняемости данных.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. Остановите контейнер с SQL Server с помощью команды docker stop.Stop the SQL Server container with the docker stop command.

  3. Создайте новый контейнер с SQL Server с помощью команды docker run и укажите сопоставленный каталог узла или контейнер тома данных.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 и общедоступной версией.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

  • Сведения о начале работы с образами контейнеров с SQL Server 2017 в Docker можно найти в кратком руководствеGet started with SQL Server 2017 container images on Docker by going through the quickstart
  • Сведения о начале работы с образами контейнеров с SQL Server 2019 в Docker можно найти в кратком руководствеGet started with SQL Server 2019 container images on Docker by going through the quickstart