Ag baint úsáide as docker il-chéim chun íomhánna fuinneoga a thógáil

Haigh a chairde! Is mise Andrey, agus oibrím mar innealtóir DevOps ag Exness ar an bhfoireann forbartha. Is é mo phríomhfhócas feidhmchláir Docker a thógáil, a imscaradh agus a chothabháil atá ag rith ar an gcóras oibriúcháin. Linux (dá ngairtear OS anseo feasta). Le déanaí, bhí tasc agam leis na gníomhaíochtaí céanna, ach ba é OS sprioc an tionscadail ná Windows Server и набор проектов на C++. Для меня это было первое плотное взаимодействие c docker контейнерами под ОС Windows и в целом с приложениями на C++. Благодаря этому я получил интересный опыт и узнал о некоторых тонкостях контейнеризации приложений в ОС Windows.

Ag baint úsáide as docker il-chéim chun íomhánna fuinneoga a thógáil

San Airteagal seo ba mhaith liom a insint duit cad iad na deacrachtaí a bhí romham agus conas a d’éirigh liom iad a réiteach. Tá súil agam go gcabhróidh sé seo le do dhúshláin reatha agus amach anseo. Bain sult as léamh!

Cén fáth coimeádáin?

В компании есть существующая инфраструктура оркестратора контейнеров Hashicorp Nomad и связанных компонентов — Consul и Vault. Поэтому контейнеризация приложений была выбрана как унифицированный метод доставки готового решения. Так как в инфраструктуре проекта имеются docker-хосты с версиями ОС Windows Server Core 1803 и 1809, то необходимо собирать отдельно версии docker-образов для 1803 и 1809. В версии 1803 важно помнить о том, что номер ревизии сборочного docker-хоста должен совпадать с номером ревизии базового docker-образа и хоста, где контейнер из этого образа будет запущен. Версия 1809 лишена такого недостатка. Подробнее можно прочитать anseo.

Cén fáth il-chéim?

Níl aon rochtain nó rochtain an-teoranta ag innealtóirí foirne forbartha ar óstaigh a thógáil; níl aon bhealach ann chun sraith na gcomhpháirteanna a bhainistiú go tapa chun feidhmchlár a thógáil ar na hóstach sin, mar shampla, tacar uirlisí breise nó ualach oibre a shuiteáil le haghaidh Visual Studio. Mar sin, rinneamar an cinneadh na comhpháirteanna go léir is gá a shuiteáil chun an t-iarratas a chur san íomhá Docker tógála. Más gá, ní féidir leat ach an dockerfile a athrú go tapa agus an phíblíne chun an íomhá seo a chruthú a sheoladh.

Ó teoiric go gníomh

I dtógáil íomhá ilchéime idéalach Docker, ullmhaítear an timpeallacht chun an t-iarratas a thógáil sa script Dockerfile céanna mar a thógtar an t-iarratas féin. Ach inár gcás, cuireadh nasc idirmheánach leis, eadhon, an chéim a bhaineann le réamhchruthú íomhá docker le gach rud is gá chun an t-iarratas a thógáil. Rinneadh é seo toisc go raibh mé ag iarraidh an ghné taisce docker a úsáid chun am suiteála gach spleáchais a laghdú.

Breathnaímid ar phríomhphointí an script dockerfile chun an íomhá seo a chruthú.

Chun íomhánna de leaganacha éagsúla OS a chruthú, is féidir leat argóint a shainiú sa dockerfile trína gcuirtear uimhir an leagain ar aghaidh le linn na tógála, agus is é clib an bhuníomhá é freisin.

Полный список тэгов образов Microsoft Windows Server is féidir a aimsiú anseo.

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

De réir réamhshocraithe na horduithe sna treoracha RUN внутри dockerfile в ОС Windows выполняются в консоли cmd.exe. Для удобства написания скриптов и расширения функционала используемых команд переопределим консоль исполнения команд на Powershell через инструкцию SHELL.

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

