forked from tfenster/mssql-image
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
119 lines (109 loc) · 5.94 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# escape=`
ARG BASE
FROM mcr.microsoft.com/dotnet/framework/runtime:4.8-windowsservercore-$BASE
ARG DEV_ISO= `
EXP_EXE= `
CU= `
VERSION=`
TYPE=
ENV DEV_ISO=$DEV_ISO `
EXP_EXE=$EXP_EXE `
CU=$CU `
VERSION=$VERSION `
sa_password="_" `
attach_dbs="[]" `
accept_eula="_" `
sa_password_path="C:\ProgramData\Docker\secrets\sa-password"
LABEL org.opencontainers.image.authors="Tobias Fenster (https://tobiasfenster.io)"
LABEL org.opencontainers.image.source="https://github.com/tfenster/mssql-image"
LABEL org.opencontainers.image.description="An unofficial, unsupported and in no way connected to Microsoft container image for MS SQL Server"
LABEL org.opencontainers.image.version=$VERSION-$TYPE
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]
USER ContainerAdministrator
RUN $ProgressPreference = 'SilentlyContinue'; `
Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')); `
choco feature enable -n allowGlobalConfirmation; `
choco install --no-progress --limit-output vim 7zip sqlpackage; `
refreshenv;
RUN if (-not [string]::IsNullOrEmpty($env:DEV_ISO)) { `
Invoke-WebRequest -UseBasicParsing -Uri $env:DEV_ISO -OutFile c:\SQLServer.iso; `
mkdir c:\installer; `
7z x -y -oc:\installer .\SQLServer.iso; `
.\installer\setup.exe /q /ACTION=Install /INSTANCENAME=MSSQLSERVER /FEATURES=SQLEngine /UPDATEENABLED=0 /SQLSVCACCOUNT='NT AUTHORITY\NETWORK SERVICE' /SQLSYSADMINACCOUNTS='BUILTIN\ADMINISTRATORS' /TCPENABLED=1 /NPENABLED=0 /IACCEPTSQLSERVERLICENSETERMS; `
remove-item c:\SQLServer.iso -ErrorAction SilentlyContinue; `
remove-item -recurse -force c:\installer -ErrorAction SilentlyContinue; `
}
RUN if (-not [string]::IsNullOrEmpty($env:EXP_EXE)) { `
Invoke-WebRequest -UseBasicParsing -Uri $env:EXP_EXE -OutFile c:\SQLServerExpress.exe; `
Start-Process -Wait -FilePath .\SQLServerExpress.exe -ArgumentList /qs, /x:installer ; `
.\installer\setup.exe /q /ACTION=Install /INSTANCENAME=SQLEXPRESS /FEATURES=SQLEngine /UPDATEENABLED=0 /SQLSVCACCOUNT='NT AUTHORITY\NETWORK SERVICE' /SQLSYSADMINACCOUNTS='BUILTIN\ADMINISTRATORS' /TCPENABLED=1 /NPENABLED=0 /IACCEPTSQLSERVERLICENSETERMS; `
remove-item c:\SQLServerExpress.exe -ErrorAction SilentlyContinue; `
remove-item -recurse -force c:\installer -ErrorAction SilentlyContinue; `
}
RUN $SqlServiceName = 'MSSQLSERVER'; `
if ($env:TYPE -eq 'exp') { `
$SqlServiceName = 'MSSQL$SQLEXPRESS'; `
} `
While (!(get-service $SqlServiceName -ErrorAction SilentlyContinue)) { Start-Sleep -Seconds 5 } ; `
Stop-Service $SqlServiceName ; `
$databaseFolder = 'c:\databases'; `
mkdir $databaseFolder; `
$SqlWriterServiceName = 'SQLWriter'; `
$SqlBrowserServiceName = 'SQLBrowser'; `
Set-Service $SqlServiceName -startuptype automatic ; `
Set-Service $SqlWriterServiceName -startuptype manual ; `
Stop-Service $SqlWriterServiceName; `
Set-Service $SqlBrowserServiceName -startuptype manual ; `
Stop-Service $SqlBrowserServiceName; `
$SqlTelemetryName = 'SQLTELEMETRY'; `
if ($env:TYPE -eq 'exp') { `
$SqlTelemetryName = 'SQLTELEMETRY$SQLEXPRESS'; `
} `
Set-Service $SqlTelemetryName -startuptype manual ; `
Stop-Service $SqlTelemetryName; `
$version = [System.Version]::Parse($env:VERSION); `
$id = ('mssql' + $version.Major + '.MSSQLSERVER'); `
if ($env:TYPE -eq 'exp') { `
$id = ('mssql' + $version.Major + '.SQLEXPRESS'); `
} `
Set-itemproperty -path ('HKLM:\software\microsoft\microsoft sql server\' + $id + '\mssqlserver\supersocketnetlib\tcp\ipall') -name tcpdynamicports -value '' ; `
Set-itemproperty -path ('HKLM:\software\microsoft\microsoft sql server\' + $id + '\mssqlserver\supersocketnetlib\tcp\ipall') -name tcpdynamicports -value '' ; `
Set-itemproperty -path ('HKLM:\software\microsoft\microsoft sql server\' + $id + '\mssqlserver\supersocketnetlib\tcp\ipall') -name tcpport -value 1433 ; `
Set-itemproperty -path ('HKLM:\software\microsoft\microsoft sql server\' + $id + '\mssqlserver') -name LoginMode -value 2; `
Set-itemproperty -path ('HKLM:\software\microsoft\microsoft sql server\' + $id + '\mssqlserver') -name DefaultData -value $databaseFolder; `
Set-itemproperty -path ('HKLM:\software\microsoft\microsoft sql server\' + $id + '\mssqlserver') -name DefaultLog -value $databaseFolder;
RUN if (-not [string]::IsNullOrEmpty($env:CU)) { `
$ProgressPreference = 'SilentlyContinue'; `
Write-Host ('Install CU from ' + $env:CU) ; `
Invoke-WebRequest -UseBasicParsing -Uri $env:CU -OutFile c:\SQLServer-cu.exe ; `
.\SQLServer-cu.exe /q /IAcceptSQLServerLicenseTerms /Action=Patch /AllInstances ; `
$try = 0; `
while ($try -lt 20) { `
try { `
$var = sqlcmd -Q 'select SERVERPROPERTY(''productversion'') as version' -W -m 1 | ConvertFrom-Csv | Select-Object -Skip 1 ; `
if ($var.version[0] -eq $env:VERSION) { `
Write-Host ('Patch done, found expected version ' + $var.version[0]) ; `
$try = 21 ; `
} else { `
Write-Host ('Patch seems to be ongoing, found version ' + $var.version[0] + ', try ' + $try) ; `
} `
} catch { `
Write-Host 'Something unexpected happened, try' $try ; `
Write-Host $_.ScriptStackTrace ; `
} finally { `
if ($try -lt 20) { `
Start-Sleep -Seconds 60 ; `
} `
$try++ ; `
} `
} `
if ($try -eq 20) { `
Write-Error 'Patch failed' `
} else { `
Write-Host 'Successfully patched!' `
} `
} `
remove-item c:\SQLServer-cu.exe -ErrorAction SilentlyContinue;
WORKDIR c:\scripts
COPY .\start.ps1 c:\scripts\
CMD .\start.ps1