Uchishandisa docker yakawanda-nhanho kuvaka windows mifananidzo

Mhoroi mose! Zita rangu ndiAndrey, uye ndinoshanda sainjiniya weDevOps kuExness muchikwata chebudiriro. Chiitiko changu chikuru chine chekuita nekuvaka, kuendesa uye kutsigira zvikumbiro mu docker pasi peLinux inoshanda sisitimu (inozonzi OS). Nguva pfupi yapfuura ndaiva nebasa nemabasa akafanana, asi chinangwa cheOS chepurojekiti chaiva Windows Server uye seti yeC ++ mapurojekiti. Kwandiri, iyi yaive yekutanga kudyidzana nemidziyo yedocker pasi peWindows OS uye, kazhinji, neC ++ application. Nekuda kweizvi, ndakave nechiitiko chinonakidza uye ndakadzidza nezve mamwe maomesheni ekuisa midziyo muWindows.

Uchishandisa docker yakawanda-nhanho kuvaka windows mifananidzo

Muchinyorwa chino ndinoda kukuudza kuti ndeapi matambudziko andaifanira kutarisana nawo uye kuti ndakakwanisa sei kuagadzirisa. Ndinovimba izvi zvinobatsira kumatambudziko ako azvino uye emangwana. Nakidzwa nekuverenga!

Sei midziyo?

Iyo kambani ine zvivakwa zviripo zveHashicorp Nomad mudziyo orchestrator uye zvine hukama zvinhu - Consul uye Vault. Naizvozvo, application containerization yakasarudzwa senzira yakabatana yekuunza mhinduro yakakwana. Sezvo purojekiti yepurojekiti iine docker host ine Windows Server Core OS versions 1803 uye 1809, zvakakosha kuvaka shanduro dzakasiyana dzemifananidzo ye docker ye1803 uye 1809. inofanirwa kuenderana nenhamba yekudzokorora yeiyo base docker mufananidzo uye mugadziri panozovhurwa mudziyo kubva pamufananidzo uyu. Version 1803 haina drawback yakadaro. Unogona kuverenga zvakawanda pano.

Sei multi-stage?

Mainjiniya echikwata chebudiriro haana kana akanyanya kushomeka mukana wekuvaka mauto; hapana nzira yekukurumidza kugadzirisa seti yezvikamu zvekuvaka application pane aya anotambira, semuenzaniso, isa imwe yekuwedzera turusi kana basa reVisual Studio. Naizvozvo, isu takaita danho rekuisa zvese zvinodikanwa kuvaka iyo application mukuvaka Docker mufananidzo. Kana zvichidikanwa, unogona kukurumidza kuchinja chete dockerfile uye wotanga pombi yekugadzira iyi mufananidzo.

Kubva padzidziso kuenda pakuita

Mune yakanakira Docker yakawanda-nhanho mufananidzo kuvaka, nharaunda yekuvaka iyo application inogadzirirwa mune imwecheteyo Dockerfile script sezvo application pachayo inovakwa. Asi kwatiri isu, chinongedzo chepakati chakawedzerwa, chinoti, nhanho yekutanga kugadzira docker mufananidzo une zvese zvinodiwa kuvaka application. Izvi zvakaitwa nekuti ndaida kushandisa docker cache ficha kudzikisa nguva yekuisa yezvose zvinotsamira.

Ngatitarisei mapoinzi makuru eiyo dockerfile script yekugadzira iyi mufananidzo.

Kuti ugadzire mifananidzo yemhando dzakasiyana dzeOS, unogona kutsanangura kupokana mune dockerfile iyo iyo nhamba yevhezheni inopfuudzwa panguva yekuvaka, uye iri zvakare tag yeiyo base image.

Rondedzero yakazara yeMicrosoft Windows Server image tags inogona kuwanikwa pano.

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

