Code example that create ten instances: each version of ‘Express’,’Developer’,’Web’,’StandardEdition’,’EnterpriseEdition’
Clear-Host
###################################################################################################
## Create-NewDockerInstances
###################################################################################################
function Create-NewDockerInstance
{
param(
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[string] $InstanceName,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[ValidateSet('Express','Developer','Web','StandardEdition','EnterpriseEdition')]
[string] $SQLEdition,
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[ValidateSet('2017','2019')]
[string] $SQLVersion,
[string] $DefaultSAPassword = 'MyRealPasswordForTheDemo#312'
)
##################################################################################################
## Get the list of containers, so i can decide to either run(create+start), or just start
###################################################################################################
$AllContainers = [System.Collections.ArrayList] @()
$Results = &"docker.exe" ps -a
if ($Results.Count -gt 1)
{
for([int] $i = 1;$i -lt $Results.Count;$i++)
{
## &"docker.exe" ps -a has whitespace that puts us at element 12
$Rev = $Results[$i][-1..-$Results[$i].Length] -join '' #reverse the string
$ContainerName = (( $Rev -split '\s+')[0].Trim())[-1..-$Results[$i].Length] -join '' # get the first element of the string and reverse it again
$AllContainers.Add($ContainerName) | Out-Null
##uncomment to delete/cleanup all the old containers#
#&"docker.exe" rm $ContainerName
}
}
###################################################################################################
## Create and run if it does not exist, else start it
###################################################################################################
$ver = $InstanceName.ToLower()
$port = switch($SQLEdition) { 'Express' {''} 'Developer' {'1'} 'Web' {'2'} 'StandardEdition' {'3'} 'EnterpriseEdition'{'4'} }
$port += $SQLVersion + ':1433'
$mcr = switch($SQLVersion) { '2017' {'mcr.microsoft.com/mssql/server:2017-latest'} '2019' {'mcr.microsoft.com/mssql/server:2019-latest'} }
if($AllContainers -notcontains $ver)
#{&"docker.exe" run $ParameterArray -d $mcr }
{&"docker.exe" run -e "ACCEPT_EULA=Y" -e "$("SA_PASSWORD=$DefaultSAPassword")" -e "$("MSSQL_PID=$SQLEdition")" --name "$("$ver")" -p $($port) -d $($mcr) }
else {&"docker.exe" start $ver}
} # End function
###################################################################################################
function Get-AllDockerInstances([switch] $IncludeAll)
{
if($IncludeAll)
{
&"docker.exe" ps -a ##running containers
} else
{
&"docker.exe" ps ##running containers
}
}
###################################################################################################
## Save-AllRunningDockerInstances
###################################################################################################
function Save-AllRunningDockerInstances()
{
###################################################################################################
##save all my running docker containers, Keep any changes
###################################################################################################
$Results = &"docker.exe" ps
if ($Results.Count -gt 1)
{
for([int] $i = 1;$i -lt $Results.Count;$i++)
{
$Container = $Results[$i].SubString(0,$Results[$i].IndexOf(' ')).Trim()
$Rev = $Results[$i][-1..-$Results[$i].Length] -join '' #reverse the string
$ContainerName = (( $Rev -split '\s+')[0].Trim())[-1..-$Results[$i].Length] -join '' # get the first element of the string and reverse it again
#Write-Host "Saving $ContainerName" -ForegroundColor Gray
##docker.exe : Error response from daemon: invalid reference format: repository name must be lowercase
$ZipFileName = $ContainerName.ToLower() + ".zip"
&"docker.exe" save ($ContainerName.ToLower()) > $ZipFileName
}
}
}
###################################################################################################
###################################################################################################
## Delete-AllRunningDockerInstances
###################################################################################################
function Delete-AllRunningDockerInstances([switch] $IncludeAll)
{
if($IncludeAll){$Results = &"docker.exe" ps -a} else{$Results = &"docker.exe" ps }
if ($Results.Count -gt 1)
{
for([int] $i = 1;$i -lt $Results.Count;$i++) # $i=1
{
$Container = $Results[$i].SubString(0,$Results[$i].IndexOf(' ')).Trim()
$Rev = $Results[$i][-1..-$Results[$i].Length] -join '' #reverse the string
$ContainerName = (( $Rev -split '\s+')[0].Trim())[-1..-$Results[$i].Length] -join '' # get the first element of the string and reverse it again
Write-Host "Stopping $ContainerName" -ForegroundColor Gray
&"docker.exe" stop $Container # $ContainerName
&"docker.exe" rm $Container # $ContainerName
}
}
}
###################################################################################################
###################################################################################################
## The Work
###################################################################################################
##Create-NewDockerInstance -InstanceName "Express2017" -SQLEdition "Developer" -SQLVersion "2017"
#Get-AllDockerInstances
#Get-AllDockerInstances -IncludeAll
#Save-AllRunningDockerInstances
#Delete-AllRunningDockerInstances
#Delete-AllRunningDockerInstances -IncludeAll
$EditionMatrix = @('Express','Developer','Web','StandardEdition','EnterpriseEdition')
$VersionMatrix = @('2017','2019')
foreach($Version in $VersionMatrix)
{
foreach($Edition in $EditionMatrix)
{
Write-Host "Creating SQL $Version $Edition" -ForegroundColor Green
Create-NewDockerInstance -InstanceName $($Edition.Replace("Edition","") + $Version ) -SQLEdition $Edition -SQLVersion $Version
}
}