Ho sebelisa li-docker tse ngata ho aha litšoantšo tsa windows

Lumelang bohle! Lebitso la ka ke Andrey, 'me ke sebetsa ke le moenjiniere oa DevOps ho Exness sehlopheng sa nts'etsopele. Mosebetsi oa ka oa mantlha o amana le ho aha, ho tsamaisa le ho ts'ehetsa lits'ebetso ho docker tlasa sistimi ea ts'ebetso ea Linux (eo hamorao e tla bitsoa OS). Hase khale ha ke ne ke e-na le mosebetsi o nang le mesebetsi e tšoanang, empa sepheo sa OS sa morero e ne e le Windows Server le sehlopha sa merero ea C ++. Ho 'na, ena e ne e le tšebelisano ea pele e haufi le lijana tsa docker tlas'a Windows OS,' me, ka kakaretso, ka likopo tsa C ++. Ka lebaka la sena, ke bile le boiphihlelo bo monate mme ka ithuta ka tse ling tsa mathata a ho kenya lisebelisoa ho Windows.

Ho sebelisa li-docker tse ngata ho aha litšoantšo tsa windows

Sehloohong sena ke batla ho u bolella mathata ao ke ileng ka tlameha ho tobana le ’ona le hore na ke khonne ho a rarolla joang. Ke tšepa hore sena se na le thuso bakeng sa mathata a hau a hona joale le a nakong e tlang. Natefeloa ke ho bala!

Hobaneng linkho?

Khamphani e na le meaho e teng bakeng sa 'mino oa lijana oa Hashicorp Nomad le likarolo tse amanang le ona - Consul le Vault. Ka hona, sesebelisoa sa kopo se khethiloe e le mokhoa o kopaneng oa ho fana ka tharollo e felletseng. Kaha meralo ea ts'ebetso ea morero e na le mabotho a li-docker a nang le Windows Server Core OS version 1803 le 1809, hoa hlokahala ho haha ​​​​liphetolelo tse arohaneng tsa litšoantšo tsa docker bakeng sa 1803 le 1809. e tlameha ho ts'oana le nomoro ea ntlafatso ea setšoantšo sa docker le moamoheli moo sets'oants'o se tsoang setšoantšong sena se tla hlahisoa. Mofuta oa 1803 ha o na tšitiso e joalo. O ka bala ho feta mona.

Hobaneng ho na le mekhahlelo e mengata?

Baenjiniere ba lihlopha tsa nts'etsopele ha ba na monyetla oa ho haha ​​​​baamoheli; ha ho na mokhoa oa ho laola ka potlako sete ea likarolo bakeng sa ho aha kopo ho mabotho ana, mohlala, kenya sesebelisoa se eketsehileng kapa mojaro oa mosebetsi bakeng sa Visual Studio. Ka hona, re nkile qeto ea ho kenya lisebelisoa tsohle tse hlokahalang ho aha kopo ho setšoantšo sa Docker. Haeba ho hlokahala, o ka fetola feela dockerfile ka potlako mme o qala phala ea ho theha setšoantšo sena.

Ho tloha khopolong ho ea ho ketso

Mohaho o motle oa litšoantšo oa mekhahlelo e mengata oa Docker, tikoloho ea ho aha ts'ebeliso e lokisoa ka mongolo o tšoanang oa Dockerfile joalo ka ha ts'ebeliso ka boeona e hahiloe. Empa molemong oa rona, sehokelo sa mahareng se ile sa eketsoa, ​​​​e leng, mohato oa pele oa ho theha setšoantšo sa docker ka ntho e 'ngoe le e' ngoe e hlokahalang ho aha kopo. Sena se entsoe hobane ke ne ke batla ho sebelisa karolo ea cache ea docker ho fokotsa nako ea ho kenya lintho tsohle tse itšetlehileng ka tsona.

Ha re shebeng lintlha tsa mantlha tsa lengolo la dockerfile bakeng sa ho theha setšoantšo sena.

Ho theha litšoantšo tsa mefuta e fapaneng ea OS, o ka hlalosa khang ho dockerfile eo nomoro ea phetolelo e fetisitsoeng nakong ea kaho, hape ke tag ea setšoantšo sa motheo.

Lethathamo le felletseng la li-tag tsa setšoantšo sa Microsoft Windows Server le ka fumanoa mona.

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