Is é an chéad chéim eile ná an bainisteoir pacáiste seacláide agus na pacáistí riachtanacha a shuiteáil:

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'

Chun pacáistí a shuiteáil ag baint úsáide as chocolatey, is féidir leat iad a chur ar aghaidh go simplí mar liosta, nó iad a shuiteáil ceann ag an am más gá duit paraiméadair uathúla a rith do gach pacáiste. Inár gcás, d'úsáideamar comhad follasach i bhformáid XML, ina bhfuil liosta de na pacáistí riachtanacha agus a bparaiméadar. Breathnaíonn a bhfuil ann mar seo:

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

Ansin, cuirimid an timpeallacht tógála feidhmchlár, eadhon, MS Build Tools 2019 - is leagan éadrom é seo de Visual Studio 2019, ina bhfuil an t-íosmhéid comhpháirteanna riachtanacha chun cód a thiomsú.
Chun oibriú go hiomlán lenár dtionscadal C++, beidh comhpháirteanna breise ag teastáil uainn, is iad sin:

  • Ualach oibre C++ uirlisí
  • Foireann uirlisí v141
  • Windows 10 SDK (10.0.17134.0)

Is féidir leat sraith uirlisí leathnaithe a shuiteáil go huathoibríoch ag baint úsáide as comhad cumraíochta i bhformáid JSON. Ábhar an chomhaid chumraíochta:

Is féidir liosta iomlán de na comhpháirteanna atá ar fáil a fháil ar an suíomh doiciméadúcháin 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"
  ]
}

Ritheann an dockerfile an script suiteála, agus ar mhaithe le caoithiúlacht, cuireann sé an cosán chuig comhaid inrite na n-uirlisí tógála leis an athróg timpeallachta PATH. Tá sé inmholta freisin comhaid agus eolairí nach bhfuil gá leo a bhaint chun méid na híomhá a laghdú.

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)

Ag an gcéim seo, tá ár n-íomhá chun an feidhmchlár C++ a thiomsú réidh, agus is féidir linn dul ar aghaidh go díreach chuig tógáil ilchéime docker den fheidhmchlár.

Il-chéim i ngníomh

Bainfimid úsáid as an íomhá cruthaithe agus na huirlisí go léir ar bord mar íomhá tógála. Mar a bhí sa script dockerfile roimhe seo, cuirfimid leis an gcumas uimhir an leagain/chlib íomhá a shonrú go dinimiciúil chun cód a athúsáid go héasca. Tá sé tábhachtach lipéad a chur leis as builder chuig an íomhá tionóil sna treoracha FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

Anois tá sé in am an t-iarratas a thógáil. Tá gach rud anseo simplí go leor: cóipeáil an cód foinse agus gach rud a bhaineann leis, agus cuir tús leis an bpróiseas tiomsaithe.

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

Is é an chéim dheireanach de chruthú na híomhá deiridh ná buníomhá an fheidhmchláir a shonrú, áit a mbeidh gach déantán tiomsaithe agus comhaid cumraíochta suite. Chun comhaid tiomsaithe a chóipeáil ón íomhá tionóil idirmheánach, ní mór duit an paraiméadar a shonrú --from=builder sna treoracha COPY.

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

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

Anois níl fágtha ach na spleáchais riachtanacha a chur leis chun go n-oibreoidh ár n-iarratas agus an t-ordú seolta a shonrú trí na treoracha ENTRYPOINTCMD.

Conclúid

В этой статье я рассказал, как создать полноценную среду компиляции C++ приложений внутри контейнера под Windows и о том, как использовать возможности docker multi-stage сборок для создания полноценных образов нашего приложения.

Foinse: will.com

Ceannaigh óstáil iontaofa do shuímh le cosaint DDoS, freastalaithe VPS VDS 🔥 Ceannaigh óstáil gréasáin iontaofa le cosaint DDoS, freastalaithe VPS VDS | ProHoster