Mampiasa docker multi-stage hananganana sary windows

Salama daholo! Andrey no anarako, ary miasa ho injeniera DevOps ao amin'ny Exness ao amin'ny ekipa fampandrosoana aho. Ny asa lehibe ataoko dia mifandraika amin'ny fananganana, fametrahana ary fanohanana ireo rindranasa ao amin'ny docker eo ambanin'ny rafitra fandidiana Linux (antsoina hoe OS avy eo). Vao tsy ela akory izay dia nanana asa tamin'ny hetsika mitovy aho, fa ny OS kendrena amin'ny tetikasa dia Windows Server sy andiana tetikasa C++. Ho ahy, ity no fifandraisana akaiky voalohany amin'ny kaontenera docker eo ambanin'ny Windows OS ary, amin'ny ankapobeny, miaraka amin'ny fampiharana C++. Noho izany, nanana traikefa mahaliana aho ary nianatra momba ny sasany amin'ireo saro-pady amin'ny fametrahana fampiharana ao amin'ny Windows.

Mampiasa docker multi-stage hananganana sary windows

Amin'ity lahatsoratra ity dia te-hilaza aminao aho hoe inona ireo fahasahiranana tsy maintsy natrehako sy ny fomba nahavitako namaha azy ireo. Manantena aho fa hanampy amin'ny fanamby ataonao amin'izao fotoana izao sy ho avy. Ankafizo ny mamaky!

Nahoana no container?

Ny orinasa dia manana fotodrafitrasa efa misy ho an'ny mpandrindra kaontenera Hashicorp Nomad sy ireo singa mifandraika amin'izany - Consul sy Vault. Noho izany, ny containerization fampiharana dia nofidina ho fomba iray iraisana amin'ny famoahana vahaolana feno. Koa satria ny fotodrafitrasa tetikasa dia misy mpampiantrano docker miaraka amin'ny Windows Server Core OS version 1803 sy 1809, dia ilaina ny manangana dikan-tsary misaraka amin'ny docker ho an'ny 1803 sy 1809. Ao amin'ny version 1803, zava-dehibe ny mitadidy fa ny laharan'ny fanavaozana ny mpampiantrano docker build. dia tsy maintsy mifanandrify amin'ny laharan'ny fanavaozana ny sary docker fototra sy ny mpampiantrano izay hanombohan'ny fitoeran'ity sary ity. Ny version 1809 dia tsy manana lesoka toy izany. Afaka mamaky bebe kokoa ianao eto.

Nahoana no misy dingana maromaro?

Ny injenieran'ny ekipan'ny fampandrosoana dia tsy manana na voafetra ihany ny fidirana amin'ny fananganana mpampiantrano; tsy misy fomba hitantana haingana ny andiana singa hanamboarana fampiharana amin'ireo mpampiantrano ireo, ohatra, mametraka fitaovana fanampiny na enta-miasa ho an'ny Visual Studio. Noho izany, nanapa-kevitra izahay ny hametraka ny singa rehetra ilaina amin'ny fananganana ny rindranasa ao amin'ny sary Docker build. Raha ilaina dia azonao atao ny manova haingana ny dockerfile ary manomboka ny fantsona hamoronana ity sary ity.

Avy amin'ny teoria mankany amin'ny asa

Amin'ny fananganana sary marobe Docker mety tsara, ny tontolo iainana hanamboarana ny rindranasa dia voaomana amin'ny script Dockerfile mitovy amin'ny fananganana ny rindranasa. Fa amin'ny tranga misy antsika dia nampiana rohy manelanelana, izany hoe, ny dingana voalohany amin'ny famoronana sary docker miaraka amin'ny zavatra rehetra ilaina amin'ny fananganana ny fampiharana. Natao izany satria te hampiasa ny endri-javatra cache docker aho mba hampihenana ny fotoana fametrahana ny fiankinan-doha rehetra.

Andeha hojerentsika ny hevi-dehibe amin'ny script dockerfile hamoronana ity sary ity.

Mba hamoronana sarin'ny dikan-teny OS samihafa dia azonao atao ny mamaritra ny tohan-kevitra ao amin'ny dockerfile izay nandalovan'ny laharan'ny dikan-teny nandritra ny fananganana, ary io ihany koa ny marika amin'ny sary fototra.

Misy lisitra feno amin'ny marika sary Microsoft Windows Server azo jerena eto.

ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION

Amin'ny alàlan'ny default ny baiko ao amin'ny torolàlana RUN Ao anatin'ny dockerfile amin'ny Windows OS izy ireo dia novonoina tao amin'ny console cmd.exe. Ho fanamorana ny fanoratana scripts sy ny fanitarana ny fiasan'ny baiko ampiasaina, dia hamaritra indray ny console execution command ao amin'ny Powershell amin'ny alàlan'ny torolàlana. SHELL.

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop';"]

Ny dingana manaraka dia ny fametrahana ny mpitantana ny fonosana sôkôla sy ny fonosana ilaina:

