Ke hoʻohana nei i ka docker multi-stage e kūkulu i nā kiʻi windows
Aloha kākou! ʻO Andrey koʻu inoa, a ke hana nei au ma ke ʻano he ʻenekini DevOps ma Exness i ka hui hoʻomohala. ʻO kaʻu hana koʻikoʻi e pili ana i ke kūkulu ʻana, ke kau ʻana a me ke kākoʻo ʻana i nā noi ma docker ma lalo o ka ʻōnaehana hana Linux (i kapa ʻia ʻo OS). ʻAʻole i liʻuliʻu, ua loaʻa iaʻu kahi hana me nā hana like, akā ʻo ka OS target o ka papahana ʻo Windows Server a me kahi hoʻonohonoho o nā papahana C++. Noʻu, ʻo kēia ka pilina pili mua me nā pahu docker ma lalo o Windows OS a, ma ka laulā, me nā noi C++. Mahalo i kēia, ua loaʻa iaʻu kahi ʻike hoihoi a aʻo e pili ana i kekahi o nā paʻakikī o ka hoʻopili ʻana i nā noi ma Windows.
Ma kēia ʻatikala makemake wau e haʻi iā ʻoe i nā pilikia aʻu i kū ai a pehea wau i hoʻoponopono ai iā lākou. Manaʻo wau he mea kōkua kēia no kāu mau pilikia o kēia manawa a me ka wā e hiki mai ana. Nanea i ka heluhelu!
No ke aha nā ipu?
Loaʻa i ka hui nā ʻōnaehana no ka Hashicorp Nomad container orchestrator a me nā ʻāpana pili - Consul and Vault. No laila, ua koho ʻia ka containerization no ka hoʻopuka ʻana i kahi hopena piha. No ka mea, loaʻa i ka ʻōnaehana papahana nā pūʻali docker me Windows Server Core OS versions 1803 a me 1809, pono e kūkulu i nā ʻano like ʻole o nā kiʻi docker no 1803 a me 1809. Ma ka mana 1803, he mea nui e hoʻomanaʻo i ka helu hoʻoponopono o ka hale hana docker build. pono e kūlike me ka helu hoʻoponopono o ke kiʻi docker kumu a me ka mea hoʻokipa kahi e hoʻokuʻu ʻia ai ka pahu mai kēia kiʻi. ʻAʻohe o ia drawback o ka version 1809. Hiki iā ʻoe ke heluhelu hou aku maanei.
No ke aha he nui-pae?
ʻAʻohe a i ʻole liʻiliʻi loa o ka poʻe ʻenekinia hui hoʻomohala e kūkulu i nā pūʻali; ʻaʻohe ala e hoʻokele wikiwiki ai i ka hoʻonohonoho o nā ʻāpana no ke kūkulu ʻana i kahi noi ma kēia mau pūʻali, no ka laʻana, e hoʻokomo i kahi hāmeʻa hou a i ʻole nā hana hana no Visual Studio. No laila, ua hoʻoholo mākou e hoʻokomo i nā ʻāpana āpau e pono ai e kūkulu i ka noi i ke kiʻi kūkulu Docker. Inā pono, hiki iā ʻoe ke hoʻololi koke i ka dockerfile a hoʻomaka i ka pipeline no ka hana ʻana i kēia kiʻi.
Mai ka manaʻo i ka hana
Ma kahi kiʻi kiʻi nui Docker maikaʻi loa, ua hoʻomākaukau ʻia ke kaiapuni no ke kūkulu ʻana i ka noi ma ka palapala Dockerfile like me ke kūkulu ʻia ʻana o ka noi ponoʻī. Akā i kā mākou hihia, ua hoʻohui ʻia kahi loulou waena, ʻo ia hoʻi, ka pae o ka hana mua ʻana i kahi kiʻi docker me nā mea āpau e pono ai e kūkulu i ka noi. Ua hana ʻia kēia no ka mea makemake wau e hoʻohana i ka hiʻohiʻona docker cache e hōʻemi i ka manawa hoʻonohonoho o nā hilinaʻi āpau.
E nānā i nā kumu nui o ka palapala dockerfile no ka hana ʻana i kēia kiʻi.
No ka hana ʻana i nā kiʻi o nā ʻano OS like ʻole, hiki iā ʻoe ke wehewehe i kahi hoʻopaʻapaʻa ma ka dockerfile kahi i hala ai ka helu helu i ka wā o ke kūkulu ʻana, a ʻo ia hoʻi ka hōʻailona o ke kiʻi kumu.
Hiki ke loaʻa kahi papa inoa piha o nā kiʻi kiʻi Microsoft Windows Server maanei.
ARG WINDOWS_OS_VERSION=1809
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
Ma ka paʻamau nā kauoha i nā kuhikuhi RUN i loko o ka dockerfile ma Windows OS ua hoʻokō ʻia lākou i ka console cmd.exe. No ka maʻalahi o ke kākau ʻana i nā palapala a me ka hoʻonui ʻana i ka hana o nā kauoha i hoʻohana ʻia, e wehewehe hou mākou i ka console hoʻokō kauoha ma Powershell ma o ke aʻo ʻana. SHELL.
No ka hoʻokomo ʻana i nā pūʻolo me ka chocolatey, hiki iā ʻoe ke hāʻawi wale iā lākou ma ke ʻano he papa inoa, a i ʻole e hoʻokomo iā lākou i kēlā me kēia manawa inā pono ʻoe e hāʻawi i nā ʻāpana kūʻokoʻa no kēlā me kēia pūʻolo. I ko mākou kūlana, ua hoʻohana mākou i kahi faila i hōʻike ʻia ma ka format XML, aia kahi papa inoa o nā pūʻolo koi a me kā lākou mau palena. Penei kona mau mea:
Ma hope aʻe, hoʻokomo mākou i ke kaiapuni kūkulu noi, ʻo ia hoʻi, MS Build Tools 2019 - he ʻano māmā kēia o Visual Studio 2019, aia ka liʻiliʻi i koi ʻia o nā ʻāpana no ka hōʻuluʻulu ʻana i nā code.
No ka hana piha me kā mākou papahana C++, pono mākou i nā ʻāpana ʻē aʻe, ʻo ia hoʻi:
Nā mea hana C++ hoʻouka hana
Mea hana v141
Windows 10 SDK (10.0.17134.0)
Hiki iā ʻoe ke hoʻouka i kahi pūʻulu o nā mea hana me ka hoʻohana ʻana i kahi faila hoʻonohonoho ma JSON format. Nā maʻiʻo waihona hoʻonohonoho:
Ke holo nei ka dockerfile i ka palapala hoʻonohonoho, a no ka maʻalahi, hoʻohui i ke ala i nā mea hana hana i hiki ke hoʻokō ʻia i nā faila i ka loli kaiapuni. PATH. He mea maikaʻi hoʻi e wehe i nā faila pono ʻole a me nā papa kuhikuhi e hōʻemi i ka nui o ke kiʻi.
I kēia pae, ua mākaukau kā mākou kiʻi no ka hoʻopili ʻana i ka noi C++, a hiki iā mākou ke hoʻomau pololei i ka hana ʻana i kahi docker multi-stage build o ka noi.
Nui-pae i ka hana
E hoʻohana mākou i ke kiʻi i hana ʻia me nā mea hana a pau ma luna o ka moku e like me ke kiʻi kūkulu. E like me ka palapala dockerfile mua, e hoʻohui mākou i ka hiki ke hoʻohālikelike i ka helu helu / kiʻi kiʻi no ka maʻalahi o ka hoʻohana hou ʻana. He mea nui e hoʻohui i kahi lepili as builder i ke kiʻi hui ma nā kuhikuhi FROM.
ARG WINDOWS_OS_VERSION=1809
FROM buildtools:$WINDOWS_OS_VERSION as builder
ʻO ka manawa kēia e kūkulu ai i ka noi. He mea maʻalahi loa nā mea a pau: kope i ke code kumu a me nā mea a pau e pili ana me ia, a hoʻomaka i ke kaʻina hana.
ʻO ka pae hope loa o ka hana ʻana i ke kiʻi hope loa, ʻo ia ke kuhikuhi i ke kiʻi kumu o ka noi, kahi e loaʻa ai nā mea kiʻi hoʻohui a me nā faila hoʻonohonoho. No ke kope ʻana i nā faila i hōʻuluʻulu ʻia mai ke kiʻi hui waena, pono ʻoe e kuhikuhi i ka ʻāpana --from=builder ma na kuhikuhi COPY.
FROM mcr.microsoft.com/windows/servercore:$WINDOWS_OS_VERSION
COPY --from=builder C:/x64/Release/myapp/ ./
COPY ./configs ./
ʻO nā mea a pau i koe e hoʻohui i nā hilinaʻi pono no kā mākou noi e hana a kuhikuhi i ke kauoha hoʻomaka ma o nā kuhikuhi ENTRYPOINT ai ole ia, CMD.
hopena
Ma kēia ʻatikala, ua kamaʻilio wau e pili ana i ka hana ʻana i kahi kaiapuni hoʻohui piha piha no nā noi C ++ i loko o kahi pahu Windows a pehea e hoʻohana ai i nā mana o docker multi-stage builds e hana i nā kiʻi piha piha o kā mākou noi.