Lilo docker olona-ipele lati kọ awọn aworan windows

Bawo ni gbogbo eniyan! Orukọ mi ni Andrey, ati pe Mo ṣiṣẹ bi ẹlẹrọ DevOps ni Exness ninu ẹgbẹ idagbasoke. Iṣe akọkọ mi ni ibatan si kikọ, imuṣiṣẹ ati atilẹyin awọn ohun elo ni docker labẹ ẹrọ ṣiṣe Linux (lẹhinna tọka si OS). Laipẹ sẹhin Mo ni iṣẹ-ṣiṣe kan pẹlu awọn iṣẹ ṣiṣe kanna, ṣugbọn OS ti o fojusi ti ise agbese na jẹ Windows Server ati ṣeto awọn iṣẹ akanṣe C ++. Fun mi, eyi ni ibaraenisepo isunmọ akọkọ pẹlu awọn apoti docker labẹ Windows OS ati, ni gbogbogbo, pẹlu awọn ohun elo C ++. Ṣeun si eyi, Mo ni iriri ti o nifẹ ati kọ ẹkọ nipa diẹ ninu awọn intricacies ti awọn ohun elo ifipamọ ni Windows.

Lilo docker olona-ipele lati kọ awọn aworan windows

Ninu nkan yii Mo fẹ lati sọ fun ọ kini awọn iṣoro ti Mo ni lati koju ati bii MO ṣe ṣakoso lati yanju wọn. Mo nireti pe eyi jẹ iranlọwọ fun awọn italaya lọwọlọwọ ati ọjọ iwaju. Gbadun kika!

Kini idi ti awọn apoti?

Ile-iṣẹ naa ni awọn amayederun ti o wa tẹlẹ fun akọrin eiyan Hashicorp Nomad ati awọn paati ti o jọmọ - Consul ati Vault. Nitorinaa, apoti ohun elo ni a yan bi ọna iṣọkan fun jiṣẹ ojutu pipe kan. Niwọn igba ti awọn amayederun iṣẹ akanṣe ni awọn ogun docker pẹlu awọn ẹya Windows Server Core OS 1803 ati 1809, o jẹ dandan lati kọ awọn ẹya lọtọ ti awọn aworan docker fun 1803 ati 1809. Ni ẹya 1803, o ṣe pataki lati ranti pe nọmba atunyẹwo ti ile-iṣẹ docker Kọ gbọdọ baamu nọmba atunyẹwo ti aworan docker ipilẹ ati agbalejo nibiti apoti lati aworan yii yoo ṣe ifilọlẹ. Ẹya 1809 ko ni iru abawọn bẹ. O le ka diẹ ẹ sii nibi.

Kí nìdí olona-ipele?

Awọn onimọ-ẹrọ ẹgbẹ idagbasoke ko ni tabi iwọle lopin pupọ lati kọ awọn ọmọ ogun; ko si ọna lati yara ṣakoso ṣeto awọn paati fun kikọ ohun elo kan lori awọn ọmọ-ogun wọnyi, fun apẹẹrẹ, fi sori ẹrọ ohun elo afikun tabi fifuye iṣẹ fun Studio Visual. Nitorinaa, a ṣe ipinnu lati fi sori ẹrọ gbogbo awọn paati pataki lati kọ ohun elo sinu aworan Docker Kọ. Ti o ba jẹ dandan, o le yara yi faili docker nikan ki o ṣe ifilọlẹ opo gigun ti epo fun ṣiṣẹda aworan yii.

Lati yii si igbese

Ninu kikọ aworan ipele pupọ Docker ti o peye, agbegbe fun kikọ ohun elo ti pese sile ni iwe afọwọkọ Dockerfile kanna bi ohun elo funrararẹ ti kọ. Ṣugbọn ninu ọran wa, ọna asopọ agbedemeji ni a ṣafikun, eyun, igbesẹ ti ipilẹṣẹ alakoko ṣiṣẹda aworan docker pẹlu ohun gbogbo pataki lati kọ ohun elo naa. Eyi ni a ṣe nitori Mo fẹ lati lo ẹya kaṣe docker lati dinku akoko fifi sori ẹrọ ti gbogbo awọn igbẹkẹle.

Jẹ ki a wo awọn aaye akọkọ ti iwe afọwọkọ dockerfile fun ṣiṣẹda aworan yii.

Lati ṣẹda awọn aworan ti awọn ẹya OS ti o yatọ, o le ṣalaye ariyanjiyan ni dockerfile nipasẹ eyiti nọmba ẹya ti kọja lakoko kikọ, ati pe o tun jẹ tag ti aworan ipilẹ.

Atokọ pipe ti awọn aami aworan Microsoft Windows Server ni a le rii nibi.

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

