Amfani da docker Multi-stage don gina hotunan windows

Sannunku da kowa! Sunana Andrey, kuma ina aiki a matsayin injiniyan DevOps a Exness a cikin ƙungiyar haɓaka. Babban abin da na fi mayar da hankali a kai shi ne ginawa, tura, da kuma kula da aikace-aikacen Docker da ke gudana akan tsarin aiki. Linux (wanda daga nan ake kira OS). Ba da daɗewa ba, ina da aiki tare da irin waɗannan ayyukan, amma tsarin aikin da aka yi niyya ya zama Windows Server da kuma jerin ayyukan C++. A gare ni, wannan shine hulɗa ta farko da kwantena na Docker a ƙarƙashin OS Windows da kuma aikace-aikacen C++ gabaɗaya. Wannan ya ba ni kwarewa mai ban sha'awa kuma ya koya mini wasu daga cikin sarkakiyar tsarin amfani da manhajoji a cikin tsarin aiki. Windows.

Amfani da docker Multi-stage don gina hotunan windows

A cikin wannan labarin, ina so in gaya muku irin matsalolin da na fuskanta da kuma yadda na yi nasarar magance su. Ina fatan wannan zai taimaka wa kalubalenku na yanzu da na gaba. Ji daɗin karatu!

Me yasa kwantena?

Kamfanin yana da tsarin gine-gine na Hashicorp Nomad orchestrator da sauran sassan da suka shafi hakan—Consul da Vault. Saboda haka, an zaɓi tsarin kwantenar aikace-aikace a matsayin hanya ɗaya tilo don isar da mafita da aka gama. Tunda kayan aikin sun haɗa da masu masaukin Docker tare da sigar OS. Windows Server Idan kuna amfani da Core 1803 da 1809, dole ne ku gina nau'ikan hotunan Docker daban-daban don 1803 da 1809. A cikin sigar 1803, yana da mahimmanci a tuna cewa lambar gyara na mai masaukin ginin Docker dole ne ya dace da lambar gyara na hoton Docker na tushe da mai masaukin inda za a ƙaddamar da akwati daga wannan hoton. Sigar 1809 ta kawar da wannan matsalar. Kuna iya karanta ƙarin bayani game da shi anan. a nan.

Me yasa matakai masu yawa?

Injiniyoyin ƙungiyar haɓaka ba su da ko iyakacin damar gina runduna; babu wata hanya da za a hanzarta sarrafa saitin abubuwan da aka haɗa don gina aikace-aikace akan waɗannan runduna, misali, shigar da ƙarin kayan aiki ko kayan aiki don Kayayyakin Kayayyakin Hulɗa. Saboda haka, mun yanke shawarar shigar da duk abubuwan da suka dace don gina aikace-aikacen a cikin ginin Docker. Idan ya cancanta, zaku iya canza fayil ɗin docker da sauri kuma ku ƙaddamar da bututun don ƙirƙirar wannan hoton.

Daga ka'idar zuwa aiki

A cikin kyakkyawan ginin hoto mai matakai da yawa na Docker, yanayin gina aikace-aikacen an shirya shi a cikin rubutun Dockerfile iri ɗaya kamar yadda aka gina aikace-aikacen kanta. Amma a cikin yanayinmu, an ƙara hanyar haɗin gwiwa, wato, matakin farko na ƙirƙirar hoton docker tare da duk abin da ya dace don gina aikace-aikacen. Anyi wannan saboda ina so in yi amfani da fasalin cache na docker don rage lokacin shigarwa na duk abin dogara.

Bari mu kalli mahimman abubuwan rubutun dockerfile don ƙirƙirar wannan hoton.

Don ƙirƙirar hotunan nau'ikan OS daban-daban, zaku iya ayyana hujja a cikin dockerfile ta inda lambar sigar ke wucewa yayin ginin, kuma ita ce alamar hoton tushe.

Cikakken jerin alamun hoto na Microsoft Windows Server za a iya samu a nan.

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