By default mirairo mumirayiridzo RUN mukati me dockerfile paWindows OS ivo vanourayiwa mu cmd.exe console. Kuti zvive nyore kunyora zvinyorwa uye kuwedzera mashandiro emirairo inoshandiswa, isu tichatsanangura patsva murairo wekuita console muPowershell kuburikidza nekuraira. SHELL.

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

Nhanho inotevera ndeyekuisa chocolatey package maneja uye mapakeji anodiwa:

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'

Kuisa mapakeji uchishandisa chokoreti, unogona kungoapfuudza sechinyorwa, kana kuaisa imwe panguva kana iwe uchida kupfuura akasiyana maparamendi epasuru yega yega. Mune mamiriro edu ezvinhu, takashandisa faira rekuratidzira mune XML fomati, ine runyorwa rwemapakeji anodiwa uye maparamita awo. Zviri mukati maro zvinotaridzika seizvi:

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

Tevere, isu tinoisa iyo application yekuvaka nharaunda, iyo, MS Vakai Zvishandiso 2019 - iyi iine huremu vhezheni yeVisual Studio 2019, iyo ine hushoma hunodiwa seti yezvikamu zvekunyora kodhi.
Kuti tishande zvizere nechirongwa chedu cheC ++, tichada zvimwe zvikamu, zvinoti:

  • Basa rekushandisa C ++ zvishandiso
  • Toolset v141
  • Windows 10 SDK (10.0.17134.0)

Unogona kuisa seti yakawedzerwa yezvishandiso otomatiki uchishandisa faira yekumisikidza muJSON fomati. Configuration file content:

Rondedzero yakazara yezvikamu zviripo zvinogona kuwanikwa pane zvinyorwa saiti 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"
  ]
}

Iyo dockerfile inomhanyisa yekumisikidza script, uye kuitira nyore, inowedzera nzira kune ekuvaka maturusi anogona kuitiswa mafaera kune nharaunda inoshanduka. PATH. Izvo zvakare zvinokurudzirwa kubvisa zvisina kufanira mafaera uye madhairekitori kuti uderedze saizi yemufananidzo.

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)

Panguva ino, mufananidzo wedu wekunyora iyo C ++ application wakagadzirira, uye isu tinogona kuenderera zvakananga kugadzira docker yakawanda-nhanho yekuvaka yechishandiso.

Multi-stage mukuita

Tichashandisa mufananidzo wakagadzirwa nemidziyo yese iri pabhodhi semufananidzo wekuvaka. Sezviri mune yakapfuura dockerfile script, isu tichawedzera kugona kudoma zvine simba nhamba yevhezheni / tag yemufananidzo kuitira nyore kushandisa kodhi zvakare. Zvakakosha kuwedzera chikwangwani as builder kumufananidzo wegungano mumirayiridzo FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

Iye zvino yave nguva yekugadzira application. Zvese zviri pano zviri nyore: kopira iyo kodhi kodhi uye zvese zvine chekuita nazvo, uye tanga maitiro ekuunganidza.

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

Nhanho yekupedzisira yekugadzira mufananidzo wekupedzisira ndeyekutsanangura iyo base mufananidzo wechishandiso, apo zvese zvekuunganidza zvigadzirwa uye mafaera ekugadzirisa achawanikwa. Kuti ukope mafaira akaunganidzwa kubva pamufananidzo wepakati wegungano, unofanirwa kutsanangura parameter --from=builder mumirayiridzo COPY.

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

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

Iye zvino chasara kuwedzera zvinovimbika zvinodikanwa kuti application yedu ishande uye tsanangura murairo wekutanga kuburikidza nemirairo ENTRYPOINT kana CMD.

mhedziso

Muchinyorwa chino, ndakataura nezve maitiro ekugadzira yakazara-yakazara kuunganidzwa nharaunda yeC ++ zvikumbiro mukati memudziyo uri pasi peWindows uye mashandisiro ekushandisa hunyanzvi hwedocker multi-stage kuvaka kugadzira mifananidzo yakazara-yakazara yechishandiso chedu.

Source: www.habr.com

Voeg