Nipa aiyipada awọn aṣẹ ninu awọn ilana RUN inu faili dockerfile lori Windows OS wọn ti ṣiṣẹ ni console cmd.exe. Fun irọrun ti kikọ awọn iwe afọwọkọ ati faagun iṣẹ ṣiṣe ti awọn aṣẹ ti a lo, a yoo ṣe atunto console ipaniyan pipaṣẹ ni Powershell nipasẹ itọsọna naa SHELL.

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

Igbesẹ ti o tẹle ni lati fi sori ẹrọ oluṣakoso package chocolatey ati awọn idii to wulo:

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'

Lati fi awọn idii sori ẹrọ ni lilo chocolatey, o le jiroro ni ṣe wọn bi atokọ kan, tabi fi sii wọn ni ẹyọkan ni akoko kan ti o ba nilo lati kọja awọn aye alailẹgbẹ fun package kọọkan. Ni ipo wa, a lo faili ifihan ni ọna kika XML, eyiti o ni atokọ ti awọn idii ti a beere ati awọn ayewọn wọn. Awọn akoonu inu rẹ dabi eyi:

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

Nigbamii ti, a fi sori ẹrọ agbegbe ile ohun elo, eyun, Awọn irinṣẹ Kọ MS 2019 - eyi jẹ ẹya iwuwo fẹẹrẹ ti Visual Studio 2019, eyiti o ni eto awọn paati ti o kere ju ti o nilo fun koodu akopọ.
Lati ṣiṣẹ ni kikun pẹlu iṣẹ akanṣe C ++ wa, a yoo nilo awọn paati afikun, eyun:

  • Ṣiṣẹ iṣẹ C ++ irinṣẹ
  • Ohun elo irinṣẹ v141
  • Windows 10 SDK (10.0.17134.0)

O le fi eto awọn irinṣẹ ti o gbooro sii laifọwọyi ni lilo faili iṣeto ni ọna kika JSON. Awọn akoonu faili iṣeto ni:

Atokọ pipe ti awọn paati ti o wa ni a le rii lori aaye iwe Idojukọ wiwo Microsoft.

{
  "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 n ṣiṣẹ iwe afọwọkọ fifi sori ẹrọ, ati fun irọrun, ṣafikun ọna si awọn irinṣẹ iṣẹ ṣiṣe awọn faili si oniyipada ayika. PATH. O tun ni imọran lati yọ awọn faili ti ko ni dandan ati awọn ilana lati dinku iwọn aworan naa.

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)

Ni ipele yii, aworan wa fun ikojọpọ ohun elo C ++ ti ṣetan, ati pe a le tẹsiwaju taara si ṣiṣẹda docker olona-ipele kikọ ohun elo naa.

Olona-ipele ni igbese

A yoo lo aworan ti a ṣẹda pẹlu gbogbo awọn irinṣẹ lori ọkọ bi aworan kikọ. Gẹgẹbi ninu iwe afọwọkọ dockerfile ti tẹlẹ, a yoo ṣafikun agbara lati ṣe iyasọtọ pato nọmba ẹya/aami aworan fun irọrun ti ilotunlo koodu. O ṣe pataki lati fi aami kan kun as builder si aworan ijọ ninu awọn ilana FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

Bayi o to akoko lati kọ ohun elo naa. Ohun gbogbo nibi jẹ ohun rọrun: daakọ koodu orisun ati ohun gbogbo ti o ni nkan ṣe pẹlu rẹ, ki o bẹrẹ ilana ikojọpọ.

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

Ipele ikẹhin ti ṣiṣẹda aworan ikẹhin ni lati pato aworan ipilẹ ti ohun elo, nibiti gbogbo awọn ohun-ini akopọ ati awọn faili iṣeto yoo wa. Lati daakọ awọn faili ti a ṣajọpọ lati aworan apejọ agbedemeji, o gbọdọ pato paramita naa --from=builder ninu awọn ilana COPY.

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

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

Bayi gbogbo ohun ti o ku ni lati ṣafikun awọn igbẹkẹle pataki fun ohun elo wa lati ṣiṣẹ ati pato aṣẹ ifilọlẹ nipasẹ awọn ilana naa ENTRYPOINT tabi CMD.

ipari

Ninu àpilẹkọ yii, Mo ti sọrọ nipa bi o ṣe le ṣẹda agbegbe akojọpọ kikun fun awọn ohun elo C ++ inu apo eiyan labẹ Windows ati bi o ṣe le lo awọn agbara ti docker multi-ipele kọ lati ṣẹda awọn aworan kikun ti ohun elo wa.

orisun: www.habr.com

Fi ọrọìwòye kun