Pọ́ọ̀sì àdáni tí ó máa ń yanjú láìsí wàhálà lorí ẹ̀rọ rẹ le kùnà nínú build pẹ̀lú 404 tàbí àkókò píparí, Dockerfile kì í sábà jẹ́ ìdí. Ìgbésẹ̀ build ń ṣiṣẹ́ ní ààyè orúkọ nẹ́tíwọ́kì mìíràn, pẹ̀lú ojú DNS mìíràn àti ibi ìpamọ́ ẹ̀rí mìíràn ju shell tí o ti dán wò lọ. Lọ gbà àwọn àyẹ̀wò wọ̀nyí ní ìtẹ̀síwájú kí o sì dúró ní èyí àkọ́kọ́ tí ó kùnà, nítorí gbogbo àyẹ̀wò tí ó tẹ̀le máa ń rò pé èyí tí ó ṣáájú ti kọjá. Ìgbésẹ̀ kọ̀ọ̀kan máa ń dárúkọ àṣẹ tí ó pinnu ọ̀ràn náà.

Bẹ̀rẹ̀ pẹ̀lú dídárúkọ builder, kì í ṣe Dockerfile

BuildKit le jẹ́ ti ìbílẹ̀, nínú kọ́ńténíà tàbí lórí ẹ̀rọ mìíràn, ọ̀kọ̀ọ̀kan sì ní nẹ́tíwọ́kì àìpé tirẹ̀. Ṣe é docker buildx ls kí o sì ka node tí a fi àmì ìràwọ̀ sí kí o tó yí nǹkan kan padà. Ọ̀kan docker-container darakuta tàbí builder ojú-ọ̀run kì í pín ọ̀nà àdáni lórí kọ̀mpútà gbéékọ́ rẹ kìkì nítorí pé o tẹ àṣẹ náà níbẹ̀. Tí builder tí ń ṣiṣẹ́ bá wà ní ọ̀nà jíjìnà, gbogbo àyẹ̀wò tí ó kù gbọ́dọ̀ ṣiṣẹ́ lórí olùgbàlejò yẹn, kì í ṣe orí ibùdó iṣẹ́ rẹ.

Builder tún gbé tirẹ̀ ètò resolver àti àwọn òǹdè proxypẹ̀lú. Àwọn méjèèjì ni a ń kà ní àkókò build, a kì í jogún wọn láti terminal tí ó bẹ̀rẹ̀ build.

Fi ọ̀nà nẹ́tíwọ́kì hàn láti inú ìgbésẹ̀ build

Kọ ìpele ìgbà kan tí yóò yanjú olùgbàlejò ìgbẹ́kẹ̀lé kí ó sì ṣí ìsopọ̀ sí i. Èyí ni ìdánwò kan ṣoṣo tí ó dáhùn ìbéèrè fún builder, kì í ṣe fún shell rẹ.

FROM alpine:3.20
RUN apk add --no-cache curl bind-tools  && getent hosts registry.example.internal  && curl -sS -o /dev/null -w "%{http_code}
" https://registry.example.internal/simple/

Kọ́ fáìlì yẹn pẹ̀lú builder, ipò nẹ́tíwọ́kì àti àwọn gbígbé secret kan náà tí build gidi rẹ ń lò: docker buildx build --builder remote0 -f Dockerfile.probe --progress=plain .. Tí getent kò bá tẹ̀wé nǹkan kan, àṣìṣe wà nínú yíyanjú orúkọ, kò sì sí ẹ̀rí tí yóò tún un ṣe. Tí orúkọ bá yanjú ṣùgbọ́n curl bá sọ àkókò píparí, ìdíwọ́ ni ọ̀nà tàbí ìlànà àgbáyé níwájú ibi ìforúkọsílẹ̀.

Pa aṣàwárí náà rẹ́ ní kété tí ó bá dáhùn. Ìpele àyẹ̀wò ni, kò sì gbọ́dọ̀ ní àmì tàbí títì kà.

Gbé ẹ̀rí náà kalẹ̀ dípò kíkọ̀ ọ́

Nígbà tí ọ̀nà bá ṣiṣẹ́, ìjẹ́rìí ni ìkùnà tí ó tẹ̀le nínú ìlà. Gbígbé secret BuildKit kalẹ̀ fi fáìlì hàn sí ìgbésẹ̀ RUN kan ṣoṣo láìkọ ọ́ sínú pẹ̀lẹ́ẹ̀sì, ìyẹn ni ohun tí irinṣẹ́ ìgbẹ́kẹ̀lé nílò àti ohun tí image kò gbọ́dọ̀ pa mọ́.

RUN --mount=type=secret,id=npmrc,target=/root/.npmrc     npm ci --omit=dev

