Merge remote-tracking branch 'refs/remotes/Microsoft/master' into json

This commit is contained in:
Jovan Popovic
2016-06-22 13:31:33 +02:00
3 changed files with 67 additions and 12 deletions
@@ -1,6 +1,6 @@
# mssql server 2014 express image listening on static port 1433
#
# Note: This dockerfile is based on Buc Rogers' work here:
#
# Note: This dockerfile is based on Buc Rogers' work here:
# https://github.com/brogersyh/Dockerfiles-for-windows/tree/master/sqlexpress
#
# .NET 3.5 required for SQL Server
@@ -12,12 +12,13 @@ MAINTAINER Perry Skountrianos
# set environment variables
ENV sql_express_download_url "https://download.microsoft.com/download/1/5/6/156992E6-F7C7-4E55-833D-249BD2348138/ENU/x64/SQLEXPR_x64_ENU.exe"
ENV sa_password _
ENV attach_dbs "[]"
# make install files accessible
COPY . /
WORKDIR /
# download and install Microsoft SQL 2014 Express Edition in one step
# download and install Microsoft SQL 2014 Express Edition in one step
RUN powershell -Command (New-Object System.Net.WebClient).DownloadFile('%sql_express_download_url%', 'sqlexpress.exe') && /sqlexpress.exe /qs /x:setup && /setup/setup.exe /q /ACTION=Install /INSTANCENAME=SQLEXPRESS /FEATURES=SQLEngine /UPDATEENABLED=0 /SQLSVCACCOUNT="NT AUTHORITY\System" /SQLSYSADMINACCOUNTS="BUILTIN\ADMINISTRATORS" /TCPENABLED=1 /NPENABLED=0 /IACCEPTSQLSERVERLICENSETERMS && del /F /Q sqlexpress.exe && rd /q /s setup
RUN powershell -Command \
@@ -25,6 +26,6 @@ RUN powershell -Command \
stop-service MSSQL`$SQLEXPRESS ; \
set-itemproperty -path 'HKLM:\software\microsoft\microsoft sql server\mssql12.SQLEXPRESS\mssqlserver\supersocketnetlib\tcp\ipall' -name tcpdynamicports -value '' ; \
set-itemproperty -path 'HKLM:\software\microsoft\microsoft sql server\mssql12.SQLEXPRESS\mssqlserver\supersocketnetlib\tcp\ipall' -name tcpport -value 1433 ; \
set-itemproperty -path 'HKLM:\software\microsoft\microsoft sql server\mssql12.SQLEXPRESS\mssqlserver\' -name LoginMode -value 2 ;
set-itemproperty -path 'HKLM:\software\microsoft\microsoft sql server\mssql12.SQLEXPRESS\mssqlserver\' -name LoginMode -value 2 ;
CMD powershell ./start %sa_password%
CMD powershell ./start -sa_password %sa_password% -attach_dbs \"%attach_dbs%\" -Verbose
@@ -17,7 +17,7 @@ Note: This dockerfile is based on Buc Rogers' work that can be found [here] (htt
## About this sample
1. **Applies to:** SQL Server 2014 Express, Windows Server Technical Preview 4 or later
5. **Authors:** Perry Skountrianos [perrysk-msft]
5. **Authors:** Perry Skountrianos [perrysk-msft], Max Knor [knom]
<a name=before-you-begin></a>
@@ -27,16 +27,44 @@ To run this sample, you need the following prerequisites.
**Software prerequisites:**
You can run the container with the following command. Note the you'll need Windows Server Core TP5 v10.0.14300.1000.
docker run -p 1433:1433 --env sa_password=<YOUR SA PASSWORD> microsoft/mssql-server-2014-express-windows
You can run the container with the following command.
(Note the you'll need Windows Server Core TP5 v10.0.14300.1000.)
````
docker run -p 1433:1433 -v C:/temp/:C:/temp/ --env sa_password=<YOUR SA PASSWORD> --env attach_dbs="<DB-JSON-CONFIG>" -v microsoft/mssql-server-2014-express-windows
````
- **-p HostPort:containerPort** is for port-mapping a container network port to a host port.
- **-v HostPath:containerPath** is for mounting a folder from the host inside the container.
This can be used for saving database outside of the container.
<a name=run-this-sample></a>
## Run this sample
The image provides one environment variable to set the sa password: </br>
The image provides two environment variables to optionally set: </br>
- sa_password: Sets the sa password and enables the sa login
- attach_dbs: The configuration for attaching custom DBs (.mdf, .ldf files).
This should be a JSON string, formed like the following (note the SINGLE quotes and everything in one line):
```
[{'dbName':'MaxDb','dbFiles':['C:\\temp\\maxtest.mdf','C:\\temp\\maxtest_log.
ldf']},{'dbName':'PerryDb','dbFiles':['C:\\temp\\perrytest.mdf','C:\\temp\\perrytest_log.
ldf']}]
```
There can be zero to many databases in the array.
- dbName: The name of the database
- dbFiles: An array of absolute paths to the .MDF and .LDF files.
Can be one or many, note that the path has double backslashes for escaping!
This example shows all parameters in action:
```
docker run -p 1433:1433 -v C:/temp/:C:/temp/ --env attach_dbs="[{'dbName':'MaxTest','dbFiles':['C:\\temp\\maxtest.mdf','C:\\temp\\maxtest_log.
ldf']}]" microsoft/mssql-server-2014-express-windows
```
<a name=sample-details></a>
## Sample details
@@ -1,17 +1,43 @@
# The script sets the sa password and start the SQl Service
# The script sets the sa password and start the SQL Service
# Also it attaches additional database from the disk
# The format for attach_dbs
param(
[Parameter(Mandatory=$false)]
[string]$sa_password
[string]$sa_password,
[Parameter(Mandatory=$false)]
[string]$attach_dbs
)
# start the service
Write-Verbose "Starting SQL Server"
start-service MSSQL`$SQLEXPRESS
if($sa_password -ne "_"){
Write-Verbose "Changing SA login credentials"
$sqlcmd = "ALTER LOGIN sa with password=" +"'" + $sa_password + "'" + ";ALTER LOGIN sa ENABLE;"
Invoke-Sqlcmd -Query $sqlcmd -ServerInstance ".\SQLEXPRESS"
}
$attach_dbs = $attach_dbs | ConvertFrom-Json
if ($null -ne $attach_dbs){
Write-Verbose "Attaching database(s)"
Foreach($db in $attach_dbs)
{
$files = @();
Foreach($file in $db.dbFiles)
{
$files += "(FILENAME = 'N$($file)')";
}
$files = $files -join ","
$sqlcmd = "sp_detach_db $($db.dbName);GO;CREATE DATABASE $($db.dbName) ON $($files) FOR ATTACH ;GO;"
Write-Host Invoke-Sqlcmd -Query $($sqlcmd) -ServerInstance ".\SQLEXPRESS"
Invoke-Sqlcmd -Query $sqlcmd -ServerInstance ".\SQLEXPRESS"
}
}
while ($true) { Start-Sleep -Seconds 3600 }