Kugwiritsa ntchito ma docker masitepe angapo kuti mupange zithunzi za windows

Moni nonse! Dzina langa ndine Andrey, ndipo ndimagwira ntchito ngati injiniya wa DevOps ku Exness mu gulu lachitukuko. Ntchito yanga yayikulu ndikumanga, kutumiza ndikuthandizira mapulogalamu mu docker pansi pa Linux opaleshoni system (yomwe imatchedwa OS). Osati kale kwambiri ndinali ndi ntchito yofanana ndi zomwezo, koma cholinga cha OS cha polojekitiyi chinali Windows Server ndi seti ya mapulojekiti a C ++. Kwa ine, uku kunali kuyanjana koyamba kwapafupi ndi zotengera za docker pansi pa Windows OS ndipo, makamaka, ndi mapulogalamu a C ++. Chifukwa cha izi, ndidakhala ndi zokumana nazo zosangalatsa ndipo ndidaphunzira za zovuta zina pakuyika mapulogalamu mu Windows.

Kugwiritsa ntchito ma docker masitepe angapo kuti mupange zithunzi za windows

M’nkhaniyi ndikufuna kukuuzani mavuto amene ndinakumana nawo komanso mmene ndinathana nawo. Ndikukhulupirira kuti izi ndizothandiza pazovuta zanu zamakono komanso zam'tsogolo. Sangalalani kuwerenga!

Chifukwa chiyani makontena?

Kampaniyo ili ndi zida zomwe zilipo za oimba nyimbo za Hashicorp Nomad ndi zina zofananira - Consul ndi Vault. Chifukwa chake, zotengera zogwiritsira ntchito zidasankhidwa ngati njira imodzi yoperekera yankho lathunthu. Popeza kuti zomangamanga za polojekitiyi zili ndi makamu a docker omwe ali ndi Windows Server Core OS versions 1803 ndi 1809, m'pofunika kupanga mitundu yosiyana ya zithunzi za docker za 1803 ndi 1809. iyenera kufanana ndi nambala yosinthidwa ya chithunzi choyambira ndi wolandila pomwe chidebe chochokera pachithunzichi chidzakhazikitsidwa. Version 1803 alibe drawback wotere. Mutha kuwerenga zambiri apa.

Chifukwa chiyani masitepe ambiri?

Mainjiniya amagulu achitukuko alibe kapena mwayi wocheperako womanga makamu; palibe njira yoyendetsera mwachangu magawo azinthu zopangira pulogalamu pa makamu awa, mwachitsanzo, kukhazikitsa zida zowonjezera kapena kuchuluka kwa ntchito kwa Visual Studio. Chifukwa chake, tidapanga chisankho chokhazikitsa zida zonse zofunika kuti tipange pulogalamuyi kukhala chithunzi cha Docker. Ngati ndi kotheka, mutha kusintha mwachangu fayilo ya docker ndikuyambitsa payipi yopangira chithunzichi.

Kuchokera ku chiphunzitso kupita ku zochita

Pamapangidwe abwino a Docker okhala ndi magawo angapo, malo opangira pulogalamuyi amakonzedwa muzolemba zomwezo za Dockerfile momwe pulogalamuyo imapangidwira. Koma kwa ife, ulalo wapakatikati udawonjezedwa, ndiye, sitepe yoyambira kupanga chithunzi cha docker ndi chilichonse chofunikira kupanga pulogalamuyi. Izi zidachitika chifukwa ndimafuna kugwiritsa ntchito chosungira cha docker kuti ndichepetse nthawi yoyika zodalira zonse.

Tiyeni tiwone mfundo zazikulu za dockerfile script popanga chithunzichi.

Kuti mupange zithunzi zamitundu yosiyanasiyana ya OS, mutha kufotokozera mkangano mu dockerfile momwe nambala yamtunduwu imadutsa pakumanga, komanso ndi chizindikiro cha chithunzi choyambira.

Mndandanda wathunthu wama tag azithunzi a Microsoft Windows Server angapezeke apa.

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

