新版的Windows 2016已经支持原生Docker,现在也将部分服务往Docker上迁移进行测试。
环境中有使用.net 3.5和.net 4.0以及有使用Oracle客户端,因此Web容器就需要安装Oracle客户端
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
|
FROM microsoft
/iis
# install .NET 3.5
ADD sxs
/sxs
RUN Dism
/online
/enable-feature
/featurename
:NetFX3
/All
/Source
:C:\sxs
/LimitAccess
&& del
/S
/Q
C:\sxs
# install ASP.NET 4.5
RUN dism
/online
/enable-feature
/all
/featurename
:NetFx4
/featurename
:IIS-ApplicationInit
/featurename
:IIS-ASPNET45
/featurename
:IIS-ASPNET
/NoRestart
# enable windows eventlog
RUN powershell.exe -
command
Set-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\WMI\Autologger\EventLog-Application Start 1
# set IIS log fields
RUN
/windows/system32/inetsrv/appcmd
.exe
set
config
/section
:system.applicationHost
/sites
/siteDefaults
.logFile.logExtFileFlags:
"Date, Time, ClientIP, UserName, SiteName, ServerIP, Method, UriStem, UriQuery, HttpStatus, Win32Status, TimeTaken, ServerPort, UserAgent, Referer, HttpSubStatus"
/commit
:apphost
# install Oracle Client
ADD win64_11gR2_client.zip
/win64_11gR2_client
.zip
ADD unzip.exe
/unzip
.exe
RUN
/unzip
.exe
/win64_11gR2_client
.zip && del
/S
/Q
win64_11gR2_client.zip
ADD client.rsp
/client/client
.rsp
RUN
/client/setup
.exe -silent -force -noconsole -ignoreSysPrereqs -ignorePrereq -waitforcompletion -responseFile C:\client\client.rsp && del
/S
/Q
client
#RUN cacls c:\app /T /E /C /G users:r
# deploy webapp
#COPY publish /inetpub/wwwroot/html
# set entrypoint script
ADD SetHostsAndStartMonitoring.cmd \SetHostsAndStartMonitoring.cmd
ENTRYPOINT [
"C:\\SetHostsAndStartMonitoring.cmd"
]
# declare volumes
VOLUME [
"c:/inetpub/logs/LogFiles"
,
"C:/inetpub/wwwroot/html"
]
|
Dockerfile涉及的文件内容有
sxs #在Windows Server 2016 安装包的\sources\sxs\目录
unzip.exe #Oracle Client客户端安装包的client\install目录下
win64_11gR2_client.zip #自行到官方下载
client.rsp #Oracle客户端安装响应文件
SetHostsAndStartMonitoring.cmd
client.rsp
1
2
3
4
5
6
7
8
9
10
11
12
13
|
oracle.
install
.responseFileVersion=http:
//www
.oracle.com
/2007/install/rspfmt_clientinstall_response_schema_v11_2_0
ORACLE_HOSTNAME=
UNIX_GROUP_NAME=
INVENTORY_LOCATION=C:\Program Files\Oracle\Inventory
SELECTED_LANGUAGES=zh_CN,en
ORACLE_HOME=C:\app\Administrator\product\11.2.0\client_1
ORACLE_BASE=C:\app\Administrator
oracle.
install
.client.installType=Runtime
oracle.
install
.client.customComponents=
"oracle.precomp:11.2.0.1.0"
,
"oracle.ons:11.2.0.0.0"
,
"oracle.oraolap.mgmt:11.2.0.1.0"
,
"oracle.rdbms.scheduler:11.2.0.1.0"
oracle.
install
.client.customComponents=
oracle.
install
.client.oramtsPortNumber=49152
oracle.
install
.client.schedulerAgentHostName=
oracle.
install
.client.schedulerAgentPortNumber=
|
SetHostsAndStartMonitoring.cmd
1
2
3
4
5
6
|
echo
%HOST% >>
/Windows/System32/drivers/etc/hosts
/windows/system32/inetsrv/appcmd
.exe delete site
"Default Web Site/"
/windows/system32/inetsrv/appcmd
.exe add apppool
/name
:
"%site_name%"
/managedRuntimeVersion
:
"v%site_version%.0"
/managedPipelineMode
:Classic -queueLength:65535
/windows/system32/inetsrv/appcmd
.exe add site
/name
:
"%site_name%"
/physicalPath
:
"c:\inetpub\wwwroot\html"
-serverAutoStart:
true
/bindings
:http:
//
*:80
/windows/system32/inetsrv/appcmd
.exe
set
site
/site
.name:
"%site_name%"
/[path=
'/'
].applicationPool:
"%site_name%"
c:\ServiceMonitor.exe w3svc
|
文件中涉及到三个环境变量
HOST #因为windows Docker无法通过--add-host指host这里通过这种方法指host
site_name #站点域名
site_version #.net版本
Docker启动示例:
1
|
docker run -d -p 80 -e site_name=fengwan.blog.51cto.com -e site_version=4 -e host=
"192.168.2.2 db.51cto.com"
-
v
c:
/webroot/fengwan
:c:
/inetpub/wwwroot/html
-
v
c:
/logs
:c:
/inetpub/logs/logFiles
image_name
|
本文转自 rong341233 51CTO博客,原文链接:http://blog.51cto.com/fengwan/1943280