Iji docker multi-stage iji wuo onyonyo mpio

Ndewo, unu niile! Aha m bụ Andrey, ana m arụkwa ọrụ dị ka onye injinia DevOps na Exness na otu mmepe. Isi ọrụ m metụtara iwulite, ibugharị na ịkwado ngwa na docker n'okpuru sistemụ arụmọrụ Linux (nke a na-akpọ OS OS). N'oge na-adịbeghị anya, enwere m ọrụ nwere otu ọrụ ahụ, mana ebumnuche OS nke ọrụ ahụ bụ Windows Server na otu ọrụ C ++. Maka m, nke a bụ mkparịta ụka izizi ya na arịa docker n'okpuru Windows OS yana, n'ozuzu, yana ngwa C++. N'ihi nke a, enwere m ahụmihe na-atọ ụtọ wee mụta maka ụfọdụ mgbagwoju anya nke ngwa arịa dị na Windows.

Iji docker multi-stage iji wuo onyonyo mpio

N’isiokwu a, achọrọ m ịgwa gị ihe isi ike ndị m chere ihu na otú m si mee ka ha kwụsị. Enwere m olileanya na nke a ga-enyere gị aka maka ihe ịma aka gị ugbu a na n'ọdịnihu. Nwee obi ụtọ ịgụ akwụkwọ!

Gịnị kpatara arịa?

Ụlọ ọrụ ahụ nwere akụrụngwa dị adị maka onye na-ahụ maka akpa akpa Hashicorp Nomad na ihe ndị yiri ya - Consul na Vault. Ya mere, a na-ahọrọ njide ngwa ngwa dịka usoro ejikọtara ọnụ maka ịnye ngwọta zuru oke. Ebe ọ bụ na akụrụngwa ọrụ ahụ nwere ndị ọbịa docker na ụdị Windows Server Core OS 1803 na 1809, ọ dị mkpa iji wuo ụdị dị iche iche nke onyonyo docker maka 1803 na 1809. Na ụdị 1803, ọ dị mkpa icheta na ọnụọgụ ngbanwe nke onye na-ewu docker host. ga-adabarịrị nọmba ngbanwe nke onyonyo docker base yana onye ọbịa ebe a ga-ewepụta akpa sitere na onyonyo a. Ụdị 1809 enweghị ihe ndọghachi azụ dị otú ahụ. Ị nwere ike ịgụkwu ebe a.

Gịnị mere multi-stage?

Ndị injinia otu mmepe enweghị ohere ma ọ bụ oke oke iji wuo ndị ọbịa; ọ nweghị ụzọ isi jikwaa ngwa ngwa maka iwulite ngwa na ndị ọbịa a, dịka ọmụmaatụ, wụnye ngwa mgbakwunye ma ọ bụ ibu ọrụ maka Studio Visual. Ya mere, anyị mere mkpebi ịwụnye ihe niile dị mkpa iji wuo ngwa ahụ n'ime ihe oyiyi Docker. Ọ bụrụ na ọ dị mkpa, ị nwere ike gbanwee naanị dockerfile ngwa ngwa wee malite pipeline maka ịmepụta ihe oyiyi a.

Site na tiori ruo n'omume

N'ime ezigbo ihe onyonyo Docker dị mma, a na-akwado gburugburu maka iwulite ngwa ahụ n'otu edemede Dockerfile ka emebere ngwa ahụ n'onwe ya. Mana n'ọnọdụ anyị, agbakwunyere njikọ etiti, ya bụ, nzọụkwụ nke mbido imepụta onyonyo docker na ihe niile dị mkpa iji wuo ngwa ahụ. Emere nke a n'ihi na achọrọ m iji njirimara cache docker iji belata oge ntinye nke ndabere niile.

Ka anyị leba anya na isi ihe dị na ederede dockerfile maka imepụta onyonyo a.

Iji mepụta ihe oyiyi nke ụdị OS dị iche iche, ị nwere ike ịkọwa arụmụka na dockerfile nke a na-agafe nọmba mbipute n'oge a na-ewu ụlọ, ọ bụkwa akara ngosi nke isi ihe oyiyi.

Enwere ike ịchọta ndepụta zuru oke nke mkpado onyonyo Microsoft Windows Server ebe a.

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