Ka ho sa feleng, litaelo tse ho litaelo RUN ka har'a dockerfile ho Windows OS li etsoa ka har'a khomphutha ea cmd.exe. Bakeng sa boiketlo ba ho ngola mangolo le ho holisa ts'ebetso ea litaelo tse sebelisitsoeng, re tla hlalosa khomphutha ea ho phethahatsa taelo ho Powershell ka taelo. SHELL.

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

Mohato o latelang ke ho kenya mookameli oa sephutheloana sa chokolete le liphutheloana tse hlokahalang:

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'

Ho kenya liphutheloana u sebelisa chokolete, u ka li fetisa feela e le lenane, kapa ua li kenya e le 'ngoe ka nako haeba u hloka ho fetisa liparamente tse ikhethang bakeng sa sephutheloana ka seng. Boemong ba rona, re sebelisitse faele e bonts'ang ka sebopeho sa XML, e nang le lethathamo la liphutheloana tse hlokahalang le liparamente tsa tsona. Litaba tsa eona li shebahala tjena:

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

Ka mor'a moo, re kenya tikoloho ea kaho ea lits'ebetso, e leng, MS Build Tools 2019 - ena ke mofuta o bobebe oa Visual Studio 2019, o nang le likarolo tse fokolang tse hlokahalang bakeng sa ho bokella khoutu.
Ho sebetsa ka botlalo le projeke ea rona ea C ++, re tla hloka likarolo tse ling, e leng:

  • Lisebelisoa tsa mosebetsi oa C ++
  • Sesebelisoa sa lisebelisoa v141
  • Windows 10 SDK (10.0.17134.0)

U ka kenya lisebelisoa tse atolositsoeng ka bo eona u sebelisa faele ea tlhophiso ka sebopeho sa JSON. Lifaele tsa tlhophiso:

Lethathamo le felletseng la likarolo tse fumanehang le ka fumanoa setšeng sa litokomane 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 e tsamaisa script ea ho kenya, 'me bakeng sa boiketlo, e eketsa tsela ea lisebelisoa tsa ho haha ​​​​lifaele tse ka sebelisoang ho fetola tikoloho. PATH. Ho boetse ho eletsoa ho tlosa lifaele le li-directory tse sa hlokahaleng ho fokotsa boholo ba setšoantšo.

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)

Mothating ona, setšoantšo sa rona sa ho bokella ts'ebeliso ea C ++ se se se lokile, 'me re ka tsoela pele ka kotloloho ho theha moaho oa methati e mengata ea ts'ebeliso.

Methati e mengata ka ketso

Re tla sebelisa setšoantšo se entsoeng ka lisebelisoa tsohle tse ka sekepeng e le setšoantšo sa mohaho. Joalo ka sengolong se fetileng sa dockerfile, re tla eketsa bokhoni ba ho hlakisa nomoro ea mofuta / tag ea setšoantšo bakeng sa ho sebelisa khoutu habonolo. Ho bohlokoa ho kenya label as builder ho setšoantšo sa kopano ka litaelo FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

Joale ke nako ea ho aha kopo. Ntho e 'ngoe le e' ngoe mona e bonolo haholo: kopitsa khoutu ea mohloli le ntho e 'ngoe le e' ngoe e amanang le eona, 'me u qale mokhoa oa ho bokella.

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

Mohato oa ho qetela oa ho theha setšoantšo sa ho qetela ke ho hlalosa setšoantšo sa motheo sa kopo, moo lisebelisoa tsohle tsa ho bokella le lifaele tsa tlhophiso li tla be li le teng. Ho kopitsa lifaele tse bokelletsoeng ho tsoa setšoantšong sa kopano e mahareng, o tlameha ho hlakisa paramente --from=builder ditaelong COPY.

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

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

Hona joale se setseng ke ho eketsa litšepiso tse hlokahalang hore kopo ea rona e sebetse le ho bolela taelo ea ho qala ka litaelo ENTRYPOINT kapa CMD.

fihlela qeto e

Sehloohong sena, ke buile ka mokhoa oa ho theha tikoloho e hlophisitsoeng e felletseng bakeng sa lits'ebetso tsa C ++ ka har'a sets'oants'o se tlas'a Windows le mokhoa oa ho sebelisa bokhoni ba li-docker tse nang le mekhahlelo e mengata ho etsa litšoantšo tse felletseng tsa kopo ea rona.

Source: www.habr.com

Eketsa ka tlhaloso