COPY chocolatey.pkg.config .
RUN Set-ExecutionPolicy Bypass -Scope Process -Force ;
    [System.Net.ServicePointManager]::SecurityProtocol = 
    [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 ;
    $env:chocolateyUseWindowsCompression = 'true' ;
    iex ((New-Object System.Net.WebClient).DownloadString( 
      'https://chocolatey.org/install.ps1')) ;
    choco install chocolatey.pkg.config -y --ignore-detected-reboot ;
    if ( @(0, 1605, 1614, 1641, 3010) -contains $LASTEXITCODE ) { 
      refreshenv; } else { exit $LASTEXITCODE; } ;
    Remove-Item 'chocolatey.pkg.config'

Raha hametraka fonosana mampiasa sôkôla ianao dia azonao atao ny mandefa azy ireo ho lisitra fotsiny, na mametraka azy tsirairay isaky ny mila mandalo masontsivana tokana ho an'ny fonosana tsirairay. Amin'ny toe-javatra misy anay, nampiasa rakitra miharihary amin'ny endrika XML izahay, izay misy lisitry ny fonosana ilaina sy ny mason'izy ireo. Toy izao ny ao anatiny:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="python" version="3.8.2"/>
  <package id="nuget.commandline" version="5.5.1"/>
  <package id="git" version="2.26.2"/>
</packages>

Manaraka, apetrakay ny tontolon'ny fananganana fampiharana, izany hoe, MS Build Tools 2019 - ity dia dikan-teny maivana amin'ny Visual Studio 2019, izay misy ny singa kely indrindra ilaina amin'ny fanangonana kaody.
Mba hiasa tanteraka amin'ny tetikasa C++ dia mila singa fanampiny isika, izany hoe:

  • Workload C++ fitaovana
  • Fitaovana v141
  • Windows 10 SDK (10.0.17134.0)

Azonao atao ny mametraka fitaovana miitatra mandeha ho azy amin'ny alàlan'ny rakitra fanamafisana amin'ny endrika JSON. Ny votoatin'ny fisie:

Ny lisitra feno amin'ireo singa azo alaina dia hita ao amin'ny tranokalan'ny antontan-taratasy Microsoft Visual Studio.

{
  "version": "1.0",
  "components": [
    "Microsoft.Component.MSBuild",
    "Microsoft.VisualStudio.Workload.VCTools;includeRecommended",
    "Microsoft.VisualStudio.Component.VC.v141.x86.x64",
    "Microsoft.VisualStudio.Component.Windows10SDK.17134"
  ]
}

Ny dockerfile dia mitantana ny script fametrahana, ary ho an'ny fanamorana, dia manampy ny lalana mankany amin'ny fitaovana fananganana rakitra azo ampiasaina amin'ny fari-piainan'ny tontolo iainana. PATH. Tsara ihany koa ny manala ireo rakitra sy lahatahiry tsy ilaina mba hampihenana ny haben'ny sary.

COPY buildtools.config.json .
RUN Invoke-WebRequest 'https://aka.ms/vs/16/release/vs_BuildTools.exe' 
      -OutFile '.vs_buildtools.exe' -UseBasicParsing ;
    Start-Process -FilePath '.vs_buildtools.exe' -Wait -ArgumentList 
      '--quiet --norestart --nocache --config C:buildtools.config.json' ;
    Remove-Item '.vs_buildtools.exe' ;
    Remove-Item '.buildtools.config.json' ;
    Remove-Item -Force -Recurse 
      'C:Program Files (x86)Microsoft Visual StudioInstaller' ;
    $env:PATH = 'C:Program Files (x86)Microsoft Visual Studio2019BuildToolsMSBuildCurrentBin;' + $env:PATH; 
    [Environment]::SetEnvironmentVariable('PATH', $env:PATH, 
      [EnvironmentVariableTarget]::Machine)

Amin'ity dingana ity dia efa vonona ny sarinay amin'ny fanangonana ny rindranasa C ++, ary afaka mandroso mivantana amin'ny famoronana docker multi-stage fananganana ny rindranasa.

Multi-dingana amin'ny hetsika

Hampiasa ny sary noforonina miaraka amin'ny fitaovana rehetra eny ambony sambo izahay ho sary fananganana. Toy ny tamin'ny script dockerfile teo aloha, dia ampianay ny fahafahana mamaritra amin'ny fomba mavitrika ny laharan-tsary / sary marika ho fanamorana ny fampiasana kaody. Zava-dehibe ny manampy marika as builder amin'ny sarin'ny fivoriambe ao amin'ny torolàlana FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

Fotoana hananganana ny fampiharana izao. Tsotra ny zava-drehetra eto: kopia ny kaody loharano sy izay rehetra mifandray aminy, ary atombohy ny fizotran'ny fanangonana.

COPY myapp .
RUN nuget restore myapp.sln ;
    msbuild myapp.sln /t:myapp /p:Configuration=Release

Ny dingana farany amin'ny famoronana sary farany dia ny mamaritra ny sary fototra amin'ny fampiharana, izay hipetrahan'ny artifacts compilation sy ny rakitra fikirakirana. Raha te handika ny rakitra voaangona avy amin'ny sarin'ny fivoriambe mpanelanelana, dia tsy maintsy mamaritra ny parameter ianao --from=builder amin'ny toromarika COPY.

FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION

COPY --from=builder C:/x64/Release/myapp/ ./
COPY ./configs ./

Ny hany sisa tavela dia ny manampy ny fiankinan-doha ilaina amin'ny fampiharana ataontsika ary mamaritra ny baiko fandefasana amin'ny alàlan'ny torolàlana ENTRYPOINT na CMD.

famaranana

Ao amin'ity lahatsoratra ity dia niresaka momba ny fomba hamoronana tontolo fanangonana feno ho an'ny rindranasa C ++ ao anaty fitoeran-javatra iray eo ambanin'ny Windows aho ary ny fomba fampiasana ny fahaiza-manaon'ny docker multi-stage fananganana mba hamoronana sary feno amin'ny fampiharana.

Source: www.habr.com

Add a comment