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:
Here we go
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:
D:\temp\docker\
Dockerfile
Start.ps1
\mssql
\sql2008r2sp3
\dotnet
# 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
RUN C:/source/sqlserver2008r2\setup.exe /q /ACTION=Install /FEATURES=SQL /INSTANCENAME=MSSQLSERVER /SECURITYMODE=SQL /SAPWD="S1mbaS@mbA" /SQLSVCACCOUNT="NT AUTHORITY\System" /SQLSYSADMINACCOUNTS="BUILTIN\Administrators" /TCPENABLED=1 /IACCEPTSQLSERVERLICENSETERMS /SKIPRULES=PerfMonCounterNotCorruptedCheck /AGTSVCACCOUNT="NT AUTHORITY\System"
# 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 /
WORKDIR /
ENV SA_PASSWORD "S1mbaS@mbA"
ENV ACCEPT_EULA "Y"
# run start.ps1
CMD .\start -sa_password $env:SA_PASSWORD -ACCEPT_EULA $env:ACCEPT_EULA -Verbose
! Don’t forget the dot at the end of the command.
Cd d:\temp\docker
docker build -t sql2008r2sp3df .
Download the screen output here.
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
7f4a6ac5eb069370c7fdf83d37c67f8c84265ef5f2c78852765769ef48368fe0
docker start dckrcntsql2008r2
PS D:\temp\docker> docker start dckrcntsql2008r2
dckrcntsql2008r2
-In SSMS, connect to localhost,14576