Mwa kusakhulupirika malamulo mu malangizo RUN mkati mwa dockerfile pa Windows OS amachitidwa mu cmd.exe console. Kuti zitheke kulemba zolemba ndikukulitsa magwiridwe antchito a malamulo omwe agwiritsidwa ntchito, tidzafotokozeranso cholumikizira chotsatira mu Powershell kudzera mu malangizo. SHELL.

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

Chotsatira ndikukhazikitsa woyang'anira phukusi la chokoleti ndi mapaketi ofunikira:

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'

Kuti muyike mapaketi pogwiritsa ntchito chokoleti, mutha kungowapereka ngati mndandanda, kapena kuwayika imodzi imodzi ngati mukufuna kudutsa magawo apadera a phukusi lililonse. Munthawi yathu, tidagwiritsa ntchito fayilo yowonekera mumtundu wa XML, womwe uli ndi mndandanda wamaphukusi ofunikira ndi magawo ake. Zomwe zili mkati mwake zikuwoneka motere:

<?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>

Kenako, timayika malo opangira mapulogalamu, omwe ndi, MS Build Tools 2019 - iyi ndi mtundu wopepuka wa Visual Studio 2019, womwe uli ndi magawo ochepa omwe amafunikira kuti apange ma code.
Kuti tigwire ntchito mokwanira ndi C ++ yathu, tidzafunika zigawo zina, zomwe ndi:

  • Zida za C ++ zolemetsa
  • Chida v141
  • Windows 10 SDK (10.0.17134.0)

Mutha kukhazikitsa zida zowonjezera zokha pogwiritsa ntchito fayilo yosinthira mumtundu wa JSON. Zosintha zamafayilo:

Mndandanda wathunthu wa zigawo zomwe zilipo zitha kupezeka patsamba lazolemba 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"
  ]
}

Dockerfile imayendetsa script yoyika, ndipo kuti ikhale yosavuta, imawonjezera njira yopangira zida zopangira mafayilo osinthika kumitundu yosiyanasiyana. PATH. Ndikofunikiranso kuchotsa mafayilo osafunikira ndi maupangiri kuti muchepetse kukula kwa chithunzicho.

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)

Pakadali pano, chithunzi chathu chophatikizira pulogalamu ya C ++ chakonzeka, ndipo titha kupitilizabe kupanga masitepe angapo a pulogalamuyi.

Multi-siteji mu kuchitapo

Tidzagwiritsa ntchito chithunzi chopangidwa ndi zida zonse zomwe zili pa bolodi ngati chithunzi chomanga. Monga momwe zilili m'malemba a dockerfile am'mbuyomu, tidzawonjezera kuthekera kofotokozera nambala yamtunduwu/chithunzichi kuti mugwiritsenso ntchito kachidindo mosavuta. Ndikofunika kuwonjezera chizindikiro as builder ku chithunzi cha msonkhano mu malangizo FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

Tsopano ndi nthawi yoti mupange pulogalamuyo. Chilichonse apa ndi chophweka: lembani kachidindo kochokera ndi zonse zomwe zikugwirizana nazo, ndikuyamba ntchito yosonkhanitsa.

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

Gawo lomaliza la kupanga chithunzi chomaliza ndikulongosola chithunzi choyambira cha pulogalamuyo, pomwe zinthu zonse zophatikizika ndi mafayilo osinthira zidzapezeka. Kuti mukopere mafayilo ophatikizidwa kuchokera pachithunzi chapakatikati, muyenera kufotokozera parameter --from=builder mu malangizo COPY.

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

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

Tsopano zomwe zatsala ndikuwonjezera zodalira zofunikira kuti pulogalamu yathu igwire ntchito ndikulongosola lamulo loyambitsa kudzera mu malangizo ENTRYPOINT kapena CMD.

Pomaliza

M'nkhaniyi, ndidalankhula za momwe mungapangire malo ophatikizira amtundu wa C ++ mkati mwa chidebe pansi pa Windows komanso momwe mungagwiritsire ntchito luso la docker multistage builds kuti mupange zithunzi zonse za pulogalamu yathu.

Source: www.habr.com

Kuwonjezera ndemanga