Awọn anfani:
- Agbara lati loye eiyan ati awọn imọran Dockerfile, awọn itọnisọna ipilẹ ati imọ-jinlẹ Layer, ati ni oye atọwọda gbejade Dockerfile ti o ṣetan.
- Agbara lati dinku iwọn aworan ati mu iyara imuṣiṣẹ ati aabo pọ si pẹlu ipilẹ-ipele pupọ ati aworan ipilẹ kekere
- Agbara lati lo awọn ipilẹ aabo ti kii ṣe ifibọ aṣiri ninu aworan, ṣiṣe pẹlu olumulo laigba aṣẹ dipo gbongbo, ati ọlọjẹ aworan naa.
Awọn gbolohun ọrọ "O nṣiṣẹ lori kọmputa mi" jẹ gbolohun ọrọ ti o gbowolori julọ ninu itan-akọọlẹ software. Awọn koodu kanna explodes lori kan yatọ si olupin nitori orisirisi awọn ìkàwé version. Imọ-ẹrọ apoti yanju iṣoro yii ni deede: o fi ohun elo rẹ pẹlu ohun gbogbo ti o nilo lati ṣiṣẹ - awọn ile-ikawe, akoko asiko, awọn eto — sinu package agbeka kan ṣoṣo. Yi package ṣiṣẹ gangan kanna nibi gbogbo. Ọpa eiyan ti o wọpọ julọ jẹ Docker.
Apejuwe ti eiyan ni a pe ni Dockerfile: o jẹ faili ọrọ ti o ṣalaye ni aṣẹ lati iru aworan ipilẹ ti ohun elo rẹ yoo bẹrẹ, awọn faili wo ni yoo daakọ, ati awọn aṣẹ wo yoo ṣiṣẹ. Aworan kan ni a ṣe lati inu ohunelo yii; Nigbati aworan ba ti ṣiṣẹ, o di eiyan. AI jẹ oye pupọ ni kikọ Dockerfile kan ati - diẹ ṣe pataki - idinku ati aabo rẹ. Ṣugbọn o jẹ iṣẹ rẹ lati ni oye kini ohunelo ti ipilẹṣẹ ṣe ati ibiti o ti le jo awọn aṣiri.
Awọn itọnisọna ipilẹ ti Dockerfile
Lati ṣayẹwo Dockerfile, o yẹ ki o mọ awọn ilana ipilẹ:
- `LATI`: Yan aworan ipilẹ (fun apẹẹrẹ Python: 3.12-slim). Eyi ni ibiti iwọn ati aabo ti aworan naa wa ni pataki.
- `WORKDIR`: Ni pato iwe ilana iṣẹ.
- `COPY` / `ADD`: Awọn adakọ awọn faili si aworan.
- `RUN`: Ṣiṣe aṣẹ kan lakoko kikọ (fun apẹẹrẹ fifi igbẹkẹle kan sori ẹrọ). Kọọkan RUN ṣẹda titun kan Layer.
- `ENV`: Ṣe alaye oniyipada ayika.
- `ExPOSE`: Awọn iwe aṣẹ wo ni ibudo apoti ti ngbọ lori.
- `CMD` / `ENTRYPOINT`: Ṣe ipinnu aṣẹ ti yoo ṣiṣẹ nigbati apoti ba bẹrẹ.
Agbekale to ṣe pataki ni Layer: Docker caches kọọkan itọnisọna bi Layer. Ti o ba fi awọn igbesẹ ti n yipada nigbagbogbo ni ipari, awọn ipele ti ko yipada yoo wa lati kaṣe ati kọ yoo yara.
Imọran: Awọn lefa nla meji fun idinku iwọn aworan ni: (1) yiyan aworan ipilẹ kekere bii tẹẹrẹ tabi alpine; (2) lilo ilo-ipele kikọ - fifisilẹ awọn irinṣẹ kikọ ni ipele kan ati gbigbe ọja ikẹhin nikan si aworan tinrin. AI le ṣe imuse awọn meji wọnyi ni oye nigbakugba ti o fẹ.
Kini idi ti aworan kekere jẹ pataki? Nitori iwọn aworan kii ṣe ọrọ disk kan nikan. Aworan nla kan gba to gun lati fa pẹlu imuṣiṣẹ kọọkan, gba aaye diẹ sii ninu iforukọsilẹ, fa fifalẹ ibẹrẹ ti awọn Pods tuntun bi o ṣe n ṣe iwọn, ati nitori pe o ni awọn idii diẹ sii, o pese aaye ikọlu nla kan — iyẹn ni, aaye ṣiṣi fun ikọlu lati lo nilokulo. Lilo aworan 100 MB dipo aworan 1 GB; O kuru akoko imuṣiṣẹ, dinku awọn idiyele ati mu aabo pọ si. Ṣiṣapeye Dockerfile kan n ṣe ikore awọn anfani mẹta wọnyi ni nigbakannaa. Sọ kedere ibi-afẹde “aworan ikẹhin ti o kere julọ” nigbati o ba beere lọwọ AI fun Dockerfile iṣapeye; bayi, o ṣe pataki ni ipinya apakan akopo ati sisọnu awọn idii ti ko wulo.
Igbesẹ nipasẹ igbese: Ṣiṣẹda ati iṣapeye Dockerfile pẹlu AI
- Ṣe apejuwe ohun elo naa. Ede, ẹya, aṣẹ titẹ sii, ibudo ti a gbọ.
- Ṣe agbejade apẹrẹ akọkọ. Beere kan ti o rọrun Dockerfile ṣiṣẹ.
- Jeki o. Beere AI kanna fun kikọ ipele pupọ, aworan ipilẹ kekere ati iṣapeye aṣẹ Layer.
- Ṣayẹwo aabo. Ṣe aṣiri ti a fi sii, ṣe o nṣiṣẹ bi gbongbo, ṣe awọn irinṣẹ ti ko wulo?
- Kọ ati iwọn iwọn. Wo iwọn pẹlu awọn aworan docker lẹhin kikọ docker.
- Ṣayẹwo. Ṣayẹwo fun awọn ailagbara ti a mọ pẹlu ẹrọ ọlọjẹ nilokulo bii docker scout tabi yeye.
Aabo: eiyan-pato ewu
Aabo apoti jẹ irọrun aṣemáṣe. Awọn ofin mẹta:
- Maṣe fi sii Aṣiri ninu aworan naa. Awọn ila bii ENV API_KEY=... tabi COPY .env kọ aṣiri patapata si awọn ipele ti aworan naa; Ẹnikẹni ti o ba gba aworan naa le ka. Fun aṣiri ni akoko ṣiṣe bi iyipada ayika tabi lati inu ifinkan.
- Nṣiṣẹ bi root. Nipa aiyipada, awọn apoti nṣiṣẹ bi root; Šiši le yipada si ona abayo lati inu eiyan naa. Ju silẹ si olumulo laigba aṣẹ pẹlu itọnisọna USER.
- Kekere ati aworan ipilẹ to-si-ọjọ. Awọn aworan blooted jẹ mejeeji losokepupo ati ni awọn ailagbara diẹ sii. Yan tẹẹrẹ/alpine, ṣatunṣe ẹya naa (maṣe lo: tuntun).
Išọra: Paapa ti o ba lo aṣiri kan ni RUN ati lẹhinna paarẹ, o wa ninu agbedemeji ati pe o le ka pada nipasẹ itan-akọọlẹ docker. Ti aṣiri kan ba nilo lakoko kikọ, lo ẹrọ ikọkọ Docker, kii ṣe ENV/COPY.
Iṣapeye ipa tabili
imọ-ẹrọ
Kini o ṣe
Ipa aṣoju
tẹẹrẹ / Alpine mimọ image
Sọ awọn idii ti ko wulo silẹ
900MB → 120MB
Olona-ipele Kọ
Yato si awọn irinṣẹ kikọ
700MB → 90MB
.dockerignor
Ko pẹlu awọn faili ti ko wulo ni kikọ
Yiyara Kọ, kekere ti o tọ
Tito lẹsẹsẹ
Ṣe alekun kaṣe lilu
Kọ iṣẹju 5 → 40 iṣẹju-aaya
Iṣatunṣe ẹya (:15)
Rereatability + aabo
Ṣe idilọwọ ibajẹ lojiji
mẹta mini igba
Irú 1 — 1,1 GB image dinku si 95 MB. Ọkan egbe ká aworan Node.js wà 1,1 GB; Kọọkan imuṣiṣẹ gba iṣẹju. Wọn sọ fun AI “mu eyi pọ si pẹlu ipilẹ-ipele pupọ ati alpine”. AI yapa alakoso akopo ati ki o gbe awọn faili ti ipilẹṣẹ nikan si aworan tinrin; Abajade jẹ 95 MB, akoko imuṣiṣẹ dinku nipasẹ idamẹta kan.
Case 2 - sin ìkọkọ mu. Ẹnjinia ṣe akiyesi laini ENV DB_PASSWORD=aṣiri_prod ninu Dockerfile ti YZ ṣe. AI ti fi ọrọ igbaniwọle sii sinu aworan ki o le “ṣiṣẹ”. Ẹlẹrọ naa yọ eyi kuro o si yipada si kika ọrọ igbaniwọle lati oniyipada ayika ni akoko asiko. Bibẹẹkọ, ẹnikẹni ti o ya aworan le ka ọrọ igbaniwọle naa.
Ọran 3 - ewu ti ona abayo root. Ọpa ọlọjẹ kan royin pe aworan ti AI ṣejade n ṣiṣẹ bi gbongbo ati pe o ni ailagbara pataki kan ninu. Ẹgbẹ naa ṣafikun USER appuser ati titari aworan ipilẹ si ẹya lọwọlọwọ; ọlọjẹ nso. Ẹkọ: ṣayẹwo gbogbo aworan ṣaaju ki o to tẹjade ati fi han si awọn olumulo laigba aṣẹ.
Mẹrin daakọ awọn awoṣe
1) Ṣiṣẹda Dockerfile Iṣapeye:
Kọ Dockerfile ti o ṣetan fun iṣelọpọ fun ohun elo [LANGUAGE/FRAMEWORK. ṣe aworan ti o kẹhin ni o kere julọ.- Aworan ipilẹ jẹ tẹẹrẹ / alpine ati ẹya ti o wa titi (ma ṣe lo ": titun") .- Ṣiṣe apoti naa pẹlu olumulo laigba aṣẹ, KO root.- MASE fi asiri pamọ sinu aworan; Duro fun oniyipada ayika ni akoko asiko. - Fi .dockerignore aba. Aṣẹ titẹ sii: [X], ibudo gbigbọ: [Y].
2) Ṣe ilọsiwaju Dockerfile ti o wa tẹlẹ:
Ṣayẹwo Dockerfile yii lati dinku ati yara. Ṣeduro awọn ayipada ti nja ni awọn ofin ti aṣẹ Layer, kikọ ipele-pupọ, aworan ipilẹ ati awọn idii laiṣe; Kọ si isalẹ iwọn ifoju / ipa iyara ti iyipada kọọkan. Dockerfile: [CONTENT]
3) Ayẹwo aabo:
Ṣayẹwo Dockerfile yii fun aabo: ṣe eyikeyi awọn aṣiri ifibọ, awọn olumulo gbongbo, awọn ẹya ti a ko fi sii, awọn irinṣẹ ti ko wulo, awọn aworan ipilẹ ti igba atijọ? Ṣe atokọ awọn awari ni ọna pataki ati eyikeyi awọn atunṣe. Dockerfile: [CONTENT]
4) Ṣiṣe ipinnu aṣiṣe:
Kini o fa aṣiṣe kọ docker yii ati bii o ṣe le yanju rẹ? Fun mi ni idi root ati ojutu pẹlu awọn ayipada kekere. Maṣe gbejade iye gidi nibiti o ti rii Aṣiri, lo ibi ipamọ. Aṣiṣe: [LOG] Dockerfile: [CONTENT]
Ailagbara kiakia / Alagbara kiakia
Alailagbara: "Kọ Dockerfile kan fun ohun elo Node mi."
Abajade: aworan ipilẹ nla, olumulo gbongbo, ipele ẹyọkan, o ṣee ṣe ipalara si aṣiri; Ijade laisi ero fun iwọn ati aabo.
Alagbara: "Kọ Dockerfile ti o ti ṣetan-jade fun ohun elo Node 20 mi: ipilẹ-ipele pupọ, node: 20-alpine base image (version ti o wa titi), ṣiṣe pẹlu USER laigba aṣẹ, ifibọ ikoko, gbigbọ lori ibudo 3000, wiwọle dist / server.js. Tun daba .dockerignore."
Iyatọ: ẹya itọka keji yoo fun ilana imudara, ofin aabo ati aṣẹ iwọle; Ijade naa di kekere, ailewu ati lilo taara.
Awọn aṣiṣe ti o wọpọ
- Fifi Aṣiri sinu aworan pẹlu `ENV`/`COPY`. O wa ninu awọn ipele ati pe a ka pada.
- Nṣiṣẹ bi root. Sisẹ itọnisọna USER jẹ eewu aabo to ṣe pataki.
- Lilo `: tuntun`. O ṣẹda unrepeatable kọ ati airotẹlẹ disruptions.
- Foju-ile olona-ipele Kọ. Awọn irinṣẹ ikojọpọ lainidi bloat aworan ikẹhin.
- Maṣe kọ `.dockerignore`. Awọn ilana nla bii .git ati node_modules wa ninu kikọ.
- Titẹjade aworan naa laisi ọlọjẹ rẹ. Ṣiṣejade awọn ailagbara ti a mọ laisi mimọ wọn.
Ni akojọpọ
Awọn apoti fi ohun elo sinu awọn idii to ṣee gbe ti o ṣiṣẹ kanna nibi gbogbo; ohunelo jẹ Dockerfile. AI jẹ alagbara ni iṣelọpọ iṣelọpọ-ṣetan ati iṣapeye Dockerfiles - ṣugbọn o nilo lati beere ni ṣoki awọn ipilẹ-ipele pupọ, awọn aworan ipilẹ kekere, ko si awọn olumulo laigba aṣẹ, ko si si awọn aṣiri. Idinku iwọn aworan ṣe iyara imuṣiṣẹ; Kii ṣe ifibọ aṣiri, yiyọ kuro ni gbongbo, ati ṣiṣayẹwo aworan naa ṣe idaniloju aabo. O jẹ ojuṣe rẹ lati mọ daju kini ohunelo kọọkan ṣe ati ibiti o ti jo.
Ohun elo iṣẹ-ṣiṣe
Yan ohun elo ti o rọrun. Ṣe AI ṣe agbekalẹ Dockerfile kan pẹlu awoṣe “Iran Dockerfile Iṣapeye”. Lẹhinna: (1) Ṣe ayẹwo aṣiri ti a fi sii ati olumulo root pẹlu awoṣe “ṣayẹwo Aabo”; (2) ti o ba ṣeeṣe, kọ docker ki o wọn iwọn pẹlu awọn aworan docker; (3) ṣe akiyesi ilana wo ni yoo munadoko julọ ni idinku aworan bi igbesẹ ti n tẹle.
akojọ ayẹwo
- [] Mo ṣafikun ede/ẹya fireemu, aṣẹ titẹ sii, ati ibudo si tọọsi mi.
- [] Ko si awọn aṣiri ifibọ ninu Dockerfile; o ti ṣe yẹ ni ìkọkọ asiko isise.
- [] Apoti naa nṣiṣẹ pẹlu olumulo laigba aṣẹ, kii ṣe gbongbo.
- [] Aworan ipilẹ jẹ kekere (tẹẹrẹ/alpine) ati pe ẹya rẹ ti wa titi (ko si: tuntun).
- [] Mo ti lo olona-ipele Kọ ati .dockerignore.
- [] Mo ti ṣayẹwo aworan naa pẹlu ẹrọ ọlọjẹ ailagbara kan.