Site na ndabara iwu ndị dị na ntuziaka RUN N'ime dockerfile na Windows OS, a na-egbu ha na njikwa cmd.exe. Maka ịdị mma nke ide edemede na ịgbasa ọrụ nke iwu ejiri, anyị ga-akọwapụta njikwa njikwa iwu na Powershell site na ntuziaka. SHELL.

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

Nzọụkwụ ọzọ bụ ịwụnye njikwa ngwugwu chocolatey na ngwugwu ndị dị mkpa:

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'

Iji wụnye ngwugwu site na iji chocolatey, ị nwere ike ịnyefe ha dị ka ndepụta, ma ọ bụ wụnye ha otu n'otu oge ma ọ bụrụ na ịchọrọ ịgafe paramita pụrụ iche maka ngwugwu ọ bụla. N'ọnọdụ anyị, anyị na-eji faịlụ ngosi na usoro XML, nke nwere ndepụta nchịkọta achọrọ na paramita ha. Ihe dị n'ime ya dị ka nke a:

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

Na-esote, anyị wụnye gburugburu ebe obibi ngwa, ya bụ, MS Build Tools 2019 - nke a bụ ụdị dị fechaa nke Visual Studio 2019, nke nwere obere ihe achọrọ maka ịgbakọ koodu.
Iji rụọ ọrụ nke ọma na ọrụ C++ anyị, anyị ga-achọ ihe ndị ọzọ, ya bụ:

  • Ngwá ọrụ C++ na-arụ ọrụ
  • Ngwa ngwa v141
  • Windows 10 SDK (10.0.17134.0)

Ị nwere ike iwunye ngwa ọrụ agbatịkwuru na-akpaghị aka site na iji faịlụ nhazi n'ụdị JSON. Ọdịnaya faịlụ nhazi:

Enwere ike ịchọta ndepụta zuru oke nke ihe ndị dị na saịtị akwụkwọ 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 na-arụ edemede nrụnye, yana maka ịdị mma, na-agbakwunye ụzọ maka faịlụ arụ ọrụ arụ ọrụ na mgbanwe gburugburu. PATH. Ọ dịkwa mma iwepụ faịlụ na akwụkwọ ndekọ aha na-adịghị mkpa iji belata nha nke ihe oyiyi ahụ.

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)

N'oge a, onyonyo anyị maka ịchịkọta ngwa C ++ adịla njikere, anyị nwere ike ịga n'ihu na imepụta ngwa docker multi-stage.

Multi-stage na-arụ ọrụ

Anyị ga-eji ihe oyiyi emepụtara na ngwaọrụ niile dị n'ụgbọ ahụ dị ka ihe eji arụ ọrụ. Dị ka ọ dị na ederede dockerfile gara aga, anyị ga-agbakwunye ike iji kọwapụta nọmba/mkpado ụdịdị maka ịdị mfe nke iji koodu. Ọ dị mkpa ịgbakwunye akara as builder na oyiyi mgbakọ na ntụziaka FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

Ugbu a ọ bụ oge iji wuo ngwa. Ihe niile ebe a dị nnọọ mfe: detuo koodu isi na ihe niile metụtara ya, wee malite usoro nchịkọta.

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

Oge ikpeazụ nke ịmepụta onyonyo ikpeazụ bụ ịkọwapụta ihe oyiyi ntọala nke ngwa ahụ, ebe a ga-enweta ihe niile nchịkọta na faịlụ nhazi. Iji detuo faịlụ achịkọtara site na onyonyo ọgbakọ etiti, ị ga-ezipụta oke --from=builder na ntuziaka COPY.

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

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

Ugbu a naanị ihe fọdụrụ bụ ịgbakwunye ihe ndabere dị mkpa maka ngwa anyị ka ọ rụọ ọrụ wee kọwaa iwu mmalite site na ntuziaka ENTRYPOINT ma ọ bụ CMD.

nkwubi

N'isiokwu a, m na-ekwu maka otu esi emepụta ebe nchịkọta zuru oke maka ngwa C ++ n'ime akpa n'okpuru Windows na otu esi eji ike nke docker multi-stage na-ewuli iji mepụta ihe oyiyi zuru oke nke ngwa anyị.

isi: www.habr.com

Tinye a comment