有两种Windows容器可以用Windows Server Containers和Windows Hyper-V Containers处理。虽然一个Windows Server容器与容器主机及运行在该主机上的所有容器共享一个核心时,但却并不与Hyper-V Containers共享该容器主机的核心,这导致容器主机和容器之间的隔绝带来了额外的好处。你可以用docker run、dockerfile and build和docker compose等命令来创建Windows Containers。你也可以在Container Images on Windows Server和Multi-Container Applications上发现更多细节,后者是一个用Windows容器开发的音乐商店应用样本。
本文会重点讲解基于测试目的使用自签发证书为Windows Containers添加HTTPS支持。注意,这是通过Azure平台在VM虚拟机上运行的Windows Server 2016环境下使用Container的。
docker run -ti –entrypoint cmd -p 80:80 -p 443:443 -h myweb -v c:\demo\appfiles:c:\temp microsoft/aspnet
注意命令行中使用了几个选项。“-ti”选项是互动会话,“-p”选项是端口映射,“-v”选项是vm虚拟机上名为demo的本地文件夹到名为temp的容器文件夹的卷映射。用ipconfig命令找到容器的本地ip地址后,你就可以通过http而不是https来访问位于“Default Web Site”上的app了。原因在于,该网站没有分配到安全证书。
用下面的PowerShell脚本创建一个新证书,并把它添加到容器上的证书库的可信根证书中,然后把它绑定到443端口。注意,New-SelfSignedCertificate命令创建了一个基于测试目的的自签发证书。它是makecert工具的继承者。你可以在这里找到关于该工具的更多信息。
import-module webadministration
#Get-Module -ListAvailable
cd cert:
$cert = New-SelfSignedCertificate -DnsName myweb -Friendlyname MyCert -CertStoreLocation Cert:\LocalMachine\My
$rootStore = New-Object System.Security.Cryptography.X509Certificates.X509Store -ArgumentList Root, LocalMachine
$rootStore.Open(“MaxAllowed”)
$rootStore.Add($cert)
$rootStore.Close()
cd iis:
new-item -path IIS:\SslBindings\0.0.0.0!443 -value $cert
New-WebBinding -Name “Default Web Site” -IP “*” -Port 443 -Protocol https
iisreset
刷新https网页。现在应该可以访问它了。注意,尽管创建的证书已经被添加到可信根证书中,但还是可能会收到一个安全证书警告。原因在于,它是一个自签发证书,不像商用的证书那样,由一个可信机构联合签发。
首先,用docker>
docker build -t xuedocker/iishttps .\
docker images
docker run -it –entrypoint cmd -p 80:80 -p 443:443 -h myweb -v c:\demo\appfiles:c:\temp xuedocker/iishttps
然后,从被映射的temp文件夹复制一个样本htm文件到容器上的“c:\iputnet\wwwroot”。就可以通过http或https访问样本app了。
注意安全证书警告。这是因为该证书不在你的容器的可信根证书中。因为容器并不为你提供常规的Windows用户界面,无法像下面这样通过证书管理器检查证书是否在根证书文件夹中。
但可以运行PowerShell命令来验证它是否存在。
import-module webadministration
cd cert:
cd localmachine
cd my
dir
cd..
cd root
dir
使用PowerShell命令核对证书指纹,将自签发证书添加到可信根证书中。
$cert = cert:\localmachine\my\gci EB61F71C77E561B2148F9F207A3468BAF794DF07
$rootStore = New-Object System.Security.Cryptography.X509Certificates.X509Store -ArgumentList Root, LocalMachine
$rootStore.Open(“MaxAllowed”)
$rootStore.Add($cert)
$rootStore.Close()
现在,该证书已被添加到可信根证书中。注意该证书已被绑定到443端口,执行下面的命令会返回错误提示。
cd iis:
new-item -path IIS:\SslBindings\0.0.0.0!443 -value $cert
New-WebBinding -Name “Default Web Site” -IP “*” -Port 443 -Protocol https
iisreset
如果你用的是商用证书,就可以用import-certificate和import-pfxcertificate方法将证书导入容器中。在测试完这个选项后,会提供更多细节。
最后,Windows>
一个是SSL Load balancer。添加这一选项后,一个SSL load balancer就会代表web服务器或容器对请求进行解密并对响应进行加密。
第二个是Docker v1.13中的安全存储。这一功能的工作流程是类似下面这样的。
(1)可以找到能够进入的证书的容器
(2)可以将其导入到Windows证书库的容器。
猜你喜欢