如何在Windows上为Docker EE构建Docker-in-Docker映像?

时间:2020-01-30 20:03:37

标签: docker jenkins kubernetes windows-server-2019 docker-ee

我正计划在Kubernetes容器中运行的动态Jenkins代理中构建Docker EE映像,因此需要其中一个

  • 同时提供Jenkins Agent功能和Docker的Docker映像。目前,我使用jenkins/jnlp-agent:latest-windows作为映像在Windows LTSC节点池上运行,该节点池似乎提供了足够的Jenkins代理功能或
  • 一种扩展jenkins/jnlp-agent:latest-windows的方式,使其也可以运行Docker。我的天真方法

    FROM jenkins/jnlp-agent:latest-windows
    SHELL ["powershell", "-Command", "$ErrorActionPreference = 'SilentlyContinue'; $ProgressPreference = 'SilentlyContinue';"]
    
    USER ContainerAdministrator
    
    COPY install-docker.ps1 .
    RUN ./install-docker.ps1
    RUN Remove-Item install-docker.ps1
    

    其中install-docker.ps1包含

    Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -ErrorAction Continue
    Install-Module -Name DockerMsftProvider -Repository PSGallery -Force -ErrorAction Continue
    Install-Package -Force -ErrorAction Continue -Name docker -ProviderName DockerMsftProvider
    

    由于{p>,跟随https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-Server失败

    > Start-Service Docker
    Start-Service : Failed to start service 'Docker Engine (Docker)'.
    At line:1 char:1
    + Start-Service Docker
    + ~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service],
       ServiceCommandException
        + FullyQualifiedErrorId : StartServiceFailed,Microsoft.PowerShell.Commands.StartServiceCommand
    

  • 用于Windows上Docker EE的Docker-in-Docker容器,它公开了Docker TCP套接字并允许Jenkins代理容器与其连接。

设置应在Google Kubernetes Engine提供的Windows Server 2019节点池上运行。我知道Windows池当前是beta。

如果有人对如何使第二种方法起作用有想法,为了提高安全性,仍然有必要以用户詹金斯而不是容器管理员的身份运行安装程序。

1 个答案:

答案 0 :(得分:0)

尝试在Dockerfile中创建服务。

RUN powershell New-Service -Name “RSDataQualityWorkerPool” -BinaryPathName “C:\WWW\WinServices\RSDataQualityWorkerPool\RSDataQualityWorkerPool.exe”

在运行的容器中启动它。

Start-Service -Name “RSDataQualityWorkerPool”

在这里看看:windows-jnlp-jenkinsdocker-service-on-windows