Make your own SQL Server Docker Container

Recently I needed to have a SQL Server 2008 R2 instance to do some testing. I had to install it on my laptop, but I wasn’t a big fan of installing such an old version locally. A couple of weeks ago at Dataminds Connect  I saw Andrew Prusky building customized Docker containers. Because most of the public SQL Server Docker images are only for the most recent SQL Server versions, it seemed like a great opportunity to create my own SQL Server 2008 R2 Docker image.

You can use below instructions for other applications as well. In this example you will see how to build a SQL Server container (I didn’t streamline the SP on purpose) together with one of it’s prerequisites, the .Net feature.

Some preparations:

  • Docker needs to be in Windows Container mode.
  • We will be building a SQL Server 2008 R2 SP3 image, so we need source files for both SQL Server and the Service pack.
  • I decided to use an existing Windows Docker image, so that means we will be working with Windows Server (core) 2016.
  • We also need the .Net 3.5 feature in package form.
  • Powershell script start.ps1

Here we go

  • Create the following directory structure

A root folder, containing our dockerfile, start.ps1 and subfolders for SQL Server 2008 R2 , Service Pack 3  and the .Net package

In my case:

  • Place the extracted SQL Server source files in respectively \mssql and \sql2008r2sp3 folders.
  • Place the extracted .Net cab file microsoft-windows-netfx3-ondemand-package.cab in the dotnet folder. You can extract it from a Windows ISO or DVD. The actual file is located in the \sources\sxs folder.
  • Put the file start.ps1 in the root folder.
    Start.ps1 is a script from Microsofts Github repository. It accepts they EULA and sets the sa password. Otherwise you need too add these actions to your Docker Run command each time you create a container. At the end of the script an infinite loop is created, which keeps the container running. Without this the container would start, and stop immediately. Bit of a weird solution, but it works. I hope this will be replaced by a cleaner solution in the future.
  • We will be working from the root folder. I had some issues with full paths, using relative paths solved this issue.Also, remember that in a dockerfile we use a forward slash instead of a backslash when working in the Docker context. Example: COPY \dotnet C:/source/dotnet
  • Still in the root folder, create a new text file, name it dockerfile. These are the contents for that file:


# using Microsoft Windows Server Core image

FROM microsoft/windowsservercore

#install dotnet 3.51 (prereq for SQL Server 2008 R2)

RUN powershell -Command (mkdir C:/source/dotnet)

COPY \dotnet C:/source/dotnet

run powershell Install-WindowsFeature -name NET-Framework-Core -source C:/source/dotnet

# this is ok as well : run Dism /online /enable-feature /featurename:NetFX3 /All /Source:C:/source/dotnet

RUN powershell -Command (rm C:/source/dotnet -recurse)

# create temporary directory to hold SQL Server sources

RUN powershell -Command (mkdir C:/source/sqlserver2008r2)

RUN powershell -Command (mkdir C:/source/sqlserver2008r2SP3)

# copy sources to image

COPY \mssql C:/source/sqlserver2008r2

COPY \sql2008r2sp3 C:/source/sqlserver2008r2sp3

# install SQL Server 2008 R2


# install SP3 for SQL 2008 R2

RUN C:/source/sqlserver2008r2sp3/setup.exe /q /IAcceptSQLServerLicenseTerms /Action=Patch /Instanceid=mssqlserver

# remove the sources

RUN powershell -Command (rm C:/source/sqlserver2008r2 -recurse)

RUN powershell -Command (rm C:/source/sqlserver2008r2SP3 -recurse)

# make sure service is set to automatic

RUN powershell -Command (set-service MSSQLSERVER -StartupType Automatic)

# switch shell to powershell

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

COPY \start.ps1 /




# run start.ps1

CMD .\start -sa_password $env:SA_PASSWORD -ACCEPT_EULA $env:ACCEPT_EULA -Verbose


  • Open a Powershell session, go the root folder and build the image.

! Don’t forget the dot at the end of the command.

Cd d:\temp\docker
docker build -t sql2008r2sp3df .


Download the screen output here. 


  • Build the container.

Port 14567 will be mapped to the SQL Server port 1433, and a container named dckrcntsql2008r2 will be created.

docker run -d -i -p 14567:1433 –name dckrcntsql2008r2 sql2008r2sp3df

PS D:\temp\docker> docker run -d -i -p 14567:1433 –name dckrcntsql2008r2 sql2008r2sp3df


  • Start the container

docker start dckrcntsql2008r2

PS D:\temp\docker> docker start dckrcntsql2008r2


-In SSMS, connect to localhost,14576



  • And that’s it. Happy Dockering.
Parameter sniffing solved with new Parameter Sensitive Plan Optimization feature
If you’re someone that works a lot with Microsoft SQL Server, there’s no doubt that you’ve had issues with an issue called “Parameter sniffing” before....
Creating maps with R and Power BI
The possibilities are infinite when it comes to creating custom visuals in Power BI. As long as you are creative and have knowledge about the...
Reading notifications
Sending monitoring alerts through Telegram
What if you could get the ease of phone notifications for whatever monitoring alerts you need? Then we have a solution for you with the...
Send mails with Azure Elastic Database Jobs
The DatabaseMail feature in SQL Server and Managed Instance is widely used by many professionals. But what if you want similar functionality in Azure SQL...
Sorting matrices in Power BI
Recently I worked on a Power BI project for a client. They had a SharePoint site where they regularly published articles and wanted to pour...
The world of data is evolving
The data landscape has changed dramatically over recent years, the world of data is evolving. In the past, we mainly heard that we needed to...