SQL Server 2016 Express Edition in Windows containers
We are excited to announce the public availability of SQL Server 2016 Express Edition in Windows Containers! The image is now available on Docker Hub and the build scripts are hosted on our SQL Server Samples GitHub repository. This image can be used in both Windows Server Containers as well as Hyper-V Containers.
SQL Server 2016 Express Edition Docker Image
We hope you will find these images useful and leverage them for your container-based applications!
Why use SQL Server in containers?
SQL Server 2016 in a Windows container would be ideal when you want to:
- Quickly create and start a set of SQL Server instances for development or testing.
- Maximize density in test or production environments, especially in microservice architectures.
- Isolate and control applications in a multi-tenant infrastructure.
Prerequisites
Before you can get started with the SQL Server 2016 Express Edition image, you’ll need a Windows Server 2016 or Windows 10 host with the latest updates, the Windows Container feature enabled, and the Docker engine.
Please find the details for each of these requirements below.
- Get a Windows Server 2016 or Windows 10 host
- Windows Server 2016: You can start by downloading an evaluation copy from the TechNet Evaluation Center. Please make sure that all the latest Windows updates are installed, most importantly KB3176936 and KB3192366.
- Windows 10: You will need Windows 10 Anniversary Edition Professional or Enterprise. Note: if you are on the Windows Insider builds, make sure that you are using build 14942.1000 or higher to avoid an issue with the Docker run command in older builds.
- Enable the Windows Container feature and install the Docker Engine
Pulling and Running SQL Server 2016 in a Windows Container
Below are the Docker pull and run commands for running SQL Server 2016 Express instance in a Windows Container.
Make sure that the mandatory sa_password environment variable meets the SQL Server 2016 Password Complexity requirements.
First, pull the image
docker pull microsoft/mssql-server-2016-express-windows
Then, run a SQL Server container
Running a Windows Server Container (Windows Server 2016 only):
docker run -d -p 1433:1433 ––env sa_password=<YOUR_PWD> microsoft/mssql-server-2016-express-windows
Running a Hyper-V Container (Windows Server 2016 or Windows 10):
docker run -d -p 1433:1433 ––env sa_password=<YOUR_PWD> ––isolation=hyperv microsoft/mssql-server-2016-express-windows
Connecting to SQL Server 2016
From within the container
An easy way to connect to the SQL Server instance from inside the container is by using the sqlcmd utility.
First, use the docker ps command to get the container ID that you want to connect to and use it to replace the parameter placeholder ‘<DOCKER_CONTAINER_ID>’ in the commands below. You can use the docker exec -it command to create an interactive command prompt that will execute commands inside of the container.
You can connect to SQL Server by using either Windows or SQL Authentication.
Windows authentication using container administrator account
docker exec -it <DOCKER_CONTAINER_ID> sqlcmd
SQL authentication using the system administrator (SA) account
docker exec -it <DOCKER_CONTAINER_ID> sqlcmd -S. -Usa
From outside the container
One of the ways to access SQL Server 2016 from outside the container is by installing SQL Server Management Studio (SSMS). You can install and use SSMS either on the host or on another machine that can remotely connect to the host .
Connect from SSMS installed on the host
To connect from SSMS installed on the host, you’ll need the following information:
- The IP Address of the container
One of the ways to get the IP address of the container is by using the docker inspect command:
docker inspect –format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ <DOCKER_CONTAINER_ID> - The SQL Server port number
This is the same port number that was specified in the docker run command. If you used 1433 you don’t need to specify the port. If you want to specify a port to connect to you can add it to the end of the server name like this: myserver,1433. - SQL system administrator account credentials
The username is ‘sa’ and the sa_password that was used in the docker run command.
Connect from SSMS on another machine (other than the Host Environment)
To connect from SSMS installed on another machine (that can connect to the host), you’ll need the following information:
- The IP address of the host
You can get the host’s IP address by using the ipconfig command from a PowerShell or command prompt window. - The SQL Server port number
This is the same port that was specified in the docker run command. If you used 1433 you don’t need to specify the port. If you want to specify a port to connect to you can add it to the end of the server name like this: myserver,1433.
Note: Depending on your configuration, you might have to create a firewall rule to open the necessary SQL Server ports on the host. Please refer to this article for more information regarding container networking. - SQL system administrator account credentials
The username is ‘sa’ and the sa_password that was used in the docker run command.
SQL 2016 Features Supported on Windows Server Core
Please refer to this link for all SQL Server 2016 features that are supported on a Windows Server Core installation.
Developing Using Windows 10 Containers
Check out this blog post by Alex Ellis, Docker Captain, on how to use SQL Server 2016 Express Edition in a Windows container as part of an application development and test environment on Windows 10.
Docker with Microsoft SQL 2016 + ASP.NET
Further Reading
Windows Containers Documentation
Container Resource Management
Tutorials for SQL Server 2016