Secret gbọ́dọ̀ wá láti ẹ̀yìn Dockerfile: docker buildx build --secret id=npmrc,src=/home/me/.npmrc .. Fáìlì náà dúró pẹ̀lú oníbàárà, kò sì ní kúnà sínú ìtàn image. Ọ̀kan ARG tàbí ENV pẹ̀lú token kan náà kò ṣe iṣẹ́ yìí, nítorí a ń kọ àwọn méjèèjì sínú ètò image.

Image tí kì í ṣe root nílò ọ̀nà àfojúsùn tirẹ̀, bíi /home/app/.npmrc tàbí fáìlì tí ó dọ́gba fún pip, Maven tàbí Cargo. Àfojúsùn gbígbé kalẹ̀ gbọ́dọ̀ bá olùmúlò tí ń ṣe àṣẹ náà mu, bí bẹ́ẹ̀ kọ́ irinṣẹ́ náà yóò sọ pé fáìlì ètò tí ó wà ní tòótọ́ kò sí.

Ṣàyẹ̀wò ohun tí irinṣẹ́ ìgbẹ́kẹ̀lé fi sílẹ̀ nínú image

Gbígbé kalẹ̀ fún àkókò díẹ̀ ń pa ẹ̀rí mọ́ kúrò nínú pẹ̀lẹ́ẹ̀sì, ṣùgbọ́n kò dá irinṣẹ́ náà dúró láti kọ ohun mìíràn. Àwọn alábòjútó pọ́ọ̀sì ń fi fáìlì lock, àwọn àpò cache àti nígbà mìíràn URL ibi ìforúkọsílẹ̀ tí a ti yanjú sílẹ̀.

Ka ètò àwọn fáìlì tí ó ti parí dípò gbẹ́kẹ̀lé Dockerfile. docker history --no-trunc image:tag ń ṣàkójọ gbogbo àṣẹ pẹ̀lẹ́ẹ̀sì, àti docker run --rm image:tag sh -c "ls -a /root" ń fi ohun tí ó yè kúrò sínú kọ́ńténíà tí ń ṣiṣẹ́ hàn. Kódà nígbà tí a kàn gbé fáìlì náà kalẹ̀, token tí a kọ sínú ìlà log ní npm ci àkókò náà ṣì jẹ́ àjásílẹ̀.

Ka log build pẹ̀lú, nítorí --progress=plain ń tẹ̀wé àbájáde àwọn àṣẹ gẹ́gẹ́ bí ó ti rí. Tí token bá farahàn níbẹ̀, yí i padà kí o tó ṣe ohunkóhun mìíràn kí o sì gbà á kọjá nínú fáìlì tí irinṣẹ́ náà ń kà ní ìdákẹ́jẹ́.

Jẹ́rìí pé image àkókò ṣíṣe kò nílò ọ̀nà àdáni mọ́

Build àti ètò tí ń ṣiṣẹ́ jẹ́ olùmúlò méjì tí ó yàtọ̀ fún ìgbẹ́kẹ̀lé kan náà, àti pé ẹ̀kọ́kọ́ nìkan ni ó nílò ọ̀nà àdáni. Image tí ó ti parí gbọ́dọ̀ bẹ̀rẹ̀, yanjú àwọn ìgbẹ́kẹ̀lé àkókò ṣíṣe rẹ̀ kí ó sì sìn ìrìnàjò láìsí ẹ̀rí build.

Dán an wò níbi tí a kò ti lè dé ibi ìforúkọsílẹ̀ àdáni, tàbí kàn bẹ̀rẹ̀ kọ́ńténíà náà pẹ̀lú --network none kí o sì jẹ́rìí pé ó bẹ̀rẹ̀ láìsí secret tí a gbé kalẹ̀. Kọ́ńténíà tí ó kàn ń bẹ̀rẹ̀ nígbà tí build secret wà ṣì so mọ́ àyíká build.

Tí kọ́ńténíà náà bá nílò ibi ìforúkọsílẹ̀ ní àkókò ṣíṣe gan-an, ìyẹn jẹ́ ìpinnu àǹfààní ọ̀tọ̀, ibi rẹ̀ sì ni ibi ìpamọ́ secret ti olùṣàkóso, kì í ṣe build. Kọ àwọn ọ̀nà méjèèjì lọ́tọ̀ kí ẹnikẹ́ni má bàa gbìyànjú láti tún fà kíkàn ní àkókò ṣíṣe ṣe pẹ̀lú àsíá build. Nígbà tí gbogbo àyẹ̀wò márùn-ún bá kọjá, àmì àkọ́kọ́ ní ìdí tí a dárúkọ ní gbogbo pẹ̀lẹ́ẹ̀sì, kì í ṣe àròsọ nípa nẹ́tíwọ́kì Docker.

Àwọn àpilẹ̀kọ tó jọra