Ta hanyar tsoho umarni a cikin umarnin RUN a cikin fayil ɗin docker a cikin OS Windows Ana aiwatar da su a cikin na'urar cmd.exe. Domin sauƙin rubuta rubutun da kuma faɗaɗa ayyukan umarnin da aka yi amfani da su, za mu sake fassara na'urar aiwatar da umarni zuwa Powershell ta amfani da umarnin da ke ƙasa: SHELL.

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

Mataki na gaba shine shigar da manajan kunshin cakulan da fakitin da suka dace:

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'

Don shigar da fakiti ta amfani da cakulan, zaku iya kawai wuce su azaman jeri, ko shigar da su ɗaya bayan ɗaya idan kuna buƙatar wuce sigogi na musamman ga kowane fakitin. A halin da muke ciki, mun yi amfani da fayil mai bayyanawa a cikin tsarin XML, wanda ya ƙunshi jerin fakitin da ake buƙata da sigoginsu. Abubuwan da ke cikinsa sun yi kama da haka:

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

Bayan haka, muna shigar da yanayin gina aikace-aikacen, wato, MS Build Tools 2019 - wannan sigar 2019 ce mai nauyi, wacce ta ƙunshi mafi ƙarancin abubuwan da ake buƙata don haɗa lamba.
Don cikakken aiki tare da aikin mu na C++, za mu buƙaci ƙarin abubuwa, wato:

  • Kayan aiki na C++
  • Kayan aiki v141
  • Windows 10 SDK (10.0.17134.0)

Kuna iya shigar da ƙarin saitin kayan aikin ta atomatik ta amfani da fayil ɗin sanyi a tsarin JSON. Abubuwan da ke cikin tsarin saiti:

Za'a iya samun cikakken jerin abubuwan da aka samu akan rukunin takaddun 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 yana gudanar da rubutun shigarwa, kuma don dacewa, yana ƙara hanyar gina kayan aikin fayilolin aiwatarwa zuwa canjin yanayi. PATH. Hakanan yana da kyau a cire fayiloli da kundayen adireshi marasa amfani don rage girman hoton.

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)

A wannan matakin, hotonmu don haɗa aikace-aikacen C++ ya shirya, kuma za mu iya ci gaba kai tsaye zuwa ƙirƙirar ginin aikace-aikacen da yawa matakai.

Multi-mataki a cikin aiki

Za mu yi amfani da hoton da aka ƙirƙira tare da duk kayan aikin da ke kan jirgin azaman hoton gini. Kamar yadda yake a cikin rubutun dockerfile na baya, za mu ƙara ikon tantance lambar sigar/tambarin hoto don sauƙin sake amfani da lambar. Yana da mahimmanci don ƙara lakabi as builder zuwa hoton taro a cikin umarnin FROM.

ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder

Yanzu lokaci yayi da za a gina aikace-aikacen. Komai anan abu ne mai sauqi: kwafi lambar tushe da duk abin da ke da alaƙa da shi, sannan fara tsarin tattarawa.

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

Mataki na ƙarshe na ƙirƙirar hoto na ƙarshe shine ƙayyade ainihin hoton aikace-aikacen, inda duk kayan tarihi da fayilolin daidaitawa za su kasance. Don kwafe fayilolin da aka haɗe daga hoton taro na tsaka-tsaki, dole ne ku saka ma'aunin --from=builder a cikin umarnin COPY.

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

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

Yanzu abin da ya rage shi ne ƙara abubuwan da suka dace don aikace-aikacenmu don yin aiki da kuma ƙayyade umarnin ƙaddamarwa ta hanyar umarnin ENTRYPOINT ko CMD.

ƙarshe

A cikin wannan labarin, na yi bayani kan yadda ake ƙirƙirar cikakken yanayin tattara bayanai don aikace-aikacen C++ a cikin akwati a ƙarƙashin Windows da kuma yadda ake amfani da damar gina Docker mai matakai da yawa don ƙirƙirar cikakkun hotuna na aikace-aikacenmu.

source: www.habr.com

Sayi amintaccen masauki don shafuka tare da kariyar DDoS, sabar VPS VDS 🔥 Sayi ingantaccen masaukin yanar gizo tare da kariyar DDoS, sabar VPS VDS